import importlib from pathlib import Path from PyQt6.QtCore import QSize, Qt from PyQt6.QtGui import QColor, QIcon, QPalette, QPixmap from PyQt6.QtWidgets import ( QApplication, QFrame, QHBoxLayout, QLabel, QMainWindow, QPushButton, QStackedWidget, QVBoxLayout, QWidget, ) from raveos_center import VERZIO, hatter, oldalak, rendszerinfo, stilus from raveos_center.elemek import cimke, frissit_stilus from raveos_center.ikonok import ikon ADAT = Path(__file__).parent / "adat" class Menupont(QPushButton): def __init__(self, modul): super().__init__(modul.MENU) self.modul = modul self.setObjectName("menupont") self.setCursor(Qt.CursorShape.PointingHandCursor) self.setIconSize(QSize(18, 18)) sor = QHBoxLayout(self) sor.setContentsMargins(0, 0, 12, 0) sor.addStretch(1) self.jelveny = cimke("", "jelveny") self.jelveny.setAttribute(Qt.WidgetAttribute.WA_TransparentForMouseEvents) self.jelveny.setFixedHeight(18) self.jelveny.setAlignment(Qt.AlignmentFlag.AlignCenter) self.jelveny.hide() sor.addWidget(self.jelveny, 0, Qt.AlignmentFlag.AlignVCenter) self.beallit(False) def beallit(self, aktiv): self.setProperty("aktiv", aktiv) self.setIcon(ikon(self.modul.IKON, stilus.ZOLD if aktiv else stilus.SZOVEG_MASOD)) frissit_stilus(self) def szam(self, ertek): self.jelveny.setText(str(ertek)) self.jelveny.setVisible(bool(ertek)) class Kozpont: def __init__(self, ablak): self.ablak = ablak def van(self, azon, *args): oldal = self.ablak.oldalak.get(azon) return bool(oldal) and oldal.elerheto(*args) def mutat(self, azon, *args): return self.ablak.mutat(azon, *args) def jelveny(self, azon, szam): pont = self.ablak.menupontok.get(azon) if pont: pont.szam(szam) class FoAblak(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("RaveOS Center") self.setWindowIcon(QIcon(str(ADAT / "logo.png"))) self.resize(1280, 820) self.setMinimumSize(760, 520) self.kozpont = Kozpont(self) self.oldalak = {} self.menupontok = {} alap = QWidget() self.setCentralWidget(alap) sor = QHBoxLayout(alap) sor.setContentsMargins(0, 0, 0, 0) sor.setSpacing(0) self.oldalsav = QFrame() self.oldalsav.setObjectName("oldalsav") self.oldalsav.setFixedWidth(232) sav = QVBoxLayout(self.oldalsav) sav.setContentsMargins(16, 28, 16, 20) sav.setSpacing(4) sav.addLayout(self._marka()) sav.addSpacing(28) self.verem = QStackedWidget() sor.addWidget(self.oldalsav) sor.addWidget(self.verem, 1) for nev in oldalak.FENT: self._betolt(nev, sav) sav.addStretch(1) vonal = QFrame() vonal.setObjectName("elvalaszto") sav.addWidget(vonal) sav.addSpacing(12) for nev in oldalak.LENT: self._betolt(nev, sav) sav.addWidget(cimke(f"{rendszerinfo.raveos_verzio()} ยท rp1.hu", "lablec")) for oldal in self.oldalak.values(): oldal.indulaskor() if oldalak.FENT: self.mutat(oldalak.FENT[0]) def _marka(self): sor = QHBoxLayout() sor.setContentsMargins(8, 0, 8, 0) sor.setSpacing(12) logo = QLabel() kep = QPixmap(str(ADAT / "logo.png")) kep.setDevicePixelRatio(2) logo.setPixmap( kep.scaled(84, 78, Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation) ) sor.addWidget(logo) nevek = QVBoxLayout() nevek.setSpacing(0) nevek.addWidget(cimke("RAVEOS", "markanev")) nevek.addWidget(cimke("CENTER", "markaalcim")) sor.addLayout(nevek) sor.addStretch(1) return sor def _betolt(self, nev, sav): modul = importlib.import_module(f"raveos_center.oldalak.{nev}") oldal = modul.OLDAL(self.kozpont) self.oldalak[modul.AZON] = oldal self.verem.addWidget(oldal) pont = Menupont(modul) pont.clicked.connect(lambda _=False, a=modul.AZON: self.mutat(a)) self.menupontok[modul.AZON] = pont sav.addWidget(pont) def mutat(self, azon, *args): oldal = self.oldalak.get(azon) if not oldal: return False for a, pont in self.menupontok.items(): pont.beallit(a == azon) self.verem.setCurrentWidget(oldal) oldal.megjelenik(*args) return True def paletta(): p = QPalette() szinek = { QPalette.ColorRole.Window: stilus.HATTER, QPalette.ColorRole.WindowText: stilus.SZOVEG, QPalette.ColorRole.Base: stilus.HATTER, QPalette.ColorRole.AlternateBase: stilus.FELULET, QPalette.ColorRole.Text: stilus.SZOVEG, QPalette.ColorRole.Button: stilus.FELULET, QPalette.ColorRole.ButtonText: stilus.SZOVEG, QPalette.ColorRole.Highlight: stilus.ZOLD, QPalette.ColorRole.HighlightedText: stilus.ZOLDON_SZOVEG, QPalette.ColorRole.ToolTipBase: stilus.FELULET, QPalette.ColorRole.ToolTipText: stilus.SZOVEG, QPalette.ColorRole.PlaceholderText: stilus.SZOVEG_HALVANY, QPalette.ColorRole.Link: stilus.ZOLD, QPalette.ColorRole.Mid: stilus.KERET, QPalette.ColorRole.Dark: stilus.KERET_EROS, } for szerep, szin in szinek.items(): p.setColor(szerep, QColor(szin)) for szerep in (QPalette.ColorRole.WindowText, QPalette.ColorRole.Text, QPalette.ColorRole.ButtonText): p.setColor(QPalette.ColorGroup.Disabled, szerep, QColor(stilus.SZOVEG_HALVANY)) return p def futtat(argv): app = QApplication(argv) app.setApplicationName("RaveOS Center") app.setDesktopFileName("raveos-center") app.setStyle("Fusion") app.setPalette(paletta()) app.setStyleSheet(stilus.QSS) app.aboutToQuit.connect(hatter.leallitas) ablak = FoAblak() ablak.show() return app.exec()