some gui settings

pull/503/head
Holger Mueller 2022-05-23 19:29:40 +02:00
rodzic a3a0d9d4b0
commit a148200c74
3 zmienionych plików z 35 dodań i 27 usunięć

Wyświetl plik

@ -17,22 +17,26 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import base64
import dataclasses as DC
import logging
import json
from ssl import DefaultVerifyPaths
from tkinter.messagebox import NO
from PyQt5.QtCore import QSettings
logger = logging.getLogger(__name__)
# pylint: disable=too-few-public-methods
@DC.dataclass
class GUI:
window_height: int = 950
window_width: int = 1433
font_size: int = 8
dark_mode: bool = False
splitter_sizes: list = DC.field(default_factory=lambda: [])
splitter_sizes: bytearray = DC.field(default_factory=bytearray)
@DC.dataclass
class ChartMarker:
@ -55,13 +59,13 @@ def restore(settings: 'AppSettings') -> CFG:
value = settings.restore_dataclass(field.name.upper(),
getattr(result, field.name))
setattr(result, field.name, value)
logger.debug(f"restored {result}")
logger.debug("restored\n(\n%s\n)", result)
return result
def store(settings: 'AppSettings', data: CFG) -> None:
assert type(data) is CFG
logger.debug(f"storing {data}")
assert isinstance(data, CFG)
logger.debug("storing\n(\n%s\n)", data)
for field in DC.fields(data):
data_class = getattr(data, field.name)
assert DC.is_dataclass(data_class)
@ -75,10 +79,13 @@ class AppSettings(QSettings):
for field in DC.fields(data):
value = getattr(data, field.name)
if field.type not in (int, float, str):
value = json.dumps(value)
try:
value = json.dumps(value)
except TypeError:
value = field.type(value).hex()
self.setValue(field.name, value)
self.endGroup()
def restore_dataclass(self, name: str, data: object) -> object:
assert DC.is_dataclass(data)
@ -87,17 +94,19 @@ class AppSettings(QSettings):
for field in DC.fields(data):
value = None
if field.type in (int, float, str):
value = self.value(field.name,
value = self.value(field.name,
type=field.type,
defaultValue=field.default)
else:
value = field.type(json.loads(
self.value(field.name,
type=str,
defaultValue=json.dumps(
getattr(data, field.name)
))))
setattr(result, field.name, value)
default = getattr(data, field.name)
try:
value = json.loads(
self.value(field.name, type=str,
defaultValue=json.dumps(default)))
except TypeError:
value = self.value(field.name)
value = bytes.fromhex(value) if value is str else default
setattr(result, field.name, field.type(value))
self.endGroup()
return result

Wyświetl plik

@ -123,9 +123,8 @@ class NanoVNASaver(QtWidgets.QWidget):
outer.addWidget(scrollarea)
self.setLayout(outer)
scrollarea.setWidgetResizable(True)
window_width = self.settings.value("WindowWidth", 1350, type=int)
window_height = self.settings.value("WindowHeight", 950, type=int)
self.resize(window_width, window_height)
self.resize(Defaults.cfg.gui.window_width,
Defaults.cfg.gui.window_height)
scrollarea.setSizePolicy(
QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding)
self.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding,
@ -213,10 +212,7 @@ class NanoVNASaver(QtWidgets.QWidget):
self.splitter.addWidget(self.marker_frame)
self.splitter.addWidget(chart_widget)
try:
self.splitter.restoreState(self.settings.value("SplitterSizes"))
except TypeError:
pass
self.splitter.restoreState(Defaults.cfg.gui.splitter_sizes)
layout.addLayout(left_column)
layout.addWidget(self.splitter, 2)
@ -643,14 +639,15 @@ class NanoVNASaver(QtWidgets.QWidget):
self.settings.setValue("MarkerCount", Marker.count())
for marker in self.markers:
marker.update_settings()
self.settings.setValue("WindowHeight", self.height())
self.settings.setValue("WindowWidth", self.width())
self.settings.setValue("SplitterSizes", self.splitter.saveState())
self.settings.sync()
self.bands.saveSettings()
self.threadpool.waitForDone(2500)
Defaults.cfg.gui.window_width = self.width()
Defaults.cfg.gui.window_height = self.height()
Defaults.cfg.gui.splitter_sizes = self.splitter.saveState()
Defaults.store(self.settings, Defaults.cfg)
a0.accept()
sys.exit()

Wyświetl plik

@ -29,6 +29,7 @@ class TConfig:
my_str: str = "Hello World"
my_bool: bool = True
my_list: list = field(default_factory=lambda: [1, 2, 3])
my_bytearray: bytearray = field(default_factory=lambda: bytearray((1,2,3)))
class TestCases(unittest.TestCase):
@ -77,5 +78,6 @@ class TestCases(unittest.TestCase):
tc_1.gui.dark_mode = not tc_1.gui.dark_mode
CFG.store(self.settings_2, tc_1)
tc_2 = CFG.restore(self.settings_2)
print(f"\n{tc_1}\n{tc_2}\n")
self.assertEqual(tc_1, tc_2)
self.assertNotEqual(tc_2.gui, CFG.GUI())