from PySide6.QtWidgets import QMainWindow, QWidget, QVBoxLayout, QStackedWidget, QHBoxLayout, QLabel, QPushButton from PySide6.QtCore import QTimer from themes import THEME_DAY, THEME_NIGHT from ui.components.divider import divider from ui.components.nav_button import NavButton from screens.home import HomeScreen from screens.stub import StubScreen from datetime import datetime from PySide6.QtWidgets import ( QApplication, QMainWindow, QWidget, QLabel, QPushButton, QHBoxLayout, QVBoxLayout, QGridLayout, QStackedWidget, QSizePolicy ) from PySide6.QtCore import QSize from PySide6.QtGui import QFont class MainWindow(QMainWindow): def __init__(self, app: QApplication): super().__init__() self.app = app self.is_night = True self.setWindowTitle("Car UI (Premium)") self.setMinimumSize(QSize(1024, 600)) self.showFullScreen() # Root layout container central = QWidget() outer = QVBoxLayout(central) outer.setContentsMargins(0, 0, 0, 0) outer.setSpacing(0) # Top bar self.topbar = QWidget() self.topbar.setObjectName("TopBar") top = QHBoxLayout(self.topbar) top.setContentsMargins(16, 10, 16, 10) top.setSpacing(10) self.lbl_time = QLabel("--:--") self.lbl_time.setFont(QFont("", 16, 600)) chip_bt = QPushButton("BT") chip_bt.setObjectName("IconChip") chip_wifi = QPushButton("Wi-Fi") chip_wifi.setObjectName("IconChip") chip_lte = QPushButton("LTE") chip_lte.setObjectName("IconChip") self.lbl_vol = QLabel("VOL 45%") self.lbl_vol.setStyleSheet("color: rgba(138,147,166,0.95); font-size: 14px;") self.btn_theme = QPushButton("🌙") self.btn_theme.setObjectName("IconChip") self.btn_theme.clicked.connect(self.toggle_theme) top.addWidget(self.lbl_time) top.addSpacing(10) top.addWidget(chip_bt) top.addWidget(chip_wifi) top.addWidget(chip_lte) top.addStretch(1) top.addWidget(self.lbl_vol) top.addWidget(self.btn_theme) # Content stack self.stack = QStackedWidget() self.stack.addWidget(HomeScreen()) # 0 self.stack.addWidget(StubScreen("Media")) # 1 self.stack.addWidget(StubScreen("Car")) # 2 self.stack.addWidget(StubScreen("Maps")) # 3 self.stack.addWidget(StubScreen("Settings")) # 4 # Bottom bar (nav) self.bottombar = QWidget() self.bottombar.setObjectName("BottomBar") self.bottombar.setMinimumHeight(100) bottom = QHBoxLayout(self.bottombar) bottom.setContentsMargins(16, 12, 16, 12) bottom.setSpacing(12) self.nav_buttons = [ NavButton("HOME"), NavButton("MEDIA"), NavButton("CAR"), NavButton("MAPS"), NavButton("SETTINGS"), ] for i, btn in enumerate(self.nav_buttons): btn.clicked.connect(lambda checked=False, idx=i: self.go(idx)) bottom.addWidget(btn, 1) outer.addWidget(self.topbar) outer.addWidget(divider(1)) outer.addWidget(self.stack, 1) outer.addWidget(divider(1)) outer.addWidget(self.bottombar) self.setCentralWidget(central) # timers self._clock_timer = QTimer(self) self._clock_timer.timeout.connect(self.update_time) self._clock_timer.start(500) self.apply_theme() self.go(0) def update_time(self): from datetime import datetime self.lbl_time.setText(datetime.now().strftime("%H:%M")) def apply_theme(self): self.app.setStyleSheet(THEME_NIGHT if self.is_night else THEME_DAY) self.btn_theme.setText("🌙" if self.is_night else "☀") def toggle_theme(self): self.is_night = not self.is_night self.apply_theme() def go(self, idx: int): self.stack.setCurrentIndex(idx) for i, b in enumerate(self.nav_buttons): b.set_active(i == idx)