def __init__(self): QWidget.__init__(self) self.__scalers = {} self.__layout = QVBoxLayout() self.__time_map = ReportStepsModel().getList() self.__time_index_map = {} for index in range(len(self.__time_map)): time = self.__time_map[index] self.__time_index_map[time] = index self.addScaler(PlotMetricsWidget.VALUE_MIN, self.__createDoubleSpinner()) self.addScaler(PlotMetricsWidget.VALUE_MAX, self.__createDoubleSpinner()) self.addScaler(PlotMetricsWidget.TIME_MIN, self.__createTimeSpinner(True)) self.addScaler(PlotMetricsWidget.TIME_MAX, self.__createTimeSpinner(False)) self.addScaler(PlotMetricsWidget.DEPTH_MIN, self.__createDoubleSpinner()) self.addScaler(PlotMetricsWidget.DEPTH_MAX, self.__createDoubleSpinner()) self.__layout.addSpacing(10) self.__report_step_widget = ReportStepWidget() self.__report_step_widget.reportStepTimeSelected.connect(self.reportStepTimeChanged) self.__layout.addWidget(self.__report_step_widget) self.__layout.addStretch() self.setLayout(self.__layout)
def __init__(self): QToolBar.__init__(self, "PlotTools") self.setObjectName("PlotToolBar") self.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) self.__x_min, self.__x_min_action = self.addScaler("x_min", "X Minimum", spinner_type=CTime, select_min_time_value=True) self.__x_max, self.__x_max_action = self.addScaler("x_max", "X Maximum", spinner_type=CTime) self.__y_min, self.__y_min_action = self.addScaler("y_min", "Y Minimum", spinner_type=float, select_min_time_value=True) self.__y_max, self.__y_max_action = self.addScaler("y_max", "Y Maximum", spinner_type=float) self.__report_step_widget = ReportStepWidget() self.__report_step_widget.reportStepTimeSelected.connect(self.reportStepChanged) self.__report_step_widget.setFontSize(PlotToolBar.FONT_SIZE) self.__report_step_widget_action = self.addWidget(self.__report_step_widget) self.addSeparator() export_action = self.addAction("Export") export_action.setText("Export Plot") export_action.setIcon(util.resourceIcon("ide/table_export")) w = self.widgetForAction(export_action) font = w.font() font.setPointSize(PlotToolBar.FONT_SIZE) w.setFont(font) export_action.triggered.connect(self.exportClicked)
def __init__(self): QToolBar.__init__(self, "PlotTools") self.setObjectName("PlotToolBar") self.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) self.__reset_scales = self.createAction( "Reset Scales", util.resourceIcon("ide/transform_scale")) self.__reset_scales.triggered.connect(self.resetScalesClicked) self.__x_min, self.__x_min_action = self.addScaler( "x_min", "X Minimum", spinner_type=CTime, select_min_time_value=True) self.__x_max, self.__x_max_action = self.addScaler("x_max", "X Maximum", spinner_type=CTime) self.__y_min, self.__y_min_action = self.addScaler( "y_min", "Y Minimum", spinner_type=float, select_min_time_value=True) self.__y_max, self.__y_max_action = self.addScaler("y_max", "Y Maximum", spinner_type=float) self.__report_step_widget = ReportStepWidget() self.__report_step_widget.reportStepTimeSelected.connect( self.reportStepChanged) self.__report_step_widget.setFontSize(PlotToolBar.FONT_SIZE) self.__report_step_widget_action = self.addWidget( self.__report_step_widget) self.addSeparator() export_action = self.createAction( "Export Plot", util.resourceIcon("ide/table_export")) export_action.triggered.connect(self.exportClicked)
def __init__(self): QWidget.__init__(self) self.__layout = QVBoxLayout() self.__data_type_key = None self.__trackers = {} self.__spinners = {} self.__layout.addWidget(self.addScaler("value_min", self.VALUE_MIN)) self.__layout.addWidget(self.addScaler("value_max", self.VALUE_MAX)) self.__layout.addWidget(self.addScaler("time_min", self.TIME_MIN, True,True)) self.__layout.addWidget(self.addScaler("time_max", self.TIME_MAX, True)) self.__layout.addWidget(self.addScaler("depth_min", self.DEPTH_MIN)) self.__layout.addWidget(self.addScaler("depth_max", self.DEPTH_MAX)) self.__layout.addSpacing(10) self.__report_step_widget = ReportStepWidget() self.__report_step_widget.reportStepTimeSelected.connect(self.plotSettingsChanged) self.__layout.addWidget(self.__report_step_widget) self.__layout.addStretch() self.setLayout(self.__layout)
class PlotToolBar(QToolBar): FONT_SIZE = 11 exportClicked = pyqtSignal() reportStepChanged = pyqtSignal() plotScalesChanged = pyqtSignal() def __init__(self): QToolBar.__init__(self, "PlotTools") self.setObjectName("PlotToolBar") self.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) self.__x_min, self.__x_min_action = self.addScaler("x_min", "X Minimum", spinner_type=CTime, select_min_time_value=True) self.__x_max, self.__x_max_action = self.addScaler("x_max", "X Maximum", spinner_type=CTime) self.__y_min, self.__y_min_action = self.addScaler("y_min", "Y Minimum", spinner_type=float, select_min_time_value=True) self.__y_max, self.__y_max_action = self.addScaler("y_max", "Y Maximum", spinner_type=float) self.__report_step_widget = ReportStepWidget() self.__report_step_widget.reportStepTimeSelected.connect(self.reportStepChanged) self.__report_step_widget.setFontSize(PlotToolBar.FONT_SIZE) self.__report_step_widget_action = self.addWidget(self.__report_step_widget) self.addSeparator() export_action = self.addAction("Export") export_action.setText("Export Plot") export_action.setIcon(util.resourceIcon("ide/table_export")) w = self.widgetForAction(export_action) font = w.font() font.setPointSize(PlotToolBar.FONT_SIZE) w.setFont(font) export_action.triggered.connect(self.exportClicked) def addScaler(self, type_key, title, spinner_type, select_min_time_value=False): scaler = PlotScalesWidget(type_key, title, select_min_time_value=select_min_time_value) scaler.setFontSize(PlotToolBar.FONT_SIZE) scaler.plotScaleChanged.connect(self.plotScalesChanged) scaler.setType(spinner_type) action = self.addWidget(scaler) return scaler, action def setToolBarOptions(self, x_type, y_type, report_step_capable): self.blockSignals(True) self.__x_min_action.setVisible(x_type is not None) self.__x_max_action.setVisible(x_type is not None) self.__y_min_action.setVisible(y_type is not None) self.__y_max_action.setVisible(y_type is not None) if x_type is not None: self.__x_min.setType(x_type) self.__x_max.setType(x_type) if y_type is not None: self.__y_min.setType(y_type) self.__y_max.setType(y_type) self.__report_step_widget_action.setVisible(report_step_capable) self.blockSignals(False) def getXScales(self): x_min = None if not self.__x_min.isChecked() else self.__x_min.getValue() x_max = None if not self.__x_max.isChecked() else self.__x_max.getValue() return x_min, x_max def getYScales(self): y_min = None if not self.__y_min.isChecked() else self.__y_min.getValue() y_max = None if not self.__y_max.isChecked() else self.__y_max.getValue() return y_min, y_max def getReportStep(self): """ @rtype: CTime """ return self.__report_step_widget.getSelectedValue() def setScales(self, x_min, x_max, y_min, y_max): self.blockSignals(True) self.__x_min.setValue(x_min) self.__x_max.setValue(x_max) self.__y_min.setValue(y_min) self.__y_max.setValue(y_max) self.blockSignals(False)
class PlotMetricsWidget(QWidget): VALUE_MIN = "Value Minimum" VALUE_MAX = "Value Maximum" DEPTH_MIN = "Depth Minimum" DEPTH_MAX = "Depth Maximum" TIME_MIN = "Time Minimum" TIME_MAX = "Time Maximum" plotSettingsChanged = pyqtSignal() def __init__(self): QWidget.__init__(self) self.__layout = QVBoxLayout() self.__data_type_key = None self.__trackers = {} self.__spinners = {} self.__layout.addWidget(self.addScaler("value_min", self.VALUE_MIN)) self.__layout.addWidget(self.addScaler("value_max", self.VALUE_MAX)) self.__layout.addWidget(self.addScaler("time_min", self.TIME_MIN, True,True)) self.__layout.addWidget(self.addScaler("time_max", self.TIME_MAX, True)) self.__layout.addWidget(self.addScaler("depth_min", self.DEPTH_MIN)) self.__layout.addWidget(self.addScaler("depth_max", self.DEPTH_MAX)) self.__layout.addSpacing(10) self.__report_step_widget = ReportStepWidget() self.__report_step_widget.reportStepTimeSelected.connect(self.plotSettingsChanged) self.__layout.addWidget(self.__report_step_widget) self.__layout.addStretch() self.setLayout(self.__layout) def updateTrackers(self, values): type_key = values["type_key"] enabled = values["enabled"] value = values["value"] tracker = self.__trackers[type_key] tracker.setValues(self.__data_type_key, value, enabled) self.plotSettingsChanged.emit() def addScaler(self, type_key, title, time_spinner=False,min_value=False): valueSpinner = PlotScalesWidget(type_key, title, time_spinner,min_value) valueSpinner.plotScaleChanged.connect(self.updateTrackers) self.__spinners[type_key] = valueSpinner self.__trackers[type_key] = ScaleTracker(type_key) return valueSpinner def getDataKeyType(self): return self.__data_type_key def setDataKeyType(self, data_key_type): self.__data_type_key = data_key_type for key in self.__spinners: scaler = self.__spinners[key] self.blockSignals(True) values = {"type_key": key, "enabled": self.getIsEnabled(key), "value": self.getValue(key)} scaler.setValues(values) self.blockSignals(False) def getValue(self, type_key): if type_key in self.__trackers: return self.__trackers[type_key].getScaleValue(self.__data_type_key) else: return None def getIsEnabled(self, type_key): if type_key in self.__trackers: return self.__trackers[type_key].isEnabled(self.__data_type_key) else: return None def getSettings(self): settings = { "value_min" : self.getValue("value_min"), "value_max" : self.getValue("value_max"), "time_min" : self.getValue("time_min"), "time_max" : self.getValue("time_max"), "depth_min" : self.getValue("depth_min"), "depth_max" : self.getValue("depth_max"), "report_step_time" : self.__report_step_widget.getSelectedValue().ctime() } return settings
class PlotToolBar(QToolBar): FONT_SIZE = 11 exportClicked = pyqtSignal() resetScalesClicked = pyqtSignal() reportStepChanged = pyqtSignal() plotScalesChanged = pyqtSignal() def __init__(self): QToolBar.__init__(self, "PlotTools") self.setObjectName("PlotToolBar") self.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) self.__reset_scales = self.createAction( "Reset Scales", util.resourceIcon("ide/transform_scale")) self.__reset_scales.triggered.connect(self.resetScalesClicked) self.__x_min, self.__x_min_action = self.addScaler( "x_min", "X Minimum", spinner_type=CTime, select_min_time_value=True) self.__x_max, self.__x_max_action = self.addScaler("x_max", "X Maximum", spinner_type=CTime) self.__y_min, self.__y_min_action = self.addScaler( "y_min", "Y Minimum", spinner_type=float, select_min_time_value=True) self.__y_max, self.__y_max_action = self.addScaler("y_max", "Y Maximum", spinner_type=float) self.__report_step_widget = ReportStepWidget() self.__report_step_widget.reportStepTimeSelected.connect( self.reportStepChanged) self.__report_step_widget.setFontSize(PlotToolBar.FONT_SIZE) self.__report_step_widget_action = self.addWidget( self.__report_step_widget) self.addSeparator() export_action = self.createAction( "Export Plot", util.resourceIcon("ide/table_export")) export_action.triggered.connect(self.exportClicked) def createAction(self, title, icon): action = self.addAction(title) action.setIcon(icon) w = self.widgetForAction(action) font = w.font() font.setPointSize(PlotToolBar.FONT_SIZE) w.setFont(font) return action def addScaler(self, type_key, title, spinner_type, select_min_time_value=False): scaler = PlotScalesWidget(type_key, title, select_min_time_value=select_min_time_value) scaler.setFontSize(PlotToolBar.FONT_SIZE) scaler.plotScaleChanged.connect(self.plotScalesChanged) scaler.setType(spinner_type) action = self.addWidget(scaler) return scaler, action def setToolBarOptions(self, x_type, y_type, report_step_capable): self.blockSignals(True) self.__x_min_action.setVisible(x_type is not None) self.__x_max_action.setVisible(x_type is not None) self.__y_min_action.setVisible(y_type is not None) self.__y_max_action.setVisible(y_type is not None) if x_type is not None: self.__x_min.setType(x_type) self.__x_max.setType(x_type) if y_type is not None: self.__y_min.setType(y_type) self.__y_max.setType(y_type) self.__report_step_widget_action.setVisible(report_step_capable) self.blockSignals(False) def getXScales(self): return (self.__x_min.getValue()), (self.__x_max.getValue()) def getYScales(self): return (self.__y_min.getValue()), (self.__y_max.getValue()) def getReportStep(self): """ @rtype: CTime """ return self.__report_step_widget.getSelectedValue() def setScales(self, x_min, x_max, y_min, y_max): self.blockSignals(True) self.__x_min.setValue(x_min) self.__x_max.setValue(x_max) self.__y_min.setValue(y_min) self.__y_max.setValue(y_max) self.blockSignals(False)
class PlotMetricsWidget(QWidget): VALUE_MIN = "Value Minimum" VALUE_MAX = "Value Maximum" DEPTH_MIN = "Depth Minimum" DEPTH_MAX = "Depth Maximum" TIME_MIN = "Time Minimum" TIME_MAX = "Time Maximum" plotScalesChanged = pyqtSignal() reportStepTimeChanged = pyqtSignal() def __init__(self): QWidget.__init__(self) self.__scalers = {} self.__layout = QVBoxLayout() self.__time_map = ReportStepsModel().getList() self.__time_index_map = {} for index in range(len(self.__time_map)): time = self.__time_map[index] self.__time_index_map[time] = index self.addScaler(PlotMetricsWidget.VALUE_MIN, self.__createDoubleSpinner()) self.addScaler(PlotMetricsWidget.VALUE_MAX, self.__createDoubleSpinner()) self.addScaler(PlotMetricsWidget.TIME_MIN, self.__createTimeSpinner(True)) self.addScaler(PlotMetricsWidget.TIME_MAX, self.__createTimeSpinner(False)) self.addScaler(PlotMetricsWidget.DEPTH_MIN, self.__createDoubleSpinner()) self.addScaler(PlotMetricsWidget.DEPTH_MAX, self.__createDoubleSpinner()) self.__layout.addSpacing(10) self.__report_step_widget = ReportStepWidget() self.__report_step_widget.reportStepTimeSelected.connect(self.reportStepTimeChanged) self.__layout.addWidget(self.__report_step_widget) self.__layout.addStretch() self.setLayout(self.__layout) def __createDoubleSpinner(self): spinner = QDoubleSpinBox() spinner.setEnabled(False) spinner.setMinimumWidth(75) max = 999999999999 spinner.setRange(-max,max) # spinner.valueChanged.connect(self.plotScalesChanged) spinner.editingFinished.connect(self.plotScalesChanged) return spinner def __createTimeSpinner(self, min_value): def converter(item): return "%s" % (str(item.date())) spinner = ListSpinBox(self.__time_map) spinner.setEnabled(False) spinner.setMinimumWidth(75) spinner.valueChanged[int].connect(self.plotScalesChanged) spinner.setStringConverter(converter) if(min_value): spinner.setValue(0) return spinner def addScaler(self, name, spinner): widget = QWidget() layout = QHBoxLayout() layout.setMargin(0) widget.setLayout(layout) checkbox = QCheckBox() checkbox.setChecked(False) checkbox.stateChanged.connect(self.updateScalers) layout.addWidget(checkbox) label = QLabel(name) label.setEnabled(False) layout.addWidget(label) layout.addStretch() layout.addWidget(spinner) self.__layout.addWidget(widget) self.__scalers[name] = {"checkbox": checkbox, "label": label, "spinner": spinner} def updateScalers(self): for scaler in self.__scalers.values(): checked = scaler["checkbox"].isChecked() scaler["label"].setEnabled(checked) scaler["spinner"].setEnabled(checked) self.plotScalesChanged.emit() def getTimeMin(self): scaler = self.__scalers[PlotMetricsWidget.TIME_MIN] if scaler["checkbox"].isChecked(): index =scaler["spinner"].value() return self.__time_map[index] else: return None def getTimeMax(self): scaler = self.__scalers[PlotMetricsWidget.TIME_MAX] if scaler["checkbox"].isChecked(): index = scaler["spinner"].value() return self.__time_map[index] else: return None def getValueMin(self): scaler = self.__scalers[PlotMetricsWidget.VALUE_MIN] if scaler["checkbox"].isChecked(): return scaler["spinner"].value() else: return None def getValueMax(self): scaler = self.__scalers[PlotMetricsWidget.VALUE_MAX] if scaler["checkbox"].isChecked(): return scaler["spinner"].value() else: return None def getDepthMin(self): scaler = self.__scalers[PlotMetricsWidget.DEPTH_MIN] if scaler["checkbox"].isChecked(): return scaler["spinner"].value() else: return None def getDepthMax(self): scaler = self.__scalers[PlotMetricsWidget.DEPTH_MAX] if scaler["checkbox"].isChecked(): return scaler["spinner"].value() else: return None def updateScales(self,time_min, time_max, value_min, value_max, depth_min, depth_max): self.setTimeScales(time_min, time_max) self.setValueScales(value_min, value_max) self.setDepthScales(depth_min, depth_max) self.plotScalesChanged.emit() def setTimeScales(self, time_min, time_max): time_max = self.__time_index_map.get(time_max, None) time_min = self.__time_index_map.get(time_min, None) self.__updateScale(PlotMetricsWidget.TIME_MIN, time_min) self.__updateScale(PlotMetricsWidget.TIME_MAX, time_max) def setValueScales(self, value_min, value_max): self.__updateScale(PlotMetricsWidget.VALUE_MIN, value_min) self.__updateScale(PlotMetricsWidget.VALUE_MAX, value_max) def setDepthScales(self, depth_min, depth_max): self.__updateScale(PlotMetricsWidget.DEPTH_MIN, depth_min) self.__updateScale(PlotMetricsWidget.DEPTH_MAX, depth_max) def __updateScale(self, name, value): scaler = self.__scalers[name] if value is None: scaler["checkbox"].blockSignals(True) scaler["checkbox"].setCheckState(Qt.Unchecked) scaler["checkbox"].blockSignals(False) else: scaler["checkbox"].blockSignals(True) scaler["checkbox"].setCheckState(Qt.Checked) scaler["checkbox"].blockSignals(False) scaler["spinner"].blockSignals(True) scaler["spinner"].setValue(value) scaler["spinner"].blockSignals(False) checked = scaler["checkbox"].isChecked() scaler["label"].setEnabled(checked) scaler["spinner"].setEnabled(checked) def getSelectedReportStepTime(self): """ @rtype: ctime """ return self.__report_step_widget.getSelectedValue().ctime()