fix(ui): backup supply indicator, font size, and system diagnostic highlight
- Fixed backup supply ON/OFF indicator display - Increased font size for better readability - Highlighted system diagnostic codes for improved visibilitymain
parent
ddb6c12ecd
commit
0012e5502c
|
|
@ -781,6 +781,10 @@ class MainWindow(QMainWindow):
|
|||
int(8 * self.scale_factor), int(8 * self.scale_factor)
|
||||
)
|
||||
|
||||
# You correctly created the frame here
|
||||
self.top_bar_frame = QFrame()
|
||||
self.top_bar_frame.setObjectName("topBarFrame")
|
||||
|
||||
top_bar_layout = QHBoxLayout()
|
||||
top_bar_layout.addWidget(QLabel("LAST RECV TS:"))
|
||||
self.last_recv_ts_field = QLineEdit("No Data")
|
||||
|
|
@ -788,24 +792,23 @@ class MainWindow(QMainWindow):
|
|||
top_bar_layout.addWidget(self.last_recv_ts_field)
|
||||
top_bar_layout.addSpacerItem(QSpacerItem(20, 20, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Minimum))
|
||||
|
||||
top_bar_layout.addWidget(QLabel("Backup Supply:"))
|
||||
# top_bar_layout.addWidget(QLabel("Backup Supply:"))
|
||||
self.backup_supply_indicator = QLabel("N/A")
|
||||
self.backup_supply_indicator.setFixedSize(80, 25)
|
||||
self.backup_supply_indicator.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
||||
self.backup_supply_indicator.setStyleSheet(
|
||||
"background-color: gray; color: white; border-radius: 5px; font-weight: bold;"
|
||||
"""
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: 2px solid gray;
|
||||
color: #E0E0E0;
|
||||
border-radius: 5px;
|
||||
font-weight: bold;
|
||||
}
|
||||
"""
|
||||
)
|
||||
top_bar_layout.addWidget(self.backup_supply_indicator)
|
||||
|
||||
# backup_label = QLabel("Backup Supply:")
|
||||
# backup_label.setFont(QFont("Arial", 10, QFont.Weight.Bold))
|
||||
# top_bar_layout.addWidget(backup_label)
|
||||
|
||||
# self.backup_supply_indicator = QLabel("🔴 OFF")
|
||||
# self.backup_supply_indicator.setStyleSheet("color: white; font-weight: bold;")
|
||||
# self.backup_supply_indicator.setFont(QFont("Segoe UI Emoji", 8, QFont.Weight.Bold))
|
||||
# top_bar_layout.addWidget(self.backup_supply_indicator)
|
||||
|
||||
refresh_btn = QPushButton("⟳ Refresh")
|
||||
refresh_btn.setObjectName("RefreshButton")
|
||||
refresh_btn.clicked.connect(self.reset_dashboard_ui)
|
||||
|
|
@ -877,7 +880,6 @@ class MainWindow(QMainWindow):
|
|||
swap_layout.addLayout(swap_display_layout)
|
||||
|
||||
swap_grid = QGridLayout()
|
||||
# swap_grid.setVerticalSpacing(max(0, int(4 * self.scale_factor)))
|
||||
swap_grid.setSpacing(int(2 * self.scale_factor))
|
||||
swap_grid.setContentsMargins(0, 0, 0, 0)
|
||||
swap_grid.setSizeConstraint(QLayout.SizeConstraint.SetFixedSize)
|
||||
|
|
@ -896,14 +898,11 @@ class MainWindow(QMainWindow):
|
|||
swap_grid.addWidget(btn, row, col, Qt.AlignmentFlag.AlignCenter)
|
||||
|
||||
grid_container_layout = QHBoxLayout()
|
||||
grid_container_layout.addStretch(1) # Add a stretchable "spring" on the left
|
||||
grid_container_layout.addLayout(swap_grid) # Add the compact grid in the middle
|
||||
grid_container_layout.addStretch(1) # Add a stretchable "spring" on the right
|
||||
grid_container_layout.addStretch(1)
|
||||
grid_container_layout.addLayout(swap_grid)
|
||||
grid_container_layout.addStretch(1)
|
||||
|
||||
# Add the container (with the springs) to the main vertical layout
|
||||
swap_layout.addLayout(grid_container_layout)
|
||||
|
||||
# swap_layout.addLayout(swap_grid, 0)
|
||||
swap_layout.addStretch(1)
|
||||
|
||||
button_row_layout = QHBoxLayout()
|
||||
|
|
@ -951,13 +950,16 @@ class MainWindow(QMainWindow):
|
|||
audio_layout.addWidget(send_audio_btn)
|
||||
|
||||
diag_panel_layout.addWidget(alarms_group, 2)
|
||||
diag_panel_layout.addWidget(swap_group, 3) # Make sure you have swap_group defined
|
||||
diag_panel_layout.addWidget(audio_group, 1) # Make sure you have audio_group defined
|
||||
diag_panel_layout.addWidget(swap_group, 3)
|
||||
diag_panel_layout.addWidget(audio_group, 1)
|
||||
diag_panel_layout.addWidget(log_group, 4)
|
||||
|
||||
main_content_layout.addWidget(grid_widget, 1)
|
||||
main_content_layout.addWidget(diag_panel, 0)
|
||||
page_layout.addLayout(top_bar_layout)
|
||||
|
||||
self.top_bar_frame.setLayout(top_bar_layout)
|
||||
|
||||
page_layout.addWidget(self.top_bar_frame)
|
||||
page_layout.addLayout(main_content_layout)
|
||||
|
||||
def log_to_instance_view(self, message: str):
|
||||
|
|
@ -1387,36 +1389,6 @@ class MainWindow(QMainWindow):
|
|||
self.tabs.setCurrentWidget(self.main_tab)
|
||||
|
||||
def update_main_dashboard(self, data):
|
||||
# try:
|
||||
# ts = datetime.datetime.fromtimestamp(data.get('ts', datetime.datetime.now().timestamp())).strftime('%Y-%m-%d %H:%M:%S')
|
||||
# self.last_recv_ts_field.setText(ts)
|
||||
# slot_payloads = data.get("slotLevelPayload", [])
|
||||
# for i, slot_data in enumerate(slot_payloads):
|
||||
# if i < len(self.chamber_widgets):
|
||||
# self.chamber_widgets[i].update_data(slot_data)
|
||||
# if (i+1) in self.swap_buttons:
|
||||
# is_present = slot_data.get("batteryPresent") == 1
|
||||
# self.swap_buttons[i+1].setStyleSheet("background-color: #2ecc71;" if is_present else "")
|
||||
# sdc_value = data.get("stationDiagnosticCode", 0)
|
||||
# self.sdc_field.setText(str(sdc_value))
|
||||
|
||||
# backup_status = data.get("backupSupplyStatus", 0) # Default to 0 if not present
|
||||
|
||||
# if backup_status == 1:
|
||||
# self.backup_supply_indicator.setText("BackupON")
|
||||
# self.backup_supply_indicator.setStyleSheet(
|
||||
# "background-color: #28a745; color: white; border-radius: 5px; font-weight: bold;" # Green
|
||||
# )
|
||||
# self.top_bar_frame.setStyleSheet("#topBarFrame { border: 1px solid #28a745; }")
|
||||
# else:
|
||||
# self.backup_supply_indicator.setText("Backup OFF")
|
||||
# self.backup_supply_indicator.setStyleSheet(
|
||||
# "background-color: #dc3545; color: white; border-radius: 5px; font-weight: bold;" # Red
|
||||
# )
|
||||
# self.top_bar_frame.setStyleSheet("#topBarFrame { border: 1px solid #dc3545; }")
|
||||
# self.update_diagnostic_alarms(sdc_value)
|
||||
# except Exception as e:
|
||||
# print(f"Error updating dashboard: {e}")
|
||||
|
||||
try:
|
||||
ts = datetime.datetime.fromtimestamp(data.get('ts', datetime.datetime.now().timestamp())).strftime('%Y-%m-%d %H:%M:%S')
|
||||
|
|
@ -1432,6 +1404,36 @@ class MainWindow(QMainWindow):
|
|||
self.sdc_field.setText(str(sdc_value))
|
||||
self.update_diagnostic_alarms(sdc_value)
|
||||
|
||||
backup_status = data.get("backupSupplyStatus", 0) # Default to 0 if not present
|
||||
if backup_status == 1:
|
||||
self.backup_supply_indicator.setText("Backup ON")
|
||||
self.backup_supply_indicator.setStyleSheet(
|
||||
"""
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: 2px solid #28a745; /* Green */
|
||||
color: #28a745;
|
||||
border-radius: 5px;
|
||||
font-weight: bold;
|
||||
}
|
||||
"""
|
||||
)
|
||||
# self.top_bar_frame.setStyleSheet("#topBarFrame { border: 1px solid #28a745; }")
|
||||
else:
|
||||
self.backup_supply_indicator.setText("Backup OFF")
|
||||
self.backup_supply_indicator.setStyleSheet(
|
||||
"""
|
||||
QLabel {
|
||||
background-color: transparent;
|
||||
border: 2px solid #dc3545; /* Red */
|
||||
color: #dc3545;
|
||||
border-radius: 5px;
|
||||
font-weight: bold;
|
||||
}
|
||||
"""
|
||||
)
|
||||
# self.top_bar_frame.setStyleSheet("#topBarFrame { border: 1px solid #dc3545; }")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error updating dashboard: {e}")
|
||||
|
||||
|
|
|
|||
|
|
@ -17,25 +17,54 @@ class ChamberWidget(QGroupBox):
|
|||
self.setObjectName("ChamberWidget")
|
||||
self.setFont(QFont("Arial", max(8, int(9 * scale)), QFont.Weight.Bold))
|
||||
|
||||
# --- ADD THIS STYLESHEET TO CONTROL FONT SIZES ---
|
||||
self.setStyleSheet(f"""
|
||||
QFormLayout QLabel {{
|
||||
font-size: {max(10, int(12 * scale))}px;
|
||||
color: #AAAAAA;
|
||||
}}
|
||||
QLineEdit#BatIdField {{
|
||||
font-size: {max(14, int(16 * scale))}px;
|
||||
font-weight: bold;
|
||||
color: #FFFFFF;
|
||||
}}
|
||||
QLineEdit#DataField {{
|
||||
font-size: {max(13, int(14 * scale))}px;
|
||||
color: #E0E0E0;
|
||||
}}
|
||||
""")
|
||||
# --- END OF STYLESHEET ---
|
||||
|
||||
main_layout = QVBoxLayout(self)
|
||||
main_layout.setSpacing(max(2, int(4 * scale)))
|
||||
|
||||
# This section creates the 'id_field' that was missing
|
||||
id_layout = QHBoxLayout()
|
||||
id_layout.addWidget(QLabel("BAT ID: "))
|
||||
self.id_field = self._create_data_field(scale) # This line ensures self.id_field exists
|
||||
self.id_field = self._create_data_field(scale)
|
||||
self.id_field.setObjectName("BatIdField") # Set object name for styling
|
||||
id_layout.addWidget(self.id_field)
|
||||
main_layout.addLayout(id_layout)
|
||||
|
||||
columns_layout = QHBoxLayout()
|
||||
battery_form_layout = QFormLayout()
|
||||
battery_form_layout.setVerticalSpacing(max(2, int(4 * scale)))
|
||||
|
||||
self.battery_status_label = self._create_status_label("ABSENT", scale)
|
||||
self.battery_status_label.setProperty("status", "absent")
|
||||
|
||||
# --- SET OBJECT NAMES FOR EACH DATA FIELD ---
|
||||
self.soc_field = self._create_data_field(scale)
|
||||
self.soc_field.setObjectName("DataField")
|
||||
|
||||
self.voltage_field = self._create_data_field(scale)
|
||||
self.voltage_field.setObjectName("DataField")
|
||||
|
||||
self.temp_field = self._create_data_field(scale)
|
||||
self.temp_field.setObjectName("DataField")
|
||||
|
||||
self.battery_fault_field = self._create_data_field(scale)
|
||||
self.battery_fault_field.setObjectName("DataField")
|
||||
# --- END OF OBJECT NAMES ---
|
||||
|
||||
battery_form_layout.addRow("Status:", self.battery_status_label)
|
||||
battery_form_layout.addRow("SOC:", self.soc_field)
|
||||
|
|
@ -49,12 +78,23 @@ class ChamberWidget(QGroupBox):
|
|||
|
||||
charger_form_layout = QFormLayout()
|
||||
charger_form_layout.setVerticalSpacing(max(2, int(4 * scale)))
|
||||
|
||||
self.charger_status_label = self._create_status_label("OFF", scale)
|
||||
self.charger_status_label.setProperty("status", "absent")
|
||||
|
||||
# --- SET OBJECT NAMES FOR EACH DATA FIELD ---
|
||||
self.slot_temp_field = self._create_data_field(scale)
|
||||
self.slot_temp_field.setObjectName("DataField")
|
||||
|
||||
self.chg_temp_field = self._create_data_field(scale)
|
||||
self.chg_temp_field.setObjectName("DataField")
|
||||
|
||||
self.door_status_field = self._create_data_field(scale)
|
||||
self.door_status_field.setObjectName("DataField")
|
||||
|
||||
self.charger_fault_field = self._create_data_field(scale)
|
||||
self.charger_fault_field.setObjectName("DataField")
|
||||
# --- END OF OBJECT NAMES ---
|
||||
|
||||
charger_form_layout.addRow("Chg Status:", self.charger_status_label)
|
||||
charger_form_layout.addRow("Chg Temp:", self.chg_temp_field)
|
||||
|
|
|
|||
Loading…
Reference in New Issue