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 visibility
main
Kirubakaran 2025-08-21 01:08:59 +05:30
parent ddb6c12ecd
commit 0012e5502c
2 changed files with 95 additions and 53 deletions

View File

@ -780,6 +780,10 @@ class MainWindow(QMainWindow):
int(8 * self.scale_factor), int(8 * self.scale_factor),
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:"))
@ -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}")

View File

@ -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)