summaryrefslogtreecommitdiff
path: root/silx/gui/data/DataViewerSelector.py
diff options
context:
space:
mode:
Diffstat (limited to 'silx/gui/data/DataViewerSelector.py')
-rw-r--r--silx/gui/data/DataViewerSelector.py40
1 files changed, 31 insertions, 9 deletions
diff --git a/silx/gui/data/DataViewerSelector.py b/silx/gui/data/DataViewerSelector.py
index 32cc636..35bbe99 100644
--- a/silx/gui/data/DataViewerSelector.py
+++ b/silx/gui/data/DataViewerSelector.py
@@ -29,12 +29,11 @@ from __future__ import division
__authors__ = ["V. Valls"]
__license__ = "MIT"
-__date__ = "26/01/2017"
+__date__ = "23/01/2018"
import weakref
import functools
from silx.gui import qt
-from silx.gui.data.DataViewer import DataViewer
import silx.utils.weakref
@@ -51,21 +50,36 @@ class DataViewerSelector(qt.QWidget):
self.__group = None
self.__buttons = {}
+ self.__buttonLayout = None
self.__buttonDummy = None
self.__dataViewer = None
+ # Create the fixed layout
+ self.setLayout(qt.QHBoxLayout())
+ layout = self.layout()
+ layout.setContentsMargins(0, 0, 0, 0)
+ self.__buttonLayout = qt.QHBoxLayout()
+ self.__buttonLayout.setContentsMargins(0, 0, 0, 0)
+ layout.addLayout(self.__buttonLayout)
+ layout.addStretch(1)
+
if dataViewer is not None:
self.setDataViewer(dataViewer)
def __updateButtons(self):
if self.__group is not None:
self.__group.deleteLater()
+
+ # Clean up
+ for _, b in self.__buttons.items():
+ b.deleteLater()
+ if self.__buttonDummy is not None:
+ self.__buttonDummy.deleteLater()
+ self.__buttonDummy = None
self.__buttons = {}
self.__buttonDummy = None
self.__group = qt.QButtonGroup(self)
- self.setLayout(qt.QHBoxLayout())
- self.layout().setContentsMargins(0, 0, 0, 0)
if self.__dataViewer is None:
return
@@ -83,19 +97,17 @@ class DataViewerSelector(qt.QWidget):
weakMethod = silx.utils.weakref.WeakMethodProxy(self.__setDisplayedView)
callback = functools.partial(weakMethod, weakView)
button.clicked.connect(callback)
- self.layout().addWidget(button)
+ self.__buttonLayout.addWidget(button)
self.__group.addButton(button)
self.__buttons[view] = button
button = qt.QPushButton("Dummy")
button.setCheckable(True)
button.setVisible(False)
- self.layout().addWidget(button)
+ self.__buttonLayout.addWidget(button)
self.__group.addButton(button)
self.__buttonDummy = button
- self.layout().addStretch(1)
-
self.__updateButtonsVisibility()
self.__displayedViewChanged(self.__dataViewer.displayedView())
@@ -125,7 +137,7 @@ class DataViewerSelector(qt.QWidget):
self.__buttonDummy.setFlat(isFlat)
def __displayedViewChanged(self, view):
- """Called on displayed view changeS"""
+ """Called on displayed view changes"""
selectedButton = self.__buttons.get(view, self.__buttonDummy)
selectedButton.setChecked(True)
@@ -142,12 +154,22 @@ class DataViewerSelector(qt.QWidget):
return
self.__dataViewer.setDisplayedView(view)
+ def __checkAvailableButtons(self):
+ views = set(self.__dataViewer.availableViews())
+ if views == set(self.__buttons.keys()):
+ return
+ # Recreate all the buttons
+ # TODO: We dont have to create everything again
+ # We expect the views stay quite stable
+ self.__updateButtons()
+
def __updateButtonsVisibility(self):
"""Called on data changed"""
if self.__dataViewer is None:
for b in self.__buttons.values():
b.setVisible(False)
else:
+ self.__checkAvailableButtons()
availableViews = set(self.__dataViewer.currentAvailableViews())
for view, button in self.__buttons.items():
button.setVisible(view in availableViews)