diff --git a/client/internal/CMakeLists.txt b/client/internal/CMakeLists.txt index 93fbed89936e6598f9d7acb32e8664996cf4ba5f..f76cc95852d6c9979711c7956fd08f908d82c92a 100644 --- a/client/internal/CMakeLists.txt +++ b/client/internal/CMakeLists.txt @@ -1,8 +1,12 @@ add_subdirectory(entities) add_subdirectory(httpClient) +add_subdirectory(gui) set(libClientEntities_LIB ${libClientEntities_LIB} PARENT_SCOPE) set(libClientEntities_INCLUDE_DIRS ${libClientEntities_INCLUDE_DIRS} PARENT_SCOPE) set(HTTPCLIENT_lib_LIB ${HTTPCLIENT_lib_LIB} PARENT_SCOPE) -set(HTTPCLIENT_lib_INCLUDE_DIRS ${HTTPCLIENT_lib_INCLUDE_DIRS} PARENT_SCOPE) \ No newline at end of file +set(HTTPCLIENT_lib_INCLUDE_DIRS ${HTTPCLIENT_lib_INCLUDE_DIRS} PARENT_SCOPE) + +set(GUI_lib_LIB ${GUI_lib_LIB} PARENT_SCOPE) +set(GUI_lib_INCLUDE_DIRS ${GUI_lib_INCLUDE_DIRS} PARENT_SCOPE) \ No newline at end of file diff --git a/client/internal/gui/CMakeLists.txt b/client/internal/gui/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..60da13c95b5f5cb01d81d42bb8c14acef1895c52 --- /dev/null +++ b/client/internal/gui/CMakeLists.txt @@ -0,0 +1,24 @@ +project("GuiLib") + +set(CMAKE_CXX_STANDARD 20) + +file(GLOB SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) +file(GLOB INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include) +file(GLOB INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h) + +set(CMAKE_PREFIX_PATH "~/Qt/6.5.0/macos/lib/cmake") +find_package(Qt6 REQUIRED COMPONENTS Widgets Core Gui) + +include_directories(${INCLUDE_DIRS} ${libClientEntities_INCLUDE_DIRS}) + +add_library(${PROJECT_NAME} ${SOURCES} ${INCLUDES}) +target_link_libraries(${PROJECT_NAME} ${libClientEntities_LIB} Qt6::Widgets Qt6::Core Qt6::Gui) + +set(GUI_lib_LIB ${PROJECT_NAME}) +set(GUI_lib_LIB ${GUI_lib_LIB} PARENT_SCOPE) + +set(GUI_lib_INCLUDE_DIRS ${INCLUDE_DIRS}) +set(GUI_lib_INCLUDE_DIRS ${GUI_lib_INCLUDE_DIRS} PARENT_SCOPE) + +enable_testing() +add_subdirectory(tests) \ No newline at end of file diff --git a/client/internal/gui/include/AuthDialog.h b/client/internal/gui/include/AuthDialog.h new file mode 100644 index 0000000000000000000000000000000000000000..76b3f9b12482ef8d8489c5d9d278660978c8c5b4 --- /dev/null +++ b/client/internal/gui/include/AuthDialog.h @@ -0,0 +1,43 @@ +#ifndef AUTH_DIALOG_H +#define AUTH_DIALOG_H + +#include +#include +#include +#include +#include + +class AuthDialog : public QDialog { + Q_OBJECT + +public: + explicit AuthDialog(QWidget *parent = nullptr); + ~AuthDialog() override; + +signals: + void showMainWindow(); + void showUserWindow(); + +private slots: + void on_loginButton_clicked(); + void on_backButton_clicked(); + +private: + QGroupBox *groupBox = nullptr; + QWidget *layoutWidget = nullptr; + QVBoxLayout *verticalLayout = nullptr; + QHBoxLayout *horizontalLayout = nullptr; + QLabel *loginLabel = nullptr; + QLineEdit *login = nullptr; + QHBoxLayout *horizontalLayout_2 = nullptr; + QLabel *passwordLabel = nullptr; + QLineEdit *password = nullptr; + QPushButton *loginButton = nullptr; + QPushButton *backButton = nullptr; + + void setupUi(QDialog *AuthDialog); + + void setTexts(QDialog *AuthDialog); +}; + +#endif // AUTH_DIALOG_H diff --git a/client/internal/gui/include/EntryWindow.h b/client/internal/gui/include/EntryWindow.h new file mode 100644 index 0000000000000000000000000000000000000000..b7acbd03f377480ea5a6e8ee6c1780e4fc87ce1a --- /dev/null +++ b/client/internal/gui/include/EntryWindow.h @@ -0,0 +1,45 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include + +#include "AuthDialog.h" +#include "SignUpDialog.h" + +class EntryWindow : public QMainWindow { +Q_OBJECT + +public: + EntryWindow(QWidget *parent = nullptr); + ~EntryWindow() override; + + std::shared_ptr getSignUpDialog(); + std::shared_ptr getAuthDialog(); + +private slots: + static void onExitButtonClicked(); + void onLoginButtonClicked(); + void onSignUpButtonClicked(); + +private: + std::shared_ptr authDialog = nullptr; + std::shared_ptr signUpDialog = nullptr; + QWidget *centralwidget = nullptr; + QVBoxLayout *verticalLayout = nullptr; + QLabel *introLabel = nullptr; + QPushButton *loginButton = nullptr; + QSpacerItem *horizontalSpacer = nullptr; + QPushButton *signUpButton = nullptr; + QSpacerItem *horizontalSpacer_2 = nullptr; + QPushButton *exitButton = nullptr; + QMenuBar *menubar = nullptr; + QStatusBar *statusbar = nullptr; + + void setupUi(QMainWindow *MainWindow); + void retranslateUi(QMainWindow *MainWindow); +}; + +#endif // MAINWINDOW_H diff --git a/client/internal/gui/include/SignUpDialog.h b/client/internal/gui/include/SignUpDialog.h new file mode 100644 index 0000000000000000000000000000000000000000..2882b2435c625dd4f9a1647bc3a286c838417958 --- /dev/null +++ b/client/internal/gui/include/SignUpDialog.h @@ -0,0 +1,46 @@ +#ifndef SIGN_UP_DIALOG_H +#define SIGN_UP_DIALOG_H + +#include +#include +#include +#include +#include + +class SignUpDialog : public QDialog { +Q_OBJECT + +public: + explicit SignUpDialog(QWidget *parent = nullptr); + ~SignUpDialog() override; + +signals: + void showEntryWindow(); + void showUserWindow(); + +private slots: + void on_signUpButton_clicked() {}; + void on_backButton_clicked() {}; + +private: + QGroupBox *groupBox = nullptr; + QWidget *layoutWidget = nullptr; + QVBoxLayout *verticalLayout_2 = nullptr; + QVBoxLayout *verticalLayout = nullptr; + QGridLayout *gridLayout = nullptr; + QLabel *enterLoginLabel = nullptr; + QLineEdit *login = nullptr; + QGridLayout *gridLayout_2 = nullptr; + QLineEdit *pass = nullptr; + QLabel *enterPasswordLabel = nullptr; + QHBoxLayout *horizontalLayout_3 = nullptr; + QLabel *repeatPasswordLabel = nullptr; + QLineEdit *passRepeat = nullptr; + QPushButton *signUpButton = nullptr; + QPushButton *backButton = nullptr; + + void setupUi(QDialog *SignUpDialog); + void retranslateUi(QDialog *SignUpDialog); +}; + +#endif // SIGN_UP_DIALOG_H diff --git a/client/internal/gui/include/StatsDialog.h b/client/internal/gui/include/StatsDialog.h new file mode 100644 index 0000000000000000000000000000000000000000..8a1003884348fd502f5e68115ba6529bb5080c61 --- /dev/null +++ b/client/internal/gui/include/StatsDialog.h @@ -0,0 +1,25 @@ +// +// Created by Николай Степанов on 04.05.2023. +// + +#ifndef SOURCEDOUT_STATSDIALOG_H +#define SOURCEDOUT_STATSDIALOG_H + +#include +#include +#include "Metric.h" + +class StatsDialog : public QDialog { + Q_OBJECT + +public: + explicit StatsDialog(QWidget *parent = nullptr) {}; + ~StatsDialog() override {}; + +private: + QTableView* tableView = nullptr; + QTableWidget* tableWidget = nullptr; + QVector metrics; +}; + +#endif //SOURCEDOUT_STATSDIALOG_H diff --git a/client/internal/gui/include/UIManager.h b/client/internal/gui/include/UIManager.h new file mode 100644 index 0000000000000000000000000000000000000000..3d030f2c6991f4f4753b77fc1c75e85950cace47 --- /dev/null +++ b/client/internal/gui/include/UIManager.h @@ -0,0 +1,21 @@ +#ifndef INCLUDE_UIMANAGER_H_ +#define INCLUDE_UIMANAGER_H_ + +#include "EntryWindow.h" +#include "UserWindow.h" + +class UIManager { +public: + UIManager(); + + ~UIManager() = default; + + void showEntryWindow(); + void showUserWindow(); + +private: + EntryWindow entryWindow; + UserWindow userWindow; +}; + +#endif // INCLUDE_UIMANAGER_H_ diff --git a/client/internal/gui/include/UserWindow.h b/client/internal/gui/include/UserWindow.h new file mode 100644 index 0000000000000000000000000000000000000000..859d69e24061c377ecca787fa9ea60aba3140e65 --- /dev/null +++ b/client/internal/gui/include/UserWindow.h @@ -0,0 +1,46 @@ +#ifndef USERWINDOW_H +#define USERWINDOW_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "StatsDialog.h" + +class UserWindow : public QMainWindow { +Q_OBJECT + +public: + explicit UserWindow(QWidget *parent = nullptr); + ~UserWindow() override = default; + +signals: + void logout(); + +private slots: + void onBackButtonClicked(); + void onListElementClicked(); + void onSendButtonClicked(); + +private: + + QTabWidget* tabs = nullptr; + StatsDialog* statsDialog = nullptr; + QPushButton *backButton = nullptr; + QPushButton *sendButton = nullptr; + QComboBox* comboBox = nullptr; + QVBoxLayout* verticalLayout = nullptr; + QLabel* label = nullptr; + QLabel* description = nullptr; + QFileDialog* fileDialog = nullptr; + QStringList* list = nullptr; + + QWidget *centralwidget = nullptr; +}; + +#endif // USERWINDOW_H diff --git a/client/internal/gui/src/AuthDialog.cpp b/client/internal/gui/src/AuthDialog.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0e57d4d04b2200acd868813075f4627e4351d8d4 --- /dev/null +++ b/client/internal/gui/src/AuthDialog.cpp @@ -0,0 +1,15 @@ +#include "AuthDialog.h" + +AuthDialog::AuthDialog(QWidget *parent) : QDialog(parent) { + setupUi(this); +} + +AuthDialog::~AuthDialog() {} + +void AuthDialog::on_loginButton_clicked() {} + +void AuthDialog::setupUi(QDialog *AuthDialog) {} + +void AuthDialog::setTexts(QDialog *AuthDialog) {} + +void AuthDialog::on_backButton_clicked() {} diff --git a/client/internal/gui/src/EntryWindow.cpp b/client/internal/gui/src/EntryWindow.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8bf9bc37491f5018246c71cad4cacdaee138ead3 --- /dev/null +++ b/client/internal/gui/src/EntryWindow.cpp @@ -0,0 +1,27 @@ +#include "EntryWindow.h" + +#include +#include +#include +#include +#include "AuthDialog.h" +#include "SignUpDialog.h" + +EntryWindow::EntryWindow(QWidget *parent) : QMainWindow(parent) {} + +EntryWindow::~EntryWindow() {} + +void EntryWindow::setupUi(QMainWindow *MainWindow) {} + +void EntryWindow::retranslateUi(QMainWindow *MainWindow) {} + +void EntryWindow::onExitButtonClicked() {} + +void EntryWindow::onLoginButtonClicked() {} + + +void EntryWindow::onSignUpButtonClicked() {} + +std::shared_ptr EntryWindow::getSignUpDialog() {} + +std::shared_ptr EntryWindow::getAuthDialog() {} diff --git a/client/internal/gui/src/SignUpDialog.cpp b/client/internal/gui/src/SignUpDialog.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8750c806df0b9aa120aecf219461200db6f5530a --- /dev/null +++ b/client/internal/gui/src/SignUpDialog.cpp @@ -0,0 +1,17 @@ +#include "SignUpDialog.h" + +#include +#include +#include + +//#include "Core.h" + +SignUpDialog::SignUpDialog(QWidget *parent) : QDialog(parent) {} + +SignUpDialog::~SignUpDialog() {} + +void SignUpDialog::retranslateUi(QDialog *SignUpDialog) {} + +void SignUpDialog::setupUi(QDialog *SignUpDialog) {} + +// setupUi diff --git a/client/internal/gui/src/UIManager.cpp b/client/internal/gui/src/UIManager.cpp new file mode 100644 index 0000000000000000000000000000000000000000..fc2330143ca373ec1910642700adef2f3b14167e --- /dev/null +++ b/client/internal/gui/src/UIManager.cpp @@ -0,0 +1,11 @@ +#include "UIManager.h" + +#include "EntryWindow.h" +#include "UserWindow.h" +#include "SignUpDialog.h" + +void UIManager::showEntryWindow() {} + +void UIManager::showUserWindow() {} + +UIManager::UIManager() = default; diff --git a/client/internal/gui/src/UserWindow.cpp b/client/internal/gui/src/UserWindow.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8e6169bd3260d65e4b001e5bf9b8368dcf3d01e2 --- /dev/null +++ b/client/internal/gui/src/UserWindow.cpp @@ -0,0 +1,9 @@ +#include "UserWindow.h" + +#include +#include +#include + +UserWindow::UserWindow(QWidget *parent) : QMainWindow(parent) {} + +void UserWindow::onBackButtonClicked() {} diff --git a/client/internal/gui/tests/CMakeLists.txt b/client/internal/gui/tests/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..5877dc8f3540e9e3e1ab3fba04817c5a58af3ecb --- /dev/null +++ b/client/internal/gui/tests/CMakeLists.txt @@ -0,0 +1,16 @@ +project(test_gui) + +set(CMAKE_CXX_STANDARD 20) +add_compile_options(-coverage) + +file(GLOB SOURCES *.cpp) + +enable_testing() +find_package(GTest REQUIRED) + +add_executable(${PROJECT_NAME} ${SOURCES}) + +target_link_libraries(${PROJECT_NAME} ${GUI_lib_LIB} GTest::GTest GTest::gmock) +target_include_directories(${PROJECT_NAME} PUBLIC ${GUI_lib_INCLUDE_DIRS}) + +add_test(test_gui test_gui) \ No newline at end of file diff --git a/client/internal/gui/tests/main.cpp b/client/internal/gui/tests/main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d9f4b73ba0af8a968672a3ae17deee33d70f8b2e --- /dev/null +++ b/client/internal/gui/tests/main.cpp @@ -0,0 +1,52 @@ +#include +#include + +#include "UIManager.h" +#include "EntryWindow.h" +#include "UserWindow.h" + +#include + +TEST(ConstructorTest, EntryWindow) { + int fake = 0; + QApplication a(fake, nullptr); + EntryWindow mw; + EXPECT_NO_FATAL_FAILURE(mw.show()); + a.exec(); +} + +TEST(ConstructorTest, UserWindow) { + int fake = 0; + QApplication a(fake, nullptr); + UserWindow uw; + EXPECT_NO_FATAL_FAILURE(uw.show()); + a.exec(); +} + +TEST(ConstructorTest, UIManagerMW) { + int fake_argc = 0; + QApplication a(fake_argc, nullptr); + UIManager um; + EXPECT_NO_FATAL_FAILURE(um.showEntryWindow()); + a.exec(); +} + +TEST(ConstructorTest, UIManagerUW) { + int fake_argc = 0; + QApplication a(fake_argc, nullptr); + UIManager um; + EXPECT_NO_FATAL_FAILURE(um.showUserWindow()); + a.exec(); +} + +TEST(ConstructorTest, MainWindow_AuthDialog) { + int fake_argc = 0; + QApplication a(fake_argc, nullptr); + EntryWindow mainWindow; + EXPECT_NO_FATAL_FAILURE(mainWindow.getAuthDialog()->show()); +} + +int main(int argc, char *argv[]) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +}