eric7/E5Gui/E5SideBar.py

branch
eric7
changeset 8322
b422b4e77d19
parent 8319
ea11a3948f40
--- a/eric7/E5Gui/E5SideBar.py	Mon May 17 19:58:15 2021 +0200
+++ b/eric7/E5Gui/E5SideBar.py	Tue May 18 18:19:47 2021 +0200
@@ -8,10 +8,9 @@
 """
 
 import enum
+import json
 
-from PyQt6.QtCore import (
-    QEvent, QSize, Qt, QByteArray, QDataStream, QIODevice, QTimer
-)
+from PyQt6.QtCore import QEvent, QSize, Qt, QTimer
 from PyQt6.QtWidgets import (
     QTabBar, QWidget, QStackedWidget, QBoxLayout, QToolButton, QSizePolicy
 )
@@ -580,19 +579,16 @@
                 self.__minSize = self.minimumSizeHint().width()
                 self.__maxSize = self.maximumWidth()
         
-        data = QByteArray()
-        stream = QDataStream(data, QIODevice.OpenModeFlag.WriteOnly)
-        stream.setVersion(QDataStream.Version.Qt_6_1)
-        
-        stream.writeUInt16(self.Version)
-        stream.writeBool(self.__minimized)
-        stream << self.__bigSize
-        stream.writeUInt32(self.__minSize)
-        stream.writeUInt32(self.__maxSize)
-        stream.writeUInt32(len(self.splitterSizes))
-        for size in self.splitterSizes:
-            stream.writeUInt32(size)
-        stream.writeBool(self.__autoHide)
+        dataDict = {
+            "version": self.Version,
+            "minimized": self.__minimized,
+            "big_size": [self.__bigSize.width(), self.__bigSize.height()],
+            "min_size": self.__minSize,
+            "max_size": self.__maxSize,
+            "splitter_sizes": self.splitterSizes,
+            "auto_hide": self.__autoHide
+        }
+        data = json.dumps(dataDict)
         
         return data
     
@@ -603,7 +599,15 @@
         @param state byte array containing the saved state (QByteArray)
         @return flag indicating success (boolean)
         """
-        if state.isEmpty():
+        if not isinstance(state, str) or state == "":
+            return False
+        
+        try:
+            stateDict = json.loads(state)
+        except json.JSONDecodeError:
+            return False
+        
+        if not stateDict:
             return False
         
         if self.__orientation in (E5SideBarSide.NORTH, E5SideBarSide.SOUTH):
@@ -613,44 +617,24 @@
             minSize = self.layout.minimumSize().width()
             maxSize = self.maximumWidth()
         
-        data = QByteArray(state)
-        stream = QDataStream(data, QIODevice.OpenModeFlag.ReadOnly)
-        stream.setVersion(QDataStream.Version.Qt_6_1)
-        version = stream.readUInt16()  # version
-        minimized = stream.readBool()
-        
-        if minimized and not self.__minimized:
-            self.shrink()
+        if stateDict["version"] == 2:
+            if stateDict["minimized"] and not self.__minimized:
+                self.shrink()
+            
+            self.__bigSize = QSize(*stateDict["big_size"])
+            self.__minSize = max(stateDict["min_size"], minSize)
+            self.__maxSize = max(stateDict["max_size"], maxSize)
+            self.splitterSizes = stateDict["splitter_sizes"]
+            
+            self.__autoHide = stateDict["auto_hide"]
+            self.__autoHideButton.setChecked(not self.__autoHide)
+            
+            if not stateDict["minimized"]:
+                self.expand()
+            
+            return True
         
-        stream >> self.__bigSize
-        if version == 1:
-            self.__minSize = max(stream.readUInt16(), minSize)
-            self.__maxSize = max(stream.readUInt16(), maxSize)
-            count = stream.readUInt16()
-            self.splitterSizes = []
-            for _ in range(count):
-                self.splitterSizes.append(stream.readUInt16())
-        elif version == 2:
-            self.__minSize = max(stream.readUInt32(), minSize)
-            self.__maxSize = max(stream.readUInt32(), maxSize)
-            count = stream.readUInt32()
-            self.splitterSizes = []
-            for _ in range(count):
-                self.splitterSizes.append(stream.readUInt32())
-        else:
-            # TODO: determine why version is always 0
-            # set some defaults for unknown versions
-            self.__minSize = minSize
-            self.__maxSize = maxSize
-            self.splitterSizes = []
-        
-        self.__autoHide = stream.readBool()
-        self.__autoHideButton.setChecked(not self.__autoHide)
-        
-        if not minimized:
-            self.expand()
-        
-        return True
+        return False
     
     #######################################################################
     ## methods below implement the autohide functionality

eric ide

mercurial