Initial commit

This commit is contained in:
user
2026-07-12 14:34:52 +04:00
commit 3abf6bd9c2
557 changed files with 68706 additions and 0 deletions
+145
View File
@@ -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
}
+27
View File
@@ -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
+148
View File
@@ -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>