/ src / bitmessageqt / settingsmixin.py
settingsmixin.py
  1  #!/usr/bin/python2.7
  2  """
  3  src/settingsmixin.py
  4  ====================
  5  
  6  """
  7  
  8  from PyQt4 import QtCore, QtGui
  9  
 10  
 11  class SettingsMixin(object):
 12      """Mixin for adding geometry and state saving between restarts."""
 13      def warnIfNoObjectName(self):
 14          """
 15          Handle objects which don't have a name. Currently it ignores them. Objects without a name can't have their
 16          state/geometry saved as they don't have an identifier.
 17          """
 18          if self.objectName() == "":
 19              # .. todo:: logger
 20              pass
 21  
 22      def writeState(self, source):
 23          """Save object state (e.g. relative position of a splitter)"""
 24          self.warnIfNoObjectName()
 25          settings = QtCore.QSettings()
 26          settings.beginGroup(self.objectName())
 27          settings.setValue("state", source.saveState())
 28          settings.endGroup()
 29  
 30      def writeGeometry(self, source):
 31          """Save object geometry (e.g. window size and position)"""
 32          self.warnIfNoObjectName()
 33          settings = QtCore.QSettings()
 34          settings.beginGroup(self.objectName())
 35          settings.setValue("geometry", source.saveGeometry())
 36          settings.endGroup()
 37  
 38      def readGeometry(self, target):
 39          """Load object geometry"""
 40          self.warnIfNoObjectName()
 41          settings = QtCore.QSettings()
 42          try:
 43              geom = settings.value("/".join([str(self.objectName()), "geometry"]))
 44              target.restoreGeometry(geom.toByteArray() if hasattr(geom, 'toByteArray') else geom)
 45          except Exception:
 46              pass
 47  
 48      def readState(self, target):
 49          """Load object state"""
 50          self.warnIfNoObjectName()
 51          settings = QtCore.QSettings()
 52          try:
 53              state = settings.value("/".join([str(self.objectName()), "state"]))
 54              target.restoreState(state.toByteArray() if hasattr(state, 'toByteArray') else state)
 55          except Exception:
 56              pass
 57  
 58  
 59  class SMainWindow(QtGui.QMainWindow, SettingsMixin):
 60      """Main window with Settings functionality."""
 61      def loadSettings(self):
 62          """Load main window settings."""
 63          self.readGeometry(self)
 64          self.readState(self)
 65  
 66      def saveSettings(self):
 67          """Save main window settings"""
 68          self.writeState(self)
 69          self.writeGeometry(self)
 70  
 71  
 72  class STableWidget(QtGui.QTableWidget, SettingsMixin):
 73      """Table widget with Settings functionality"""
 74      # pylint: disable=too-many-ancestors
 75      def loadSettings(self):
 76          """Load table settings."""
 77          self.readState(self.horizontalHeader())
 78  
 79      def saveSettings(self):
 80          """Save table settings."""
 81          self.writeState(self.horizontalHeader())
 82  
 83  
 84  class SSplitter(QtGui.QSplitter, SettingsMixin):
 85      """Splitter with Settings functionality."""
 86      def loadSettings(self):
 87          """Load splitter settings"""
 88          self.readState(self)
 89  
 90      def saveSettings(self):
 91          """Save splitter settings."""
 92          self.writeState(self)
 93  
 94  
 95  class STreeWidget(QtGui.QTreeWidget, SettingsMixin):
 96      """Tree widget with settings functionality."""
 97      # pylint: disable=too-many-ancestors
 98      def loadSettings(self):
 99          """Load tree settings."""
100          # recurse children
101          # self.readState(self)
102          pass
103  
104      def saveSettings(self):
105          """Save tree settings"""
106          # recurse children
107          # self.writeState(self)
108          pass