Files
LorenEteval_Furious/Furious/Widget/Widget.py
T
2023-07-24 19:49:17 +08:00

141 lines
3.6 KiB
Python

from Furious.Gui.Action import Action, Seperator
from Furious.Utility.Utility import (
StateContext,
SupportConnectedCallback,
bootstrapIcon,
moveToCenter,
)
from Furious.Utility.Translator import Translatable, gettext as _
from PySide6 import QtCore
from PySide6.QtWidgets import (
QMenu,
QMessageBox,
QPlainTextEdit,
QPushButton,
QTabWidget,
QTextBrowser,
)
class Menu(Translatable, QMenu):
def __init__(self, *actions, **kwargs):
super().__init__(**kwargs)
for action in actions:
if isinstance(action, Seperator):
self.addSeparator()
else:
assert isinstance(action, Action)
self.addAction(action)
self.setStyleSheet(
f'QMenu::item {{'
f' background-color: solid;'
f'}}'
f''
f'QMenu::item:selected {{'
f' background-color: #43ACED;'
f'}}'
)
def retranslate(self):
with StateContext(self):
self.setTitle(_(self.title()))
class MessageBox(Translatable, SupportConnectedCallback, QMessageBox):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowIcon(bootstrapIcon('rocket-takeoff-window.svg'))
def moveToCenter(self):
moveToCenter(self, self.parentWidget())
return self
def connectedCallback(self):
self.setWindowIcon(bootstrapIcon('rocket-takeoff-connected-dark.svg'))
def disconnectedCallback(self):
self.setWindowIcon(bootstrapIcon('rocket-takeoff-window.svg'))
def retranslate(self):
with StateContext(self):
self.setWindowTitle(_(self.windowTitle()))
self.setText(_(self.text()))
try:
self.setInformativeText(_(self.informativeText()))
except KeyError:
# Any translatable informative text
pass
for button in self.buttons():
button.setText(_(button.text()))
self.moveToCenter()
def exec(self):
self.show()
self.moveToCenter()
return super().exec()
def open(self):
self.show()
self.moveToCenter()
return super().open()
class PushButton(Translatable, QPushButton):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def retranslate(self):
self.setText(_(self.text()))
class TabWidget(Translatable, QTabWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def retranslate(self):
for i in range(self.tabBar().count()):
self.tabBar().setTabText(i, _(self.tabBar().tabText(i)))
class ZoomablePlainTextEdit(QPlainTextEdit):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def wheelEvent(self, event):
if event.modifiers() == QtCore.Qt.KeyboardModifier.ControlModifier:
delta = event.angleDelta().y()
if delta > 0:
self.zoomIn()
if delta < 0:
self.zoomOut()
else:
super().wheelEvent(event)
class ZoomableTextBrowser(QTextBrowser):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def wheelEvent(self, event):
if event.modifiers() == QtCore.Qt.KeyboardModifier.ControlModifier:
delta = event.angleDelta().y()
if delta > 0:
self.zoomIn()
if delta < 0:
self.zoomOut()
else:
super().wheelEvent(event)