Files
cinema-ticket-management-sy…/ui/main_window/main_window.cpp
T
2026-07-12 14:34:52 +04:00

146 lines
4.5 KiB
C++

#include "main_window.h"
#include "date_time_delegate.h"
// Set up the table view
// #define ENABLE_SELECTION // Uncomment to enable highlighting
#define DISABLE_SELECTION // Uncomment to disable highlighting
MainWindow::MainWindow(qint32 userId, qint32 accessLevel, QWidget *parent)
: QMainWindow(parent), userId_(userId), accessLevel_(accessLevel) {
qInfo() << "Initializing main window...";
setupUi(this);
configureAllTableViews();
configureAccessLevel();
qInfo() << "Main window initialized successfully";
};
void MainWindow::configureAccessLevel() {
qInfo() << "Configuring access level...";
if (accessLevel_ < 1) {
qCritical() << "Access level is less than 1";
QCoreApplication::quit();
}
qInfo() << "Access level is" << accessLevel_;
// Full access to all system functionalities
// Manage system settings and user permissions
// Can perform all actions of lower roles
if (accessLevel_ < 100) { // Lower than Super Administrator
}
// Delete records (sessions, tickets, halls, movies, genres)
// Modify system-critical data
// Has all permissions of lower roles
if (accessLevel_ < 82) { // Lower than Data Administrator
findChild<QWidget *>("DangerZonePage")->setDisabled(true);
}
// Add new sessions, movies, halls, and genres
// Manage show schedules
// Has all permissions of lower roles
if (accessLevel_ < 64) { // Lower than Repertoire Manager
findChild<QWidget *>("DirectoriesManagementPage")->setDisabled(true);
findChild<QWidget *>("SessionManagementPage")->setDisabled(true);
}
// Edit session, movie, hall, and genre information
// Adjust ticket prices
// Has all permissions of lower roles
if (accessLevel_ < 46) { // Lower than Data Editor
}
// View ticket sales
// View attendance statistics
// Has all permissions of lower roles
if (accessLevel_ < 28) { // Lower than Sales Manager
findChild<QWidget *>("ReportsPage")->setDisabled(true);
}
// Sell tickets
// Ticket refunds
if (accessLevel_ < 10) { // Lower than Cashier
findChild<QWidget *>("MainWindow")->setDisabled(true);
}
// Nothing
qInfo() << "Access level configured successfully";
}
void MainWindow::configureAllTableViews() {
qInfo() << "Configuring all QAbstractItemViews...";
// Find all QAbstractItemView children
auto tableViews = findChildren<QAbstractItemView *>();
for (QAbstractItemView *abstractItemView : tableViews) {
// Check if the view is a QTableView
if (auto *tableView = qobject_cast<QTableView *>(abstractItemView)) {
loadDefaultConfiguration(tableView);
}
}
qInfo() << "All QAbstractItemViews configured successfully";
}
void MainWindow::MainWindow::disableSelection(QTableView *tableView) {
qInfo() << "Disabling selection for QAbstractItemView:"
<< tableView->objectName();
// Disable selection
tableView->setSelectionMode(QAbstractItemView::NoSelection);
// Clear the selection
tableView->clearSelection();
// Disable focus
tableView->setFocusPolicy(Qt::NoFocus);
}
void enableSelection(QTableView *tableView) {
qInfo() << "Enabling selection for QAbstractItemView:"
<< tableView->objectName();
// Set the selection behavior
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
// Set the selection mode
tableView->setSelectionMode(QAbstractItemView::SingleSelection);
}
void MainWindow::loadDefaultConfiguration(QTableView *tableView) {
qInfo() << "Loading default configuration for QAbstractItemView:"
<< tableView->objectName();
DateTimeDelegate *dateTimeDelegate = new DateTimeDelegate(this);
tableView->setItemDelegate(dateTimeDelegate);
QHeaderView *horizontalHeader = tableView->horizontalHeader();
// Disable horizontal header highlight
horizontalHeader->setHighlightSections(false);
// Set the horizontal header to resize to contents
horizontalHeader->setSectionResizeMode(QHeaderView::ResizeToContents);
tableView->setSortingEnabled(true); // Enable sorting
tableView->sortByColumn(0, Qt::AscendingOrder);
// Disable editing
tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
// Set the scroll mode
tableView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
tableView->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
// Enable alternating row colors
tableView->setAlternatingRowColors(true);
#ifdef ENABLE_SELECTION
enableSelection(view);
#elif defined(DISABLE_SELECTION)
disableSelection(tableView);
#else
#error "Define ENABLE_SELECTION or DISABLE_SELECTION"
#endif
}