diff options
Diffstat (limited to 'gui/tab_drivers.py')
-rw-r--r-- | gui/tab_drivers.py | 100 |
1 files changed, 93 insertions, 7 deletions
diff --git a/gui/tab_drivers.py b/gui/tab_drivers.py index d9a6098..a94ee14 100644 --- a/gui/tab_drivers.py +++ b/gui/tab_drivers.py @@ -1,18 +1,104 @@ import os -from PyQt6.QtGui import * -from PyQt6.QtWidgets import * +import mariadb +from PySide6.QtGui import * +from PySide6.QtWidgets import * +from PySide6.QtCore import * +from PySide6.QtCore import Qt from split_view_layout import * +from dataclasses import dataclass + +@dataclass +class DBDriver(): + id: int + first_name: str + last_name: str + +class DriverModel(QAbstractTableModel): + cursor: mariadb.Cursor + + _header = ["first name", "last name"] + _data: [DBDriver] = [] + + def update(self): + self.beginResetModel() + self.cursor.execute("select `ID`, `firstName`, `lastName` from `member`") + self._data = list() + for result in self.cursor.fetchall(): + self._data.append(DBDriver(*result)) + self.endResetModel() + + def __init__(self, cursor): + super().__init__() + self.cursor = cursor + self.update() + + def rowCount(self, index=0): + return len(self._data) + + def columnCount(self, index=0): + return len(self._header) + + def headerData(self, section, orientation, role): + if role == Qt.DisplayRole: + if orientation == Qt.Horizontal: + return self._header[section] + else: + return self._data[section].id + + def data(self, index, role): + if role == Qt.DisplayRole: + driver = self._data[index.row()] + return ( + driver.first_name, + driver.last_name, + )[index.column()] + +class DriverDetailsWidget(QWidget): + def __init__(self, cursor: mariadb.Cursor, parent=None): + super(DriverDetailsWidget, self).__init__(parent) + + layout = QVBoxLayout(self) + # layout.setAlignment(Qt.AlignmentFlag.AlignTop) + + label_portrait = QLabel("Driver portrait") + layout.addWidget(label_portrait) + + details_form = QFormLayout(self) + details_form.addRow("First name", QLineEdit("hoi")) + details_form.addRow("Middle name", QLineEdit("hoi")) + details_form.addRow("Last name", QLineEdit("hoi")) + layout.addLayout(details_form) + + self.setLayout(layout) + class TabDrivers(QWidget): layout: SplitViewLayout + cursor: mariadb.Cursor + + widget_driver_table: QTableView + model_driver_table: DriverModel + model_proxy: QSortFilterProxyModel + + driver_details: DriverDetailsWidget - def __init__(self, parent=None): + def __init__(self, cursor: mariadb.Cursor, parent=None): super(TabDrivers, self).__init__(parent) + self.cursor = cursor + self.layout = SplitViewLayout(self) - layout = SplitViewLayout(self) - layout.leftWidget(QLabel("hoi")) - layout.rightWidget(QLabel("doei")) + self.widget_driver_table = QTableView(self) + self.widget_driver_table.setSelectionBehavior(QAbstractItemView.SelectRows) + self.model_driver_table = DriverModel(self.cursor) + self.model_proxy = QSortFilterProxyModel() + self.model_proxy.setSourceModel(self.model_driver_table) + self.widget_driver_table.setModel(self.model_proxy) + self.widget_driver_table.setSortingEnabled(True) + self.layout.leftWidget(self.widget_driver_table) - self.setLayout(layout) + self.driver_details = DriverDetailsWidget(self) + self.layout.rightWidget(self.driver_details) + + self.setLayout(self.layout) |