From 9404042b39d2194f23bdbbf396fc166814268ddd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B9=20=D0=A1=D1=82?= =?UTF-8?q?=D0=B5=D0=BF=D0=B0=D0=BD=D0=BE=D0=B2?= Date: Thu, 4 May 2023 09:14:37 +0300 Subject: [PATCH] Add skeleton for gui library --- client/internal/CMakeLists.txt | 6 ++- client/internal/gui/CMakeLists.txt | 24 ++++++++++ client/internal/gui/include/AuthDialog.h | 43 ++++++++++++++++++ client/internal/gui/include/EntryWindow.h | 45 +++++++++++++++++++ client/internal/gui/include/SignUpDialog.h | 46 +++++++++++++++++++ client/internal/gui/include/StatsDialog.h | 25 +++++++++++ client/internal/gui/include/UIManager.h | 21 +++++++++ client/internal/gui/include/UserWindow.h | 46 +++++++++++++++++++ client/internal/gui/src/AuthDialog.cpp | 15 +++++++ client/internal/gui/src/EntryWindow.cpp | 27 +++++++++++ client/internal/gui/src/SignUpDialog.cpp | 17 +++++++ client/internal/gui/src/UIManager.cpp | 11 +++++ client/internal/gui/src/UserWindow.cpp | 9 ++++ client/internal/gui/tests/CMakeLists.txt | 16 +++++++ client/internal/gui/tests/main.cpp | 52 ++++++++++++++++++++++ 15 files changed, 402 insertions(+), 1 deletion(-) create mode 100644 client/internal/gui/CMakeLists.txt create mode 100644 client/internal/gui/include/AuthDialog.h create mode 100644 client/internal/gui/include/EntryWindow.h create mode 100644 client/internal/gui/include/SignUpDialog.h create mode 100644 client/internal/gui/include/StatsDialog.h create mode 100644 client/internal/gui/include/UIManager.h create mode 100644 client/internal/gui/include/UserWindow.h create mode 100644 client/internal/gui/src/AuthDialog.cpp create mode 100644 client/internal/gui/src/EntryWindow.cpp create mode 100644 client/internal/gui/src/SignUpDialog.cpp create mode 100644 client/internal/gui/src/UIManager.cpp create mode 100644 client/internal/gui/src/UserWindow.cpp create mode 100644 client/internal/gui/tests/CMakeLists.txt create mode 100644 client/internal/gui/tests/main.cpp diff --git a/client/internal/CMakeLists.txt b/client/internal/CMakeLists.txt index 93fbed8..f76cc95 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 0000000..60da13c --- /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 0000000..76b3f9b --- /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 0000000..b7acbd0 --- /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 0000000..2882b24 --- /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 0000000..8a10038 --- /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 0000000..3d030f2 --- /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 0000000..859d69e --- /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 0000000..0e57d4d --- /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 0000000..8bf9bc3 --- /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 0000000..8750c80 --- /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 0000000..fc23301 --- /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 0000000..8e6169b --- /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 0000000..5877dc8 --- /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 0000000..d9f4b73 --- /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(); +} -- GitLab