"""
设置控制器模块
负责应用设置的管理、保存、加载等功能
"""
from typing import Dict, Any
from PySide6.QtCore import Signal
from .base_controller import BaseController
[文档]
class SettingsController(BaseController):
"""
设置控制器
负责应用设置的管理、保存、加载等功能
"""
# 设置相关信号
settings_loaded = Signal(dict) # 设置数据
settings_saved = Signal()
settings_changed = Signal(str, object) # 设置项名称, 新值
[文档]
def __init__(self, parent=None):
"""初始化设置控制器"""
super().__init__(parent)
self._settings = {
"game": {
"minecraft_directory": "",
"java_path": "",
"max_memory": 2048,
"jvm_args": "-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200",
"resolution_width": 854,
"resolution_height": 480,
"fullscreen": False,
},
"launcher": {
"language": "zh_CN",
"theme": "dark",
"check_updates": True,
"close_launcher_when_game_starts": True,
},
"download": {
"download_source": "official",
"concurrent_downloads": 3,
"download_assets": True,
"download_libraries": True,
},
}
[文档]
def initialize(self) -> bool:
"""
初始化控制器
Returns:
bool: 初始化是否成功
"""
# 加载设置
self.load_settings()
return True
[文档]
def load_settings(self) -> None:
"""加载设置"""
# 异步加载设置
self.run_async_task("load_settings", self._async_load_settings)
def _async_load_settings(self) -> Dict[str, Any]:
"""
异步加载设置
Returns:
Dict[str, Any]: 设置数据
"""
# TODO: 从Core层加载设置
# 模拟加载设置
import time
time.sleep(0.5)
# 发送设置加载信号
self.settings_loaded.emit(self._settings)
return self._settings
[文档]
def save_settings(self) -> None:
"""保存设置"""
# 异步保存设置
self.run_async_task("save_settings", self._async_save_settings)
def _async_save_settings(self) -> bool:
"""
异步保存设置
Returns:
bool: 保存是否成功
"""
# TODO: 调用Core层保存设置
# 模拟保存设置
import time
time.sleep(0.5)
# 发送设置保存信号
self.settings_saved.emit()
return True
[文档]
def get_setting(self, section: str, key: str, default=None) -> Any:
"""
获取设置项
Args:
section: 设置分区
key: 设置项键名
default: 默认值
Returns:
Any: 设置项值
"""
if section in self._settings and key in self._settings[section]:
return self._settings[section][key]
return default
[文档]
def set_setting(self, section: str, key: str, value: Any) -> None:
"""
设置设置项
Args:
section: 设置分区
key: 设置项键名
value: 设置项值
"""
if section not in self._settings:
self._settings[section] = {}
# 检查值是否变化
old_value = self._settings[section].get(key)
if old_value != value:
self._settings[section][key] = value
self.settings_changed.emit(f"{section}.{key}", value)
[文档]
def get_all_settings(self) -> Dict[str, Dict[str, Any]]:
"""
获取所有设置
Returns:
Dict[str, Dict[str, Any]]: 所有设置
"""
return self._settings