Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
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)
Exemple #6
0
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
Exemple #7
0
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)
Exemple #8
0
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()