Skip to content
Snippets Groups Projects
Commit 01a53e20 authored by Ewan Cook's avatar Ewan Cook Committed by Ewan Cook
Browse files

refs #23097 initial commit - add checkboxes/events

parent 0c7215ea
No related branches found
No related tags found
No related merge requests found
...@@ -11,6 +11,10 @@ from Muon.GUI.Common import message_box ...@@ -11,6 +11,10 @@ from Muon.GUI.Common import message_box
from Muon.GUI.ElementalAnalysis.LoadWidget.load_model import LoadModel, CoLoadModel from Muon.GUI.ElementalAnalysis.LoadWidget.load_model import LoadModel, CoLoadModel
from Muon.GUI.Common.load_widget.load_view import LoadView from Muon.GUI.Common.load_widget.load_view import LoadView
from Muon.GUI.Common.load_widget.load_presenter import LoadPresenter from Muon.GUI.Common.load_widget.load_presenter import LoadPresenter
from Muon.GUI.ElementalAnalysis.LoadWidget.load_presenter import LoadPresenter
from Muon.GUI.ElementalAnalysis.Checkbox.checkbox_model import CheckboxModel
from Muon.GUI.ElementalAnalysis.Checkbox.checkbox_view import CheckboxView
from Muon.GUI.ElementalAnalysis.Checkbox.checkbox_presenter import CheckboxPresenter
class ElementalAnalysisGui(QtGui.QMainWindow): class ElementalAnalysisGui(QtGui.QMainWindow):
...@@ -31,10 +35,32 @@ class ElementalAnalysisGui(QtGui.QMainWindow): ...@@ -31,10 +35,32 @@ class ElementalAnalysisGui(QtGui.QMainWindow):
self.load_widget = LoadPresenter( self.load_widget = LoadPresenter(
LoadView(), LoadModel(), CoLoadModel()) LoadView(), LoadModel(), CoLoadModel())
self.widget_list = QtGui.QVBoxLayout()
self.peak_types = ["Major", "Minor", "Gamma", "Electron"]
self._checkbox_view = CheckboxView(
["{} Peaks".format(x) for x in self.peak_types])
self.checkbox = CheckboxPresenter(self._checkbox_view, CheckboxModel())
for _, v in self.checkbox.view.checkbox_dict.iteritems():
self.checkbox.view.on_checkbox_changed(v, self.checkbox_changed)
# test unreg (works now!)
self.checkbox.view.unreg_on_checkbox_changed(
v, self.checkbox_changed)
self.checkbox.view.on_checkbox_changed(v, self.checkbox_changed)
self.widget_list.addWidget(self.checkbox.view)
self.detectors = ["GE{}".format(x) for x in range(1, 5)]
self.detector_view = CheckboxView(self.detectors, "Detectors:")
self.detectors_widget = CheckboxPresenter(
self.detector_view, CheckboxModel())
self.widget_list.addWidget(self.detectors_widget.view)
self.widget_list.addWidget(self.load_widget.view)
self.box = QtGui.QHBoxLayout() self.box = QtGui.QHBoxLayout()
self.box.addWidget(self.ptable.view) self.box.addWidget(self.ptable.view)
self.box.addWidget(self.load_widget.view) self.box.addLayout(self.widget_list)
self.setCentralWidget(QtGui.QWidget(self)) self.setCentralWidget(QtGui.QWidget(self))
self.centralWidget().setLayout(self.box) self.centralWidget().setLayout(self.box)
self.setWindowTitle("Elemental Analysis") self.setWindowTitle("Elemental Analysis")
...@@ -54,6 +80,9 @@ class ElementalAnalysisGui(QtGui.QMainWindow): ...@@ -54,6 +80,9 @@ class ElementalAnalysisGui(QtGui.QMainWindow):
if filename: if filename:
self.ptable.set_peak_datafile(filename) self.ptable.set_peak_datafile(filename)
def checkbox_changed(self, checkbox, state):
print("checkbox changed: {} {}".format(checkbox, state))
def qapp(): def qapp():
if QtGui.QApplication.instance(): if QtGui.QApplication.instance():
......
class CheckboxModel(object):
def __init__(self):
pass
class CheckboxPresenter(object):
def __init__(self, view, model):
self.view = view
self.model = model
from PyQt4 import QtGui
from functools import partial
class Checkbox(QtGui.QCheckBox):
def __init__(self, name):
super(QtGui.QCheckBox, self).__init__(name)
self.partials = {}
class CheckboxView(QtGui.QWidget):
def __init__(self, names, title=None, parent=None):
super(CheckboxView, self).__init__(parent)
self.checkbox_dict = {}
self.list = QtGui.QVBoxLayout()
if title is not None:
t = QtGui.QLabel(title)
self.list.addWidget(t)
for name in names:
checkbox = Checkbox(name)
self.list.addWidget(checkbox)
self.checkbox_dict[name] = checkbox
self.setLayout(self.list)
def on_checkbox_changed(self, checkbox, slot):
p = partial(slot, checkbox)
# this does, however, mean that a slot can only be connected once (without data loss)
# this shouldn't be an issue because, e.g. the user can create a
# function that handles both
checkbox.partials[slot] = p
checkbox.stateChanged.connect(p)
def unreg_on_checkbox_changed(self, checkbox, slot):
try:
checkbox.stateChanged.disconnect(checkbox.partials[slot])
except KeyError:
return
del checkbox.partials[slot]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment