chart refactoring

pull/409/head
Holger Müller 2021-06-26 23:08:56 +02:00
rodzic faf983c196
commit 91baa22a14
3 zmienionych plików z 62 dodań i 61 usunięć

Wyświetl plik

@ -16,71 +16,81 @@
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
import math
from typing import List, Set, Tuple
import logging import logging
import math
from dataclasses import dataclass
from typing import List, Set, Tuple, ClassVar
from PyQt5 import QtWidgets, QtGui, QtCore from PyQt5 import QtWidgets, QtGui, QtCore
from PyQt5.QtCore import pyqtSignal from PyQt5.QtCore import pyqtSignal
from NanoVNASaver.RFTools import Datapoint from NanoVNASaver.RFTools import Datapoint
from NanoVNASaver.Marker import Marker from NanoVNASaver.Marker import Marker
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@dataclass
class Chart(QtWidgets.QWidget): class Chart(QtWidgets.QWidget):
sweepColor = QtCore.Qt.darkYellow
secondarySweepColor = QtCore.Qt.darkMagenta
referenceColor: QtGui.QColor = QtGui.QColor(QtCore.Qt.blue)
referenceColor.setAlpha(64)
secondaryReferenceColor: QtGui.QColor = QtGui.QColor(QtCore.Qt.blue)
secondaryReferenceColor.setAlpha(64)
backgroundColor: QtGui.QColor = QtGui.QColor(QtCore.Qt.white) backgroundColor: QtGui.QColor = QtGui.QColor(QtCore.Qt.white)
foregroundColor: QtGui.QColor = QtGui.QColor(QtCore.Qt.lightGray) foregroundColor: QtGui.QColor = QtGui.QColor(QtCore.Qt.lightGray)
referenceColor: QtGui.QColor = QtGui.QColor(QtCore.Qt.blue).setAlpha(64)
secondaryReferenceColor: QtGui.QColor = QtGui.QColor(QtCore.Qt.blue).setAlpha(64)
secondarySweepColor: QtGui.QColor = QtCore.Qt.darkMagenta
sweepColor: QtGui.QColor = QtCore.Qt.darkYellow
swrColor: QtGui.QColor = QtGui.QColor(QtCore.Qt.red).setAlpha(128)
textColor: QtGui.QColor = QtGui.QColor(QtCore.Qt.black) textColor: QtGui.QColor = QtGui.QColor(QtCore.Qt.black)
swrColor: QtGui.QColor = QtGui.QColor(QtCore.Qt.red)
swrColor.setAlpha(128)
data: List[Datapoint] = []
reference: List[Datapoint] = []
markers: List[Marker] = []
swrMarkers: Set[float] = set()
bands = None
draggedMarker: Marker = None
name = ""
sweepTitle = ""
drawLines = False
minChartHeight = 200
minChartWidth = 200
chartWidth = minChartWidth
chartHeight = minChartHeight
lineThickness = 1
pointSize = 2
markerSize = 3
drawMarkerNumbers = False
markerAtTip = False
filledMarkers = False
draggedBox = False
draggedBoxStart = (0, 0)
draggedBoxCurrent = (-1, -1)
moveStartX = -1
moveStartY = -1
isPopout = False name: str = ""
popoutRequested = pyqtSignal(object) sweepTitle: str = ""
minChartHeight: int = 200
minChartWidth: int = 200
chartHeight: int = 200
chartWidth: int = 200
draggedMarker: Marker = None
drawMarkerNumbers: bool = False
filledMarkers: bool = False
markerAtTip: bool = False
markerSize: int = 3
draggedBoxCurrent: Tuple[int] = (-1, -1)
draggedBoxStart: Tuple[int] = (0, 0)
draggedBox: bool = False
drawLines: bool = False
isPopout: bool = False
lineThickness: int = 1
moveStartX: int = -1
moveStartY: int = -1
pointSize: int = 2
bands: ClassVar = None
popoutRequested: ClassVar = pyqtSignal(object)
def __init__(self, name): def __init__(self, name):
super().__init__() super().__init__()
self.name = name self.name = name
self.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.data: List[Datapoint] = []
self.action_save_screenshot = QtWidgets.QAction("Save image") self.reference: List[Datapoint] = []
self.action_save_screenshot.triggered.connect(self.saveScreenshot) self.markers: List[Marker] = []
self.addAction(self.action_save_screenshot) self.swrMarkers: Set[float] = set()
self.action_popout = QtWidgets.QAction("Popout chart") self.action_popout = QtWidgets.QAction("Popout chart")
self.action_popout.triggered.connect(lambda: self.popoutRequested.emit(self)) self.action_popout.triggered.connect(lambda: self.popoutRequested.emit(self))
self.addAction(self.action_popout) self.addAction(self.action_popout)
self.swrMarkers = set() self.action_save_screenshot = QtWidgets.QAction("Save image")
self.action_save_screenshot.triggered.connect(self.saveScreenshot)
self.addAction(self.action_save_screenshot)
self.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
def setSweepColor(self, color: QtGui.QColor): def setSweepColor(self, color: QtGui.QColor):
self.sweepColor = color self.sweepColor = color
@ -195,16 +205,6 @@ class Chart(QtWidgets.QWidget):
self.filledMarkers = filled_markers self.filledMarkers = filled_markers
self.update() self.update()
@staticmethod
def shortenFrequency(frequency: int) -> str:
if frequency < 50000:
return str(frequency)
if frequency < 5000000:
return str(round(frequency / 1000)) + "k"
if frequency < 50000000:
return str(round(frequency / 1000000, 2)) + "M"
return str(round(frequency / 1000000, 1)) + "M"
def mousePressEvent(self, event: QtGui.QMouseEvent) -> None: def mousePressEvent(self, event: QtGui.QMouseEvent) -> None:
if event.buttons() == QtCore.Qt.RightButton: if event.buttons() == QtCore.Qt.RightButton:
event.ignore() event.ignore()

Wyświetl plik

@ -23,7 +23,7 @@ from typing import List
import numpy as np import numpy as np
from PyQt5 import QtWidgets, QtGui, QtCore from PyQt5 import QtWidgets, QtGui, QtCore
from NanoVNASaver.Formatting import parse_frequency from NanoVNASaver.Formatting import parse_frequency, format_frequency_chart
from NanoVNASaver.RFTools import Datapoint from NanoVNASaver.RFTools import Datapoint
from .Chart import Chart from .Chart import Chart
@ -84,11 +84,11 @@ class FrequencyChart(Chart):
self.x_menu.addSeparator() self.x_menu.addSeparator()
self.action_set_fixed_start = QtWidgets.QAction( self.action_set_fixed_start = QtWidgets.QAction(
"Start (" + Chart.shortenFrequency(self.minFrequency) + ")") "Start (" + format_frequency_chart(self.minFrequency) + ")")
self.action_set_fixed_start.triggered.connect(self.setMinimumFrequency) self.action_set_fixed_start.triggered.connect(self.setMinimumFrequency)
self.action_set_fixed_stop = QtWidgets.QAction( self.action_set_fixed_stop = QtWidgets.QAction(
"Stop (" + Chart.shortenFrequency(self.maxFrequency) + ")") "Stop (" + format_frequency_chart(self.maxFrequency) + ")")
self.action_set_fixed_stop.triggered.connect(self.setMaximumFrequency) self.action_set_fixed_stop.triggered.connect(self.setMaximumFrequency)
self.x_menu.addAction(self.action_set_fixed_start) self.x_menu.addAction(self.action_set_fixed_start)
@ -167,9 +167,9 @@ class FrequencyChart(Chart):
def contextMenuEvent(self, event): def contextMenuEvent(self, event):
self.action_set_fixed_start.setText( self.action_set_fixed_start.setText(
f"Start ({Chart.shortenFrequency(self.minFrequency)})") f"Start ({format_frequency_chart(self.minFrequency)})")
self.action_set_fixed_stop.setText( self.action_set_fixed_stop.setText(
f"Stop ({Chart.shortenFrequency(self.maxFrequency)})") f"Stop ({format_frequency_chart(self.maxFrequency)})")
self.action_set_fixed_minimum.setText( self.action_set_fixed_minimum.setText(
f"Minimum ({self.minDisplayValue})") f"Minimum ({self.minDisplayValue})")
self.action_set_fixed_maximum.setText( self.action_set_fixed_maximum.setText(
@ -496,7 +496,7 @@ class FrequencyChart(Chart):
qp.setPen(self.textColor) qp.setPen(self.textColor)
qp.drawText(self.leftMargin - 20, qp.drawText(self.leftMargin - 20,
self.topMargin + self.chartHeight + 15, self.topMargin + self.chartHeight + 15,
Chart.shortenFrequency(self.fstart)) format_frequency_chart(self.fstart))
ticks = math.floor(self.chartWidth / 100) # Number of ticks does not include the origin ticks = math.floor(self.chartWidth / 100) # Number of ticks does not include the origin
for i in range(ticks): for i in range(ticks):
x = self.leftMargin + round((i + 1) * self.chartWidth / ticks) x = self.leftMargin + round((i + 1) * self.chartWidth / ticks)
@ -510,7 +510,7 @@ class FrequencyChart(Chart):
qp.setPen(self.textColor) qp.setPen(self.textColor)
qp.drawText(x - 20, qp.drawText(x - 20,
self.topMargin + self.chartHeight + 15, self.topMargin + self.chartHeight + 15,
Chart.shortenFrequency(freq)) format_frequency_chart(freq))
def drawBands(self, qp, fstart, fstop): def drawBands(self, qp, fstart, fstop):
qp.setBrush(self.bands.color) qp.setBrush(self.bands.color)

Wyświetl plik

@ -22,6 +22,7 @@ from typing import List
from PyQt5 import QtWidgets, QtGui from PyQt5 import QtWidgets, QtGui
from NanoVNASaver.Formatting import format_frequency_chart
from NanoVNASaver.Marker import Marker from NanoVNASaver.Marker import Marker
from NanoVNASaver.RFTools import Datapoint from NanoVNASaver.RFTools import Datapoint
from NanoVNASaver.SITools import Format, Value from NanoVNASaver.SITools import Format, Value
@ -517,9 +518,9 @@ class RealImaginaryChart(FrequencyChart):
def contextMenuEvent(self, event): def contextMenuEvent(self, event):
self.action_set_fixed_start.setText( self.action_set_fixed_start.setText(
f"Start ({Chart.shortenFrequency(self.minFrequency)})") f"Start ({format_frequency_chart(self.minFrequency)})")
self.action_set_fixed_stop.setText( self.action_set_fixed_stop.setText(
f"Stop ({Chart.shortenFrequency(self.maxFrequency)})") f"Stop ({format_frequency_chart(self.maxFrequency)})")
self.action_set_fixed_minimum_real.setText( self.action_set_fixed_minimum_real.setText(
f"Minimum R ({self.minDisplayReal})") f"Minimum R ({self.minDisplayReal})")
self.action_set_fixed_maximum_real.setText( self.action_set_fixed_maximum_real.setText(