diff --git a/NanoVNASaver/Chart.py b/NanoVNASaver/Chart.py index 3879ad3..5fec082 100644 --- a/NanoVNASaver/Chart.py +++ b/NanoVNASaver/Chart.py @@ -53,6 +53,8 @@ class Chart(QtWidgets.QWidget): pointSize = 2 markerSize = 3 drawMarkerNumbers = False + markerAtTip = False + filledMarkers = False isPopout = False popoutRequested = pyqtSignal(object) @@ -164,12 +166,20 @@ class Chart(QtWidgets.QWidget): def getPosition(self, d: Datapoint) -> (int, int): return self.getXPosition(d), self.getYPosition(d) - def setDrawLines(self, drawLines): - self.drawLines = drawLines + def setDrawLines(self, draw_lines): + self.drawLines = draw_lines self.update() - def setDrawMarkerNumbers(self, drawMarkerNumbers): - self.drawMarkerNumbers = drawMarkerNumbers + def setDrawMarkerNumbers(self, draw_marker_numbers): + self.drawMarkerNumbers = draw_marker_numbers + self.update() + + def setMarkerAtTip(self, marker_at_tip): + self.markerAtTip = marker_at_tip + self.update() + + def setFilledMarkers(self, filled_markers): + self.filledMarkers = filled_markers self.update() @staticmethod @@ -221,6 +231,8 @@ class Chart(QtWidgets.QWidget): new_chart.drawLines = self.drawLines new_chart.markerSize = self.markerSize new_chart.drawMarkerNumbers = self.drawMarkerNumbers + new_chart.filledMarkers = self.filledMarkers + new_chart.markerAtTip = self.markerAtTip new_chart.resize(self.width(), self.height()) new_chart.setPointSize(self.pointSize) new_chart.setLineThickness(self.lineThickness) @@ -248,14 +260,20 @@ class Chart(QtWidgets.QWidget): self.update() def drawMarker(self, x, y, qp: QtGui.QPainter, color: QtGui.QColor, number=0): + if self.markerAtTip: + y -= self.markerSize pen = QtGui.QPen(color) qp.setPen(pen) - qp.drawLine(int(x), int(y) + self.markerSize, - int(x) - self.markerSize, int(y) - self.markerSize) - qp.drawLine(int(x), int(y) + self.markerSize, - int(x) + self.markerSize, int(y) - self.markerSize) - qp.drawLine(int(x) - self.markerSize, int(y) - self.markerSize, - int(x) + self.markerSize, int(y) - self.markerSize) + qpp = QtGui.QPainterPath() + qpp.moveTo(x, y + self.markerSize) + qpp.lineTo(x - self.markerSize, y - self.markerSize) + qpp.lineTo(x + self.markerSize, y - self.markerSize) + qpp.lineTo(x, y + self.markerSize) + + if self.filledMarkers: + qp.fillPath(qpp, color) + else: + qp.drawPath(qpp) if self.drawMarkerNumbers: number_x = x - 3 diff --git a/NanoVNASaver/NanoVNASaver.py b/NanoVNASaver/NanoVNASaver.py index 192e03a..71f37a6 100644 --- a/NanoVNASaver/NanoVNASaver.py +++ b/NanoVNASaver/NanoVNASaver.py @@ -992,11 +992,11 @@ class DisplaySettingsWindow(QtWidgets.QWidget): display_options_box = QtWidgets.QGroupBox("Options") display_options_layout = QtWidgets.QFormLayout(display_options_box) - returnloss_group = QtWidgets.QButtonGroup() + self.returnloss_group = QtWidgets.QButtonGroup() self.returnloss_is_negative = QtWidgets.QRadioButton("Negative") self.returnloss_is_positive = QtWidgets.QRadioButton("Positive") - returnloss_group.addButton(self.returnloss_is_positive) - returnloss_group.addButton(self.returnloss_is_negative) + self.returnloss_group.addButton(self.returnloss_is_positive) + self.returnloss_group.addButton(self.returnloss_is_negative) display_options_layout.addRow("Return loss is:", self.returnloss_is_negative) display_options_layout.addRow("", self.returnloss_is_positive) @@ -1103,6 +1103,28 @@ class DisplaySettingsWindow(QtWidgets.QWidget): self.show_marker_number_option.stateChanged.connect(self.changeShowMarkerNumber) display_options_layout.addRow(self.show_marker_number_option, show_marker_number_label) + self.filled_marker_option = QtWidgets.QCheckBox("Filled markers") + filled_marker_label = QtWidgets.QLabel("Shows the marker as a filled triangle") + self.filled_marker_option.stateChanged.connect(self.changeFilledMarkers) + display_options_layout.addRow(self.filled_marker_option, filled_marker_label) + + self.marker_tip_group = QtWidgets.QButtonGroup() + self.marker_at_center = QtWidgets.QRadioButton("At the center of the marker") + self.marker_at_tip = QtWidgets.QRadioButton("At the tip of the marker") + self.marker_tip_group.addButton(self.marker_at_center) + self.marker_tip_group.addButton(self.marker_at_tip) + + display_options_layout.addRow("Data point is:", self.marker_at_center) + display_options_layout.addRow("", self.marker_at_tip) + + if self.app.settings.value("MarkerAtTip", False, bool): + self.marker_at_tip.setChecked(True) + else: + self.marker_at_center.setChecked(True) + + self.marker_at_tip.toggled.connect(self.changeMarkerAtTip) + self.changeMarkerAtTip() + color_options_box = QtWidgets.QGroupBox("Chart colors") color_options_layout = QtWidgets.QFormLayout(color_options_box) @@ -1112,19 +1134,25 @@ class DisplaySettingsWindow(QtWidgets.QWidget): self.btn_background_picker = QtWidgets.QPushButton("█") self.btn_background_picker.setFixedWidth(20) - self.btn_background_picker.clicked.connect(lambda: self.setColor("background", QtWidgets.QColorDialog.getColor(self.backgroundColor, options=QtWidgets.QColorDialog.ShowAlphaChannel))) + self.btn_background_picker.clicked.connect(lambda: self.setColor("background", + QtWidgets.QColorDialog.getColor(self.backgroundColor, + options=QtWidgets.QColorDialog.ShowAlphaChannel))) color_options_layout.addRow("Chart background", self.btn_background_picker) self.btn_foreground_picker = QtWidgets.QPushButton("█") self.btn_foreground_picker.setFixedWidth(20) - self.btn_foreground_picker.clicked.connect(lambda: self.setColor("foreground", QtWidgets.QColorDialog.getColor(self.foregroundColor, options=QtWidgets.QColorDialog.ShowAlphaChannel))) + self.btn_foreground_picker.clicked.connect(lambda: self.setColor("foreground", + QtWidgets.QColorDialog.getColor(self.foregroundColor, + options=QtWidgets.QColorDialog.ShowAlphaChannel))) color_options_layout.addRow("Chart foreground", self.btn_foreground_picker) self.btn_text_picker = QtWidgets.QPushButton("█") self.btn_text_picker.setFixedWidth(20) - self.btn_text_picker.clicked.connect(lambda: self.setColor("text", QtWidgets.QColorDialog.getColor(self.textColor, options=QtWidgets.QColorDialog.ShowAlphaChannel))) + self.btn_text_picker.clicked.connect(lambda: self.setColor("text", + QtWidgets.QColorDialog.getColor(self.textColor, + options=QtWidgets.QColorDialog.ShowAlphaChannel))) color_options_layout.addRow("Chart text", self.btn_text_picker) @@ -1154,7 +1182,9 @@ class DisplaySettingsWindow(QtWidgets.QWidget): self.btn_bands_picker = QtWidgets.QPushButton("█") self.btn_bands_picker.setFixedWidth(20) - self.btn_bands_picker.clicked.connect(lambda: self.setColor("bands", QtWidgets.QColorDialog.getColor(self.bandsColor, options=QtWidgets.QColorDialog.ShowAlphaChannel))) + self.btn_bands_picker.clicked.connect(lambda: self.setColor("bands", + QtWidgets.QColorDialog.getColor(self.bandsColor, + options=QtWidgets.QColorDialog.ShowAlphaChannel))) bands_layout.addRow("Chart bands", self.btn_bands_picker) @@ -1179,7 +1209,9 @@ class DisplaySettingsWindow(QtWidgets.QWidget): self.btn_vswr_picker = QtWidgets.QPushButton("█") self.btn_vswr_picker.setFixedWidth(20) - self.btn_vswr_picker.clicked.connect(lambda: self.setColor("vswr", QtWidgets.QColorDialog.getColor(self.vswrColor, options=QtWidgets.QColorDialog.ShowAlphaChannel))) + self.btn_vswr_picker.clicked.connect(lambda: self.setColor("vswr", + QtWidgets.QColorDialog.getColor(self.vswrColor, + options=QtWidgets.QColorDialog.ShowAlphaChannel))) vswr_marker_layout.addRow("VSWR Markers", self.btn_vswr_picker) @@ -1324,6 +1356,7 @@ class DisplaySettingsWindow(QtWidgets.QWidget): self.dark_mode_option.setChecked(self.app.settings.value("DarkMode", False, bool)) self.show_lines_option.setChecked(self.app.settings.value("ShowLines", False, bool)) self.show_marker_number_option.setChecked(self.app.settings.value("ShowMarkerNumbers", False, bool)) + self.filled_marker_option.setChecked(self.app.settings.value("FilledMarkers", False, bool)) if self.app.settings.value("UseCustomColors", defaultValue=False, type=bool): self.dark_mode_option.setDisabled(True) @@ -1411,6 +1444,18 @@ class DisplaySettingsWindow(QtWidgets.QWidget): for c in self.app.subscribing_charts: c.setDrawMarkerNumbers(state) + def changeFilledMarkers(self): + state = self.filled_marker_option.isChecked() + self.app.settings.setValue("FilledMarkers", state) + for c in self.app.subscribing_charts: + c.setFilledMarkers(state) + + def changeMarkerAtTip(self): + state = self.marker_at_tip.isChecked() + self.app.settings.setValue("MarkerAtTip", state) + for c in self.app.subscribing_charts: + c.setMarkerAtTip(state) + def changePointSize(self, size: int): self.app.settings.setValue("PointSize", size) for c in self.app.subscribing_charts: