71 lines
2.5 KiB
Python
71 lines
2.5 KiB
Python
# ---------------------------------------------------------------------------
|
||
# Satelliten-Tabelle
|
||
# ---------------------------------------------------------------------------
|
||
from PyQt5.QtGui import QColor
|
||
from PyQt5.QtWidgets import QTableWidget, QHeaderView, QTableWidgetItem
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# UBX Protokoll-Konstanten
|
||
# ---------------------------------------------------------------------------
|
||
GNSS_NAMES = {
|
||
0: "GPS",
|
||
1: "SBAS",
|
||
2: "Galileo",
|
||
3: "BeiDou",
|
||
4: "IMES",
|
||
5: "QZSS",
|
||
6: "GLONASS",
|
||
7: "NavIC"
|
||
}
|
||
|
||
GNSS_COLORS = {
|
||
0: QColor("#1E90FF"),
|
||
1: QColor("#FFA500"),
|
||
2: QColor("#00C853"),
|
||
3: QColor("#E53935"),
|
||
4: QColor("#9C27B0"),
|
||
5: QColor("#00BCD4"),
|
||
6: QColor("#FF4081"),
|
||
7: QColor("#808080")
|
||
}
|
||
|
||
class SatelliteTable(QTableWidget):
|
||
HEADERS = ["GNSS", "SV", "Elevation", "Azimut", "C/N₀ (dB)", "Genutzt"]
|
||
|
||
def __init__(self, parent=None):
|
||
super().__init__(0, len(self.HEADERS), parent)
|
||
self.setHorizontalHeaderLabels(self.HEADERS)
|
||
self.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
|
||
self.setStyleSheet("""
|
||
QTableWidget {
|
||
background-color: #0d1b2a; color: #cccccc;
|
||
gridline-color: #2a4a6a; font-family: monospace; font-size: 11px;
|
||
}
|
||
QHeaderView::section {
|
||
background-color: #1a3a5c; color: #7ab7d4; padding: 4px;
|
||
}
|
||
""")
|
||
self.setEditTriggers(QTableWidget.NoEditTriggers)
|
||
self.setSelectionBehavior(QTableWidget.SelectRows)
|
||
|
||
def update_satellites(self, sats: list):
|
||
self.setRowCount(0)
|
||
for sat in sorted(sats, key=lambda s: (s["gnssId"], s["svId"])):
|
||
row = self.rowCount()
|
||
self.insertRow(row)
|
||
color = GNSS_COLORS.get(sat["gnssId"], QColor("#ffffff"))
|
||
vals = [
|
||
GNSS_NAMES.get(sat["gnssId"], f"?({sat['gnssId']})"),
|
||
str(sat["svId"]),
|
||
f"{sat['elev']}°",
|
||
f"{sat['azim']}°",
|
||
str(sat["cno"]),
|
||
"✓" if sat["used"] else "–",
|
||
]
|
||
for col, val in enumerate(vals):
|
||
item = QTableWidgetItem(val)
|
||
item.setForeground(color if col == 0 else QColor("#cccccc"))
|
||
if sat["used"]:
|
||
item.setBackground(QColor("#0d2a1a"))
|
||
self.setItem(row, col, item)
|