From 8cf6376867a3707dad86776a99cf3e665a86aa4e Mon Sep 17 00:00:00 2001 From: Loren Eteval Date: Thu, 27 Nov 2025 22:35:51 +0800 Subject: [PATCH] Add functools.lru_cache(None) decorator at groupBoxSequence call Signed-off-by: Loren Eteval --- Furious/Qt/GuiEditorXXX.py | 52 +++++++++++++++++--------------- Furious/Widget/GuiHysteria1.py | 2 ++ Furious/Widget/GuiHysteria2.py | 2 ++ Furious/Widget/GuiShadowsocks.py | 1 + Furious/Widget/GuiTrojan.py | 1 + Furious/Widget/GuiVLESS.py | 1 + Furious/Widget/GuiVMess.py | 1 + 7 files changed, 35 insertions(+), 25 deletions(-) diff --git a/Furious/Qt/GuiEditorXXX.py b/Furious/Qt/GuiEditorXXX.py index e000cab..38cc218 100644 --- a/Furious/Qt/GuiEditorXXX.py +++ b/Furious/Qt/GuiEditorXXX.py @@ -27,6 +27,8 @@ from PySide6.QtWidgets import * from typing import Callable, Sequence +import functools + __all__ = [ 'GuiEditorItemTextInput', 'GuiEditorItemTextSpinBox', @@ -237,7 +239,7 @@ class GuiEditorWidget(GuiEditorItemFactory): def containerSequence(self) -> Sequence[GuiEditorItemWidgetContainer]: raise NotImplementedError - def inputToFactory(self, config: ConfigFactory) -> bool: + def inputToFactory(self, config: dict) -> bool: modified = False for container in self._containers: @@ -250,7 +252,7 @@ class GuiEditorWidget(GuiEditorItemFactory): return modified - def factoryToInput(self, config: ConfigFactory): + def factoryToInput(self, config: dict): for container in self._containers: try: container.factoryToInput(config) @@ -278,17 +280,15 @@ class GuiEditorWidgetQGroupBox(GuiEditorWidget, AppQGroupBox): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - formLayout = QFormLayout() - formLayout.setFormAlignment(QtCore.Qt.AlignmentFlag.AlignLeft) - formLayout.setFieldGrowthPolicy( - QFormLayout.FieldGrowthPolicy.ExpandingFieldsGrow - ) + layout = QFormLayout() + layout.setFormAlignment(QtCore.Qt.AlignmentFlag.AlignLeft) + layout.setFieldGrowthPolicy(QFormLayout.FieldGrowthPolicy.ExpandingFieldsGrow) for container in self._containers: - formLayout.addRow(*container.widgets()) + layout.addRow(*container.widgets()) page = QWidget() - page.setLayout(formLayout) + page.setLayout(layout) # Align self._widget = QStackedWidget() @@ -299,18 +299,12 @@ class GuiEditorWidgetQGroupBox(GuiEditorWidget, AppQGroupBox): self.setLayout(vboxLayout) - # layout = QFormLayout() - # - # for container in self._containers: - # layout.addRow(*container.widgets()) - # - # self.setLayout(layout) - class GuiEditorWidgetQDialog(GuiEditorItemFactory, AppQDialog): def __init__(self, *args, **kwargs): tabText = kwargs.pop('tabText', '') tabTranslatable = kwargs.pop('tabTranslatable', False) + style = kwargs.pop('style', 'grid') super().__init__(*args, **kwargs) @@ -322,11 +316,7 @@ class GuiEditorWidgetQDialog(GuiEditorItemFactory, AppQDialog): self.tabCentralWidget = QWidget() self.tabCentralWidgetLayout = QGridLayout(self.tabCentralWidget) - self.groupBoxes = self.groupBoxSequence() - - for index, groupBox in enumerate(self.groupBoxes): - # TODO: Layout - self.tabCentralWidgetLayout.addWidget(groupBox, index // 2, index % 2) + self.setGroupBoxStyle(style) self.tabCentralWidget.setLayout(self.tabCentralWidgetLayout) @@ -348,9 +338,21 @@ class GuiEditorWidgetQDialog(GuiEditorItemFactory, AppQDialog): self.setLayout(layout) + @functools.lru_cache(None) def groupBoxSequence(self) -> Sequence[GuiEditorWidgetQGroupBox]: raise NotImplementedError + def setGroupBoxStyle(self, style: str): + if style == 'grid': + for index, groupBox in enumerate(self.groupBoxSequence()): + self.tabCentralWidgetLayout.addWidget(groupBox, index // 2, index % 2) + elif style == 'landscape': + for index, groupBox in enumerate(self.groupBoxSequence()): + self.tabCentralWidgetLayout.addWidget(groupBox, 0, index) + elif style == 'portrait': + for index, groupBox in enumerate(self.groupBoxSequence()): + self.tabCentralWidgetLayout.addWidget(groupBox, index, 0) + def setTabText(self, text: str): self.tabWidget.setTabText(0, text) @@ -358,14 +360,14 @@ class GuiEditorWidgetQDialog(GuiEditorItemFactory, AppQDialog): self.accepted.disconnect() self.rejected.disconnect() - def inputToFactory(self, config: ConfigFactory) -> bool: + def inputToFactory(self, config: dict) -> bool: modified = False - for groupBox in self.groupBoxes: + for groupBox in self.groupBoxSequence(): modified |= groupBox.inputToFactory(config) return modified - def factoryToInput(self, config: ConfigFactory): - for groupBox in self.groupBoxes: + def factoryToInput(self, config: dict): + for groupBox in self.groupBoxSequence(): groupBox.factoryToInput(config) diff --git a/Furious/Widget/GuiHysteria1.py b/Furious/Widget/GuiHysteria1.py index 5e53f98..9b85f8b 100644 --- a/Furious/Widget/GuiHysteria1.py +++ b/Furious/Widget/GuiHysteria1.py @@ -27,6 +27,7 @@ from PySide6.QtGui import * from PySide6.QtWidgets import * import logging +import functools __all__ = ['GuiHysteria1'] @@ -316,6 +317,7 @@ class GuiHysteria1(GuiEditorWidgetQDialog): self.setTabText(Protocol.Hysteria1.value) + @functools.lru_cache(None) def groupBoxSequence(self): return [ GuiHy1GroupBoxBasic(), diff --git a/Furious/Widget/GuiHysteria2.py b/Furious/Widget/GuiHysteria2.py index 926e5db..1efbcc7 100644 --- a/Furious/Widget/GuiHysteria2.py +++ b/Furious/Widget/GuiHysteria2.py @@ -27,6 +27,7 @@ from PySide6.QtGui import * from PySide6.QtWidgets import * import logging +import functools __all__ = ['GuiHysteria2'] @@ -456,6 +457,7 @@ class GuiHysteria2(GuiEditorWidgetQDialog): self.setTabText(Protocol.Hysteria2.value) + @functools.lru_cache(None) def groupBoxSequence(self): return [ GuiHy2GroupBoxBasic(), diff --git a/Furious/Widget/GuiShadowsocks.py b/Furious/Widget/GuiShadowsocks.py index 1b749d5..a3dd919 100644 --- a/Furious/Widget/GuiShadowsocks.py +++ b/Furious/Widget/GuiShadowsocks.py @@ -194,6 +194,7 @@ class GuiShadowsocks(GuiEditorWidgetQDialog): self.setTabText(Protocol.Shadowsocks.value) + @functools.lru_cache(None) def groupBoxSequence(self): return [ GuiSSGroupBoxBasic(), diff --git a/Furious/Widget/GuiTrojan.py b/Furious/Widget/GuiTrojan.py index 05ca7b4..697e2fe 100644 --- a/Furious/Widget/GuiTrojan.py +++ b/Furious/Widget/GuiTrojan.py @@ -143,6 +143,7 @@ class GuiTrojan(GuiEditorWidgetQDialog): self.setTabText(Protocol.Trojan.value) + @functools.lru_cache(None) def groupBoxSequence(self): return [ GuiTrojanGroupBoxBasic(), diff --git a/Furious/Widget/GuiVLESS.py b/Furious/Widget/GuiVLESS.py index 7002dfe..e80907d 100644 --- a/Furious/Widget/GuiVLESS.py +++ b/Furious/Widget/GuiVLESS.py @@ -263,6 +263,7 @@ class GuiVLESS(GuiEditorWidgetQDialog): self.setTabText(Protocol.VLESS.value) + @functools.lru_cache(None) def groupBoxSequence(self): return [ GuiVLESSGroupBoxBasic(), diff --git a/Furious/Widget/GuiVMess.py b/Furious/Widget/GuiVMess.py index 605195d..e894e2e 100644 --- a/Furious/Widget/GuiVMess.py +++ b/Furious/Widget/GuiVMess.py @@ -264,6 +264,7 @@ class GuiVMess(GuiEditorWidgetQDialog): self.setTabText(Protocol.VMess.value) + @functools.lru_cache(None) def groupBoxSequence(self): return [ GuiVMessGroupBoxBasic(),