diff options
Diffstat (limited to 'silx/gui/data/DataViewerSelector.py')
-rw-r--r-- | silx/gui/data/DataViewerSelector.py | 40 |
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) |