Initial commit
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
#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
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
#ifndef MAIN_WINDOW_H
|
||||
#define MAIN_WINDOW_H
|
||||
|
||||
#include "ui_main_window.h"
|
||||
#include <QMainWindow>
|
||||
|
||||
class MainWindow : public QMainWindow, private Ui::MainWindow {
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
qint32 userId_;
|
||||
qint32 accessLevel_;
|
||||
|
||||
public:
|
||||
explicit MainWindow(qint32 userId, qint32 accessLevel,
|
||||
QWidget *parent = nullptr);
|
||||
|
||||
private:
|
||||
void configureAccessLevel();
|
||||
void configureAllTableViews();
|
||||
|
||||
void disableSelection(QTableView *view);
|
||||
void enableSelection(QTableView *view);
|
||||
void loadDefaultConfiguration(QTableView *view);
|
||||
};
|
||||
|
||||
#endif // MAIN_WINDOW_H
|
||||
@@ -0,0 +1,148 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>900</width>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Cinema ticket accounting system</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralWidget">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="TicketSaleWidget" name="TicketSalePage">
|
||||
<attribute name="title">
|
||||
<string>Ticket sales</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
<widget class="TicketReturnWidget" name="TicketReturnPage">
|
||||
<attribute name="title">
|
||||
<string>Ticket refund</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
<widget class="SessionManagementWidget" name="SessionManagementPage">
|
||||
<attribute name="title">
|
||||
<string>Session management</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
<widget class="DirectoriesManagementWidget" name="DirectoriesManagementPage">
|
||||
<attribute name="title">
|
||||
<string>Reference books</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
<widget class="ReportsWidget" name="ReportsPage">
|
||||
<attribute name="title">
|
||||
<string>Reports</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
<widget class="QWidget" name="DangerZonePage">
|
||||
<attribute name="title">
|
||||
<string>Danger zone</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="EntityUpdaterWidget" name="entityUpdaterWidget" native="true"/>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="EntityDeleterWidget" name="entityDeleterWidget" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menuBar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>900</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusBar"/>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>TicketSaleWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>ticket_sale_widget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>TicketReturnWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>ticket_return_widget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>SessionManagementWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>session_management_widget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>DirectoriesManagementWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>directories_management_widget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>ReportsWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>reports_widget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>EntityDeleterWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>entity_deleter_widget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>EntityUpdaterWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>entity_updater_widget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
Reference in New Issue
Block a user