Files
KKAFIO/app/view/main_window.py
RedDeadDepresso 5cc96fa121 refactor: logger
2024-09-20 01:26:15 +01:00

106 lines
4.3 KiB
Python

# coding: utf-8
from typing import List
from PySide6.QtCore import Qt, QUrl, QSize
from PySide6.QtGui import QIcon, QDesktopServices
from PySide6.QtWidgets import QApplication
from qfluentwidgets import (NavigationItemPosition, FluentWindow,
SplashScreen)
from qfluentwidgets import FluentIcon as FIF
from .logger_interface import LoggerInterface
from .setting_interface import SettingInterface
from ..common.config import ZH_SUPPORT_URL, EN_SUPPORT_URL, cfg
from ..common.signal_bus import signalBus
from ..common import resource
from ..components.navigation_checkbox import NavigationCheckBox
from ..components.navigation_action_buttons import NavigationActionButtons
from ..components.navigation_logo import NavigationLogoWidget
class MainWindow(FluentWindow):
def __init__(self):
super().__init__()
self.initWindow()
# create sub interface
self.loggerInterface = LoggerInterface(self)
self.settingInterface = SettingInterface(self)
# enable acrylic effect
self.navigationInterface.setAcrylicEnabled(True)
self.navigationInterface.setReturnButtonVisible(False)
self.navigationInterface.setMenuButtonVisible(False)
self.navigationInterface.setCollapsible(False)
self.connectSignalToSlot()
# add items to navigation interface
self.initNavigation()
self.splashScreen.finish()
def connectSignalToSlot(self):
signalBus.micaEnableChanged.connect(self.setMicaEffectEnabled)
signalBus.switchToSettingGroup.connect(self.switchToSetting)
signalBus.supportSignal.connect(self.onSupport)
signalBus.startSignal.connect(lambda: self.stackedWidget.setCurrentWidget(self.loggerInterface, False))
def initNavigation(self):
# add navigation items
self.navigationInterface.panel.topLayout.addSpacing(40)
self.navigationInterface.addWidget(
'Logo',
NavigationLogoWidget(':/gallery/images/logo.png', QSize(160, 160)),
position=NavigationItemPosition.TOP
)
self.navigationInterface.panel.topLayout.setAlignment(Qt.AlignCenter)
scrollLayout = self.navigationInterface.panel.scrollLayout
scrollLayout.addWidget(NavigationCheckBox('Create Backup', cfg.backupEnable, self.settingInterface.backupGroup))
scrollLayout.addWidget(NavigationCheckBox('Filter and Convert KKS', cfg.fckksEnable, self.settingInterface.fckksGroup))
scrollLayout.addWidget(NavigationCheckBox('Install Chara', cfg.installEnable, self.settingInterface.installGroup))
scrollLayout.addWidget(NavigationCheckBox('Remove Chara', cfg.removeEnable, self.settingInterface.removeGroup))
scrollLayout.addWidget(NavigationActionButtons())
# add custom widget to bottom
self.addSubInterface(
self.loggerInterface, FIF.CALENDAR, self.tr('Log'), NavigationItemPosition.BOTTOM)
self.addSubInterface(
self.settingInterface, FIF.SETTING, self.tr('Settings'), NavigationItemPosition.BOTTOM)
def initWindow(self):
self.resize(960, 780)
self.setMinimumWidth(760)
self.setWindowIcon(QIcon(':/gallery/images/logo.png'))
self.setWindowTitle('KKAFIO')
self.setMicaEffectEnabled(cfg.get(cfg.micaEnabled))
# create splash screen
self.splashScreen = SplashScreen(self.windowIcon(), self)
self.splashScreen.setIconSize(QSize(160, 160))
self.splashScreen.raise_()
desktop = QApplication.screens()[0].availableGeometry()
w, h = desktop.width(), desktop.height()
self.move(w//2 - self.width()//2, h//2 - self.height()//2)
self.show()
QApplication.processEvents()
def onSupport(self):
language = cfg.get(cfg.language).value
if language.name() == "zh_CN":
QDesktopServices.openUrl(QUrl(ZH_SUPPORT_URL))
else:
QDesktopServices.openUrl(QUrl(EN_SUPPORT_URL))
def resizeEvent(self, e):
super().resizeEvent(e)
if hasattr(self, 'splashScreen'):
self.splashScreen.resize(self.size())
def switchToSetting(self, settingGroup):
""" switch to sample """
self.stackedWidget.setCurrentWidget(self.settingInterface, False)
self.settingInterface.scrollToGroup(settingGroup)