class PlotWidgetContainer(QWidget): def __init__(self, modelRoot, *args, **kwargs): super(PlotWidgetContainer, self).__init__(*args) self.modelRoot = modelRoot if len(moose.wildcardFind(modelRoot + "/##[ISA=ChemCompt]")) == 0: self.modelType = ELECTRICAL else: self.modelType = CHEMICAL self.model = moose.element(self.modelRoot) if self.modelRoot != "/": if moose.exists(modelRoot + "/data"): self.data = moose.element(self.modelRoot + "/data") else: self.data = moose.Neutral(self.modelRoot + "/data") else: self.data = moose.element("/data") self._layout = QVBoxLayout() self.graphs = QSplitter() self.graphs.setOrientation(PyQt4.QtCore.Qt.Vertical) self.graphsArea = QScrollArea() # self.graphsLayout = QGridLayout() # self.menubar = self.createMenuBar() self.rowIndex = 0 # self.setSizePolicy( QtGui.QSizePolicy.Expanding # , QtGui.QSizePolicy.Expanding # ) self.graphs.setSizePolicy( QtGui.QSizePolicy.Expanding , QtGui.QSizePolicy.Expanding ) self.setAcceptDrops(True) # self._layout.setSizeConstraint( QLayout.SetNoConstraint ) # self.graphs.setLayout(self.graphsLayout) self.graphsArea.setWidget(self.graphs) self.graphsArea.setWidgetResizable(True) self.graphWidgets = [] # self._layout.addWidget(self.menubar) self._layout.addWidget(self.graphsArea) self.setLayout(self._layout) for graph in self.data.children: self.addPlotWidget(graph = graph) if len(self.data.children) == 0: self.addPlotWidget() def deleteWidget(self, graphWidget): # print("Deleted => ", graphWidget) self.graphWidgets.remove(graphWidget) graphWidget.setParent(None) graphWidget.close() def createMenuBar(self): bar = sidebar.sidebar() bar.addAction(sidebar.add_graph_action(bar, lambda event: self.addPlotWidget() )) # bar.addAction(sidebar.delete_graph_action(bar, lambda event: self.addPlotWidget() )) # bar.addAction(sidebar.list_action(bar, self.showPlotView)) return bar def addPlotWidget(self, row = None, col = 0, graph = None): if graph == None: graph = moose.Neutral(self.data.path + "/graph_" + str(self.rowIndex)) widget = default.PlotWidget(self.model, graph, self.rowIndex, self) if self.modelType == ELECTRICAL: for axes in widget.canvas.axes.values(): # axes.autoscale(False, axis='x', tight=True) axes.set_ylim(bottom = -0.07, top= 0.03) if row == None: row = self.rowIndex self.graphs.addWidget(widget) self.rowIndex += 1 self.graphWidgets.append(widget) widget.widgetClosedSignal.connect(self.deleteWidget) widget.addGraph.connect(lambda event : self.addPlotWidget()) # widget.resize(1, 1); return widget def showPlotView(self): pass def setModelRoot(self, *args): pass def getMenus(self, *args): return [] def setDataRoot(self, *args): pass def updatePlots(self): for graphWidget in self.graphWidgets: graphWidget.updatePlots() def rescalePlots(self): for graphWidget in self.graphWidgets: graphWidget.rescalePlots() def extendXAxes(self, xlim): for graphWidget in self.graphWidgets: graphWidget.extendXAxes(xlim) def plotAllData(self): for graphWidget in self.graphWidgets: graphWidget.plotAllData()
class PlotWidgetContainer(QWidget): def __init__(self, modelRoot, *args, **kwargs): super(PlotWidgetContainer, self).__init__(*args) self.modelRoot = modelRoot if len(moose.wildcardFind(modelRoot + "/##[ISA=ChemCompt]")) == 0: self.modelType = ELECTRICAL else: self.modelType = CHEMICAL self.model = moose.element(self.modelRoot) if self.modelRoot != "/": if moose.exists(modelRoot + "/data"): self.data = moose.element(self.modelRoot + "/data") else: self.data = moose.Neutral(self.modelRoot + "/data") else: self.data = moose.element("/data") self._layout = QVBoxLayout() self.graphs = QSplitter() self.graphs.setOrientation(PyQt4.QtCore.Qt.Vertical) self.graphsArea = QScrollArea() # self.graphsLayout = QGridLayout() # self.menubar = self.createMenuBar() self.rowIndex = 0 # self.setSizePolicy( QtGui.QSizePolicy.Expanding # , QtGui.QSizePolicy.Expanding # ) self.graphs.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) self.setAcceptDrops(True) # self._layout.setSizeConstraint( QLayout.SetNoConstraint ) # self.graphs.setLayout(self.graphsLayout) self.graphsArea.setWidget(self.graphs) self.graphsArea.setWidgetResizable(True) self.graphWidgets = [] # self._layout.addWidget(self.menubar) self._layout.addWidget(self.graphsArea) self.setLayout(self._layout) for graph in self.data.children: self.addPlotWidget(graph=graph) if len(self.data.children) == 0: self.addPlotWidget() def deleteWidget(self, graphWidget): # print("Deleted => ", graphWidget) self.graphWidgets.remove(graphWidget) graphWidget.setParent(None) graphWidget.close() def createMenuBar(self): bar = sidebar.sidebar() bar.addAction( sidebar.add_graph_action(bar, lambda event: self.addPlotWidget())) # bar.addAction(sidebar.delete_graph_action(bar, lambda event: self.addPlotWidget() )) # bar.addAction(sidebar.list_action(bar, self.showPlotView)) return bar def addPlotWidget(self, row=None, col=0, graph=None): if graph == None: graph = moose.Neutral(self.data.path + "/graph_" + str(self.rowIndex)) widget = default.PlotWidget(self.model, graph, self.rowIndex, self) if self.modelType == ELECTRICAL: for axes in widget.canvas.axes.values(): # axes.autoscale(False, axis='x', tight=True) axes.set_ylim(bottom=-0.07, top=0.03) if row == None: row = self.rowIndex self.graphs.addWidget(widget) self.rowIndex += 1 self.graphWidgets.append(widget) widget.widgetClosedSignal.connect(self.deleteWidget) widget.addGraph.connect(lambda event: self.addPlotWidget()) # widget.resize(1, 1); return widget def showPlotView(self): pass def setModelRoot(self, *args): pass def getMenus(self, *args): return [] def setDataRoot(self, *args): pass def updatePlots(self): self.apply(lambda obj: obj.updatePlots()) def rescalePlots(self): self.apply(lambda obj: obj.rescalePlots()) def extendXAxes(self, xlim): self.apply(lambda obj: obj.extendXAxes(xlim)) def plotAllData(self): self.apply(lambda obj: obj.plotAllData()) def apply(self, f): for graphWidget in self.graphWidgets: f(graphWidget)
class PrioritizeDialog(QDialog): def __init__(self, parent, app): flags = Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowSystemMenuHint QDialog.__init__(self, parent, flags) self._setupUi() self.model = PrioritizeDialogModel(app=app.model) self.categoryList = ComboboxModel(model=self.model.category_list, view=self.categoryCombobox) self.criteriaList = ListviewModel(model=self.model.criteria_list, view=self.criteriaListView) self.prioritizationList = PrioritizationList(model=self.model.prioritization_list, view=self.prioritizationListView) self.model.view = self self.addCriteriaButton.clicked.connect(self.model.add_selected) self.removeCriteriaButton.clicked.connect(self.model.remove_selected) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) def _setupUi(self): self.setWindowTitle(tr("Re-Prioritize duplicates")) self.resize(700, 400) #widgets msg = tr("Add criteria to the right box and click OK to send the dupes that correspond the " "best to these criteria to their respective group's " "reference position. Read the help file for more information.") self.promptLabel = QLabel(msg) self.promptLabel.setWordWrap(True) self.categoryCombobox = QComboBox() self.criteriaListView = QListView() self.addCriteriaButton = QPushButton(self.style().standardIcon(QStyle.SP_ArrowRight), "") self.removeCriteriaButton = QPushButton(self.style().standardIcon(QStyle.SP_ArrowLeft), "") self.prioritizationListView = QListView() self.prioritizationListView.setAcceptDrops(True) self.prioritizationListView.setDragEnabled(True) self.prioritizationListView.setDragDropMode(QAbstractItemView.InternalMove) self.prioritizationListView.setSelectionBehavior(QAbstractItemView.SelectRows) self.buttonBox = QDialogButtonBox() self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok) # layout self.mainLayout = QVBoxLayout(self) self.mainLayout.addWidget(self.promptLabel) self.splitter = QSplitter() sp = self.splitter.sizePolicy() sp.setVerticalPolicy(QSizePolicy.Expanding) self.splitter.setSizePolicy(sp) self.leftSide = QWidget() self.leftWidgetsLayout = QVBoxLayout() self.leftWidgetsLayout.addWidget(self.categoryCombobox) self.leftWidgetsLayout.addWidget(self.criteriaListView) self.leftSide.setLayout(self.leftWidgetsLayout) self.splitter.addWidget(self.leftSide) self.rightSide = QWidget() self.rightWidgetsLayout = QHBoxLayout() self.addRemoveButtonsLayout = QVBoxLayout() self.addRemoveButtonsLayout.addItem(verticalSpacer()) self.addRemoveButtonsLayout.addWidget(self.addCriteriaButton) self.addRemoveButtonsLayout.addWidget(self.removeCriteriaButton) self.addRemoveButtonsLayout.addItem(verticalSpacer()) self.rightWidgetsLayout.addLayout(self.addRemoveButtonsLayout) self.rightWidgetsLayout.addWidget(self.prioritizationListView) self.rightSide.setLayout(self.rightWidgetsLayout) self.splitter.addWidget(self.rightSide) self.mainLayout.addWidget(self.splitter) self.mainLayout.addWidget(self.buttonBox)