Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@ set(CMAKE_CXX_STANDARD 20)
file(GLOB_RECURSE HEADER_FILES project/include/*.h)
file(GLOB_RECURSE SOURCE_FILES project/src/*.cpp)

add_subdirectory(project/client)

add_executable(main ${HEADER_FILES} ${SOURCE_FILES})
Binary file added brush.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
59 changes: 59 additions & 0 deletions project/client/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

find_package(Qt5 COMPONENTS
Core
Gui
Widgets
REQUIRED)

find_package(Boost 1.40.0 REQUIRED system)
find_package(Boost COMPONENTS log log_setup REQUIRED)
link_directories(${Boost_LIBRARY_DIR})

find_package(nlohmann_json 3.2.0 REQUIRED)

set(WITH_SANITIZER ON)
if (WITH_SANITIZER)
add_compile_options(-fsanitize=address)
add_link_options(-fsanitize=address)
endif ()


set(SOURCES src/MainWindow.cpp src/PaintScene.cpp src/Palette.cpp src/Changer.cpp
src/ToolsPanel.cpp src/ParametersPanel.cpp src/Brush.cpp src/Canvas.cpp
src/Connector.cpp src/ServerConnection.cpp)
set(HEADER_FILES include/Palette.h include/MainWindow.h include/PaintScene.h include/Changer.h
include/ToolsPanel.h include/ParametersPanel.h include/Brush.h include/Canvas.h
include/Connector.h include/ServerConnection.h ${Boost_INCLUDE_DIR})

#include_directories(include ${Boost_INCLUDE_DIR})
#aux_source_directory(src SRC)

add_executable(client src/main.cpp ${SOURCES} ${HEADER_FILES})
target_link_libraries(client
Qt5::Core
Qt5::Gui
Qt5::Widgets
boost_thread
pthread
${BOOST_LIBRARIES}
nlohmann_json::nlohmann_json
)

target_include_directories(client PUBLIC include)

#add_executable(test src/main_window_test.cpp ${SOURCES} ${HEADER_FILES})
#find_package(GTest)

#target_link_libraries(test PRIVATE
# GTest::Main
# Qt5::Core
# Qt5::Gui
# Qt5::Widgets
# )

#add_test(NAME test COMMAND test)
#target_include_directories(test PUBLIC include)

28 changes: 28 additions & 0 deletions project/client/include/Brush.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
//
// Created by eremey on 27.11.2021.
//
#pragma once
#include <QAction>

class Brush : public QAction {
Q_OBJECT

public:
explicit Brush(qreal brushSize = 10, const QColor& brushColor = Qt::red, QWidget *parent = nullptr);
~Brush() = default;

signals:
void BrushTriggered(qreal brushSize, const QColor& brushColor);

public slots:
void SetSizeSlot(int value);
void SetRedSlot(int value);
void SetGreenSlot(int value);
void SetBlueSlot(int value);
void SetOpacitySlot(int value);
private slots:
void BrushTriggeredSlot();
private:
qreal brushSize;
QColor brushColor;
};
29 changes: 29 additions & 0 deletions project/client/include/Canvas.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
//
// Created by eremey on 01.12.2021.
//
#pragma once
#include <QLabel>
#include <QPixmap>
#include <QColor>
#include<QGraphicsView>

class Canvas : public QGraphicsView
{
Q_OBJECT

public:
explicit Canvas(QWidget *parent = 0);
~Canvas() = default;

public slots:
void openImageSlot();
void saveImageSlot();
void saveAsImageSlot();
void closeImageSlot();


private:
QString filePath = nullptr;

size_t default_width;
};
31 changes: 31 additions & 0 deletions project/client/include/Changer.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
//
// Created by eremey on 16.11.2021.
//
#pragma once
#include <QToolBar>

#include <QSpinBox>
#include <QSlider>

class Changer : public QToolBar
{
Q_OBJECT

public:
explicit Changer(QString name = "", int value = 30, int max_value = 255, QWidget *parent = 0);
~Changer() = default;

private:
int _value;

QSpinBox *spin_box;
QSlider *slider;

public:

signals:
void valueChanged(int value);

private slots:
void valueChangedSlot(int value);
};
50 changes: 50 additions & 0 deletions project/client/include/Connector.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
//
// Created by eremey on 08.12.2021.
//
#pragma once
#include <QToolBar>
#include <QPushButton>
#include <QLabel>

class Connector : public QToolBar {
Q_OBJECT

public:
explicit Connector(QWidget *parent = nullptr);
~Connector();

signals:
void writeSignal(std::string& message);

public slots:
void failedShareSlot();
void successfulShareSlot(std::string& message);

void failedConnectSlot();
void successfulConnectSlot(std::string& message);

private:
QPushButton* connectButton;
QPushButton* shareButton;
QPushButton* canselButton;
//QLabel* message;

std::string address = "";
std::string token = "";

signals:
void initSignal();
// void shareSignal();
// void connectSignal();
private slots:
void initSlot();
void connectSlot();

void writeConnectionSlot();
void writeShareSlot();


void addressChangedSlot(const QString &text);
void tokenChangedSlot(const QString &text);

};
68 changes: 68 additions & 0 deletions project/client/include/MainWindow.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#pragma once
#include <QWidget>
#include <QTimer>
#include <QResizeEvent>
#include <QMainWindow>
#include <QPushButton>

#include "PaintScene.h"
#include "ToolsPanel.h"
#include "ParametersPanel.h"
#include "Canvas.h"

#include "ServerConnection.h"

#include "Connector.h"


class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private:
PaintScene *scene;
Canvas* canvas;

QToolBar *parameters_panel;

ToolsPanel *toolsPanel;

ParametersPanel *parametersPanel;

Connector *connector;

QTimer *timer;

std::unique_ptr<ServerConnection> serverConnection_;
std::unique_ptr<ServerConnection> forDocumentConnection_;

signals:
void failedShareSignal();
void successfulShareSignal(std::string& message);

void failedConnectSignal();
void successfulConnectSignal(std::string& message);

void addCurve(std::string& message);

private:
long temporary_read_position = 0;

private slots:
void slotBrush(qreal brushSize = 10, const QColor& brushColor = Qt::red);
void slotTimer();

// void

public slots:
void writeSlot(std::string& message);


public:
void execute(std::string&& message);
//void executeBrush(const Curve& curve);
};
70 changes: 70 additions & 0 deletions project/client/include/PaintScene.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#pragma once

#include <QGraphicsScene>
#include <QGraphicsScene>
#include <QGraphicsSceneMouseEvent>
#include <QTimer>
#include <QDebug>
#include <QColor>

struct Point {
int32_t i = 0;
int32_t j = 0;
};

struct Curve {
int32_t brush_size = 0;
int32_t color_red = 0;
int32_t color_green = 0;
int32_t color_blue = 0;
int32_t opacity = 0;

std::vector<QPointF> coords;
};

class PaintScene : public QGraphicsScene
{

Q_OBJECT

public:
explicit PaintScene(QObject *parent = 0);
~PaintScene() = default;

void ChangeBrushStatus();
bool BrushStatus();
void SetBrushSize(qreal brush_size = 10);
void SetBrush(qreal brushSize = 10, const QColor& brushColor = Qt::red);

signals:
// void PushCurve(const Curve& curve);
void writeCurveSignal(std::string& curve);

public slots:
void SetBrushSizeSlot(int size);
void SetTransparencySlot(int transparency);
void SetRedSlot(int transparency);
void SetGreenSlot(int transparency);
void SetBlueSlot(int transparency);

// void PaintCurveSlot(const Curve& curve);

void readCurveSlot(std::string& message);

private:
bool is_brush = false;

QPoint previous_point;

std::vector<QPoint> curve;

int32_t brush_size = 10;

QColor brush_color;

private:
void mousePressEvent(QGraphicsSceneMouseEvent * event);
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);

};
32 changes: 32 additions & 0 deletions project/client/include/Palette.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
//
// Created by eremey on 16.11.2021.
//
#pragma once
#include <QLabel>
#include <QPixmap>
#include <QColor>

class Palette : public QLabel
{
Q_OBJECT

public:
explicit Palette(QWidget *parent = 0);
~Palette() = default;

void SetColor(int red, int green, int blue, int opacity = 255);

//void SetGreen(int value);
private:
QColor color;
//QPixmap *pixmap;

public slots:
void SetRed(int value);
void SetGreen(int value);
void SetBlue(int value);

private slots:
//void slotTimer();
//void slotBrush();
};
Loading