From a9c7952f5cfc440db0df3cc5dd4d16a394de533a Mon Sep 17 00:00:00 2001 From: 2ndbeam <2ndbeam@disroot.org> Date: Fri, 27 Jun 2025 14:11:44 +0300 Subject: [PATCH] Basic classes and window layout --- .gitignore | 82 +++++++++ LinesGridEditor.pro | 28 +++ gridpreview.cpp | 34 ++++ gridpreview.h | 23 +++ line.cpp | 50 ++++++ line.h | 24 +++ main.cpp | 11 ++ mainwindow.cpp | 14 ++ mainwindow.h | 23 +++ mainwindow.ui | 417 ++++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 706 insertions(+) create mode 100644 .gitignore create mode 100644 LinesGridEditor.pro create mode 100644 gridpreview.cpp create mode 100644 gridpreview.h create mode 100644 line.cpp create mode 100644 line.h create mode 100644 main.cpp create mode 100644 mainwindow.cpp create mode 100644 mainwindow.h create mode 100644 mainwindow.ui diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa3808c --- /dev/null +++ b/.gitignore @@ -0,0 +1,82 @@ +# This file is used to ignore files which are generated +# ---------------------------------------------------------------------------- + +*~ +*.autosave +*.a +*.core +*.moc +*.o +*.obj +*.orig +*.rej +*.so +*.so.* +*_pch.h.cpp +*_resource.rc +*.qm +.#* +*.*# +core +!core/ +tags +.DS_Store +.directory +*.debug +Makefile* +*.prl +*.app +moc_*.cpp +ui_*.h +qrc_*.cpp +Thumbs.db +*.res +*.rc +/.qmake.cache +/.qmake.stash + +# qtcreator generated files +*.pro.user* +*.qbs.user* +CMakeLists.txt.user* + +# xemacs temporary files +*.flc + +# Vim temporary files +.*.swp + +# Visual Studio generated files +*.ib_pdb_index +*.idb +*.ilk +*.pdb +*.sln +*.suo +*.vcproj +*vcproj.*.*.user +*.ncb +*.sdf +*.opensdf +*.vcxproj +*vcxproj.* + +# MinGW generated files +*.Debug +*.Release + +# Python byte code +*.pyc + +# Binaries +# -------- +*.dll +*.exe + +# Directories with generated files +.moc/ +.obj/ +.pch/ +.rcc/ +.uic/ +/build*/ diff --git a/LinesGridEditor.pro b/LinesGridEditor.pro new file mode 100644 index 0000000..ce9a9ac --- /dev/null +++ b/LinesGridEditor.pro @@ -0,0 +1,28 @@ +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +CONFIG += c++17 + +# You can make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +SOURCES += \ + gridpreview.cpp \ + line.cpp \ + main.cpp \ + mainwindow.cpp + +HEADERS += \ + gridpreview.h \ + line.h \ + mainwindow.h + +FORMS += \ + mainwindow.ui + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target diff --git a/gridpreview.cpp b/gridpreview.cpp new file mode 100644 index 0000000..1227fe6 --- /dev/null +++ b/gridpreview.cpp @@ -0,0 +1,34 @@ +#include "gridpreview.h" + +GridPreview::GridPreview(QWidget *parent) + : QWidget{parent} +{} + +void GridPreview::setSize(int newWidth, int newHeight) +{ + width = newWidth; + height = newHeight; +} + +void GridPreview::addLine(Line &line) +{ + lines.push_back(line); +} + +void GridPreview::removeLine(int index) +{ + lines.removeAt(index); +} + +QString GridPreview::toLuaTable() +{ + QString output(tableTemplate.arg(width).arg(height)); + QString linesSubTable = ""; + for(auto iter = lines.begin(); iter != lines.end(); iter++ ) + { + linesSubTable += QString(" %1,\n").arg(iter->toLuaTable()); + } + linesSubTable.removeLast(); // \n + linesSubTable.removeLast(); // , + return output.arg(linesSubTable); +} diff --git a/gridpreview.h b/gridpreview.h new file mode 100644 index 0000000..0a1e92f --- /dev/null +++ b/gridpreview.h @@ -0,0 +1,23 @@ +#ifndef GRIDPREVIEW_H +#define GRIDPREVIEW_H + +#include +#include "line.h" + +class GridPreview : public QWidget +{ + Q_OBJECT +public: + explicit GridPreview(QWidget *parent = nullptr); + void setSize(int newWidth, int newHeight); + void addLine(Line &line); + void removeLine(int index); + QString toLuaTable(); +private: + int width = 5, height = 5; + QVector lines {}; + const QString tableTemplate = "return {\n width = %1,\n height = %2,\n lines = {\n%3\n }\n}"; +signals: +}; + +#endif // GRIDPREVIEW_H diff --git a/line.cpp b/line.cpp new file mode 100644 index 0000000..c62eda2 --- /dev/null +++ b/line.cpp @@ -0,0 +1,50 @@ +#include "line.h" + +Line::Line() {} + +void Line::setStartPoint(int x, int y) +{ + startX = x; + startY = y; +} + +void Line::setEndPoint(int x, int y) +{ + endX = x; + endY = y; +} + +void Line::setColor(QString newColor) +{ + color = newColor; +} + +int Line::getStartX() +{ + return startX; +} + +int Line::getStartY() +{ + return startY; +} + +int Line::getEndX() +{ + return endX; +} + +int Line::getEndY() +{ + return endY; +} + +QString Line::getColor() +{ + return color; +} + +QString Line::toLuaTable() +{ + return QString("{ %1, %2, %3, %4, \"%5\" }").arg(startX).arg(startY).arg(endX).arg(endY).arg(color); +} diff --git a/line.h b/line.h new file mode 100644 index 0000000..23ee306 --- /dev/null +++ b/line.h @@ -0,0 +1,24 @@ +#ifndef LINE_H +#define LINE_H + +#include + +class Line +{ +public: + Line(); + void setStartPoint(int x, int y); + void setEndPoint(int x, int y); + void setColor(QString color); + int getStartX(); + int getStartY(); + int getEndX(); + int getEndY(); + QString getColor(); + QString toLuaTable(); +private: + int startX, startY, endX, endY; + QString color; +}; + +#endif // LINE_H diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..fd3e533 --- /dev/null +++ b/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + return a.exec(); +} diff --git a/mainwindow.cpp b/mainwindow.cpp new file mode 100644 index 0000000..2740a6e --- /dev/null +++ b/mainwindow.cpp @@ -0,0 +1,14 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , ui(new Ui::MainWindow) +{ + ui->setupUi(this); +} + +MainWindow::~MainWindow() +{ + delete ui; +} diff --git a/mainwindow.h b/mainwindow.h new file mode 100644 index 0000000..f7a3da3 --- /dev/null +++ b/mainwindow.h @@ -0,0 +1,23 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +QT_BEGIN_NAMESPACE +namespace Ui { +class MainWindow; +} +QT_END_NAMESPACE + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +private: + Ui::MainWindow *ui; +}; +#endif // MAINWINDOW_H diff --git a/mainwindow.ui b/mainwindow.ui new file mode 100644 index 0000000..df7308c --- /dev/null +++ b/mainwindow.ui @@ -0,0 +1,417 @@ + + + MainWindow + + + + 0 + 0 + 1280 + 720 + + + + + 800 + 600 + + + + + MesloLGS Nerd Font + 12 + + + + MainWindow + + + + + + + + + + + false + + + QDockWidget::DockWidgetFeature::DockWidgetMovable + + + Qt::DockWidgetArea::AllDockWidgetAreas + + + Output Preview + + + 1 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Sunken + + + 2 + + + 0 + + + + 6 + + + 6 + + + 6 + + + 6 + + + 6 + + + + + + + + + + Save + + + + + + + Clear + + + + + + + + + + + + + + QDockWidget::DockWidgetFeature::DockWidgetMovable + + + Editor + + + 2 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Sunken + + + 2 + + + + + + + + + + 1 + + + + + + + Color: + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + + 0 + 0 + + + + Grid W: + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + 1 + + + 99 + + + + + + + 1 + + + + + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + 2 + + + + + + + + 0 + 0 + + + + Y: + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + End point X: + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + 2 + + + + + + + + + + + 0 + 0 + + + + Y: + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + + 0 + 0 + + + + H: + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + + + + + Start point X: + + + Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter + + + 0 + + + -1 + + + + + + + 1 + + + + + + + + 0 + 0 + + + + Current Line + + + Qt::AlignmentFlag::AlignBottom|Qt::AlignmentFlag::AlignHCenter + + + + + + + + 0 + 0 + + + + + MesloLGS Nerd Font + 12 + + + + Grid + + + Qt::AlignmentFlag::AlignBottom|Qt::AlignmentFlag::AlignHCenter + + + + + + + + + + + + + + 0 + 0 + + + + Line Selector + + + Qt::AlignmentFlag::AlignBottom|Qt::AlignmentFlag::AlignHCenter + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + + GridPreview + QWidget +
gridpreview.h
+ 1 +
+
+ + +