From 0e54c3b30af19adb4e35d60e12abff88fc26baa9 Mon Sep 17 00:00:00 2001 From: "Benjamin Jakimow benjamin.jakimow@geo.hu-berlin.de" <benjamin.jakimow@geo.hu-berlin.de> Date: Wed, 22 Jan 2020 10:32:53 +0100 Subject: [PATCH] addresses #103: fixed serialization of QgsTextFormat in EOTSV settings Signed-off-by: Benjamin Jakimow benjamin.jakimow@geo.hu-berlin.de <benjamin.jakimow@geo.hu-berlin.de> --- eotimeseriesviewer/settings.py | 23 ++++++++++++++----- tests/test_settings.py | 41 ++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 6 deletions(-) diff --git a/eotimeseriesviewer/settings.py b/eotimeseriesviewer/settings.py index 15a652c8..7de69363 100644 --- a/eotimeseriesviewer/settings.py +++ b/eotimeseriesviewer/settings.py @@ -1,5 +1,5 @@ -import os, enum, pathlib, re, json +import os, enum, pathlib, re, json, pickle from collections import namedtuple from qgis.core import * from qgis.gui import * @@ -102,8 +102,14 @@ def value(key:Keys, default=None): if value == QVariant(): value = None - if value and key == Keys.MapTextFormat: - s = "" + if key == Keys.MapTextFormat: + if isinstance(value, QByteArray): + doc = QDomDocument() + doc.setContent(value) + value = QgsTextFormat() + value.readXml(doc.documentElement(), QgsReadWriteContext()) + + if key == Keys.SensorSpecs: # check sensor specs @@ -130,6 +136,8 @@ def value(key:Keys, default=None): value = None settings().setValue(key.value, None) print(error, file=sys.stderr) + except Exception as otherError: + s = "" return value @@ -176,9 +184,13 @@ def setValue(key:Keys, value): """ assert isinstance(key, Keys) assert isinstance(key.value, str) - if isinstance(value, QgsTextFormat): - value = value.toMimeData() + if isinstance(value, QgsTextFormat): + # make QgsTextFormat pickable + doc = QDomDocument() + doc.appendChild(value.writeXml(doc, QgsReadWriteContext())) + value = doc.toByteArray() + if key == Keys.SensorSpecs: s = "" #if isinstance(value, dict) and key == Keys.SensorSpecs: @@ -206,7 +218,6 @@ def values()->dict: :rtype: dict """ d = dict() - s = settings() for key in Keys: assert isinstance(key, Keys) d[key] = value(key) diff --git a/tests/test_settings.py b/tests/test_settings.py index 0d6fc143..e7dfc95b 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -113,6 +113,47 @@ class testclassSettingsTest(unittest.TestCase): if SHOW_GUI: QGIS_APP.exec_() + def test_MapTextFormat(self): + + from qgis.core import QgsTextFormat + from qgis.PyQt.Qt import QSettings + from qgis.PyQt.QtXml import QDomDocument + key = Keys.MapTextFormat + + format1 = defaultValues()[key] + self.assertIsInstance(format1, QgsTextFormat) + color1 = QColor('yellow') + format1.setColor(color1) + + doc = QDomDocument() + doc.appendChild(format1.writeXml(doc, QgsReadWriteContext())) + docBA = doc.toByteArray() + docStr = doc.toString() + + doc2 = QDomDocument() + doc2.setContent(docBA) + format2 = QgsTextFormat() + format2.readXml(doc2.documentElement(), QgsReadWriteContext()) + color2 = format2.color() + self.assertEqual(color1, color2) + + QS = QSettings('TEST') + QS.setValue(key.value, doc.toByteArray()) + + docBA3 = QS.value(key.value) + self.assertIsInstance(docBA3, QByteArray) + doc3 = QDomDocument() + doc3.setContent(docBA3) + format3 = QgsTextFormat() + format3.readXml(doc3.documentElement(), QgsReadWriteContext()) + self.assertEqual(color1, format3.color()) + + setValue(key, format1) + self.assertEqual(format1.color(), value(key).color()) + + s = "" + + def test_saveAndRestoreSensorNames(self): from example.Images import Img_2014_01_15_LC82270652014015LGN00_BOA -- GitLab