From b400e932ce310e856a5fcbc49ecce522c9cad1b3 Mon Sep 17 00:00:00 2001 From: Siddarth-Suresh <65844402+Siddarth-Suresh@users.noreply.github.com> Date: Sun, 23 Mar 2025 20:27:31 -0400 Subject: Initial GUI Commit --- CMakeLists.txt | 30 +++++++++++++++++++++++++ README.md | 1 + inc/cache.h | 1 + inc/dram.h | 1 + src/gui/GUI.cc | 39 ++++++++++++++++++++++++++++++++ src/gui/GUI.h | 27 ++++++++++++++++++++++ src/gui/GUI.ui | 55 +++++++++++++++++++++++++++++++++++++++++++++ src/gui/gui.py | 0 src/gui/main.cc | 11 +++++++++ src/gui/resources.qrc | 5 +++++ src/gui/resources/input.txt | 1 + 11 files changed, 171 insertions(+) create mode 100644 src/gui/GUI.cc create mode 100644 src/gui/GUI.h create mode 100644 src/gui/GUI.ui delete mode 100644 src/gui/gui.py create mode 100644 src/gui/main.cc create mode 100644 src/gui/resources.qrc create mode 100644 src/gui/resources/input.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a48922..64cd30d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,12 @@ include_directories( # gather source files file(GLOB_RECURSE SRCS "src/*.cc") list(REMOVE_ITEM SRCS "${CMAKE_CURRENT_SOURCE_DIR}/src/main.cc") +#exclude gui files from cli executable +foreach(file ${SRCS}) + if(file MATCHES "${CMAKE_CURRENT_SOURCE_DIR}/src/gui/.*") + list(REMOVE_ITEM SRCS ${file}) + endif() +endforeach() # find python3 components find_package(Python3 COMPONENTS Development REQUIRED) @@ -41,3 +47,27 @@ target_link_libraries(tests PRIVATE Catch2::Catch2WithMain PRIVATE Python3::Pyth include(CTest) include(Catch) catch_discover_tests(tests) + +# ================================ +# Qt6 GUI Integration +# ================================ +cmake_minimum_required(VERSION 3.16) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +# Find Qt6 Components +find_package(Qt6 REQUIRED COMPONENTS Widgets) + + +# Gather GUI Source Files +file(GLOB_RECURSE GUI_SRCS "src/gui/*.cc") + +# Gather GUI Resources +qt_add_resources(GUI_RESOURCES "src/gui/resources.qrc") + +# GUI executable +qt_add_executable("${PROJECT_NAME}_gui" ${GUI_SRCS} ${SRCS} ${GUI_RESOURCES}) +target_link_libraries("${PROJECT_NAME}_gui" PRIVATE Qt6::Widgets) + diff --git a/README.md b/README.md index 34ae8af..bdfd76e 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ - g++ (GCC) 11.4.0 - python 3.10 or newer - catch2 version 3.5.3 +- Qt version 6.8.2 ## to compile Generate the build directory with diff --git a/inc/cache.h b/inc/cache.h index ef9c9e4..88fd352 100644 --- a/inc/cache.h +++ b/inc/cache.h @@ -4,6 +4,7 @@ #include "storage.h" #include #include +#include class Cache : public Storage { diff --git a/inc/dram.h b/inc/dram.h index f4d175e..0799015 100644 --- a/inc/dram.h +++ b/inc/dram.h @@ -3,6 +3,7 @@ #include "definitions.h" #include "storage.h" #include +#include class Dram : public Storage { diff --git a/src/gui/GUI.cc b/src/gui/GUI.cc new file mode 100644 index 0000000..5577e6e --- /dev/null +++ b/src/gui/GUI.cc @@ -0,0 +1,39 @@ +#include "GUI.h" +#include "./ui_GUI.h" +#include +#include + +GUI::GUI(QWidget *parent) + : QWidget(parent) + , ui(new Ui::GUI) +{ + ui->setupUi(this); + loadTxtFile(); +} + +GUI::~GUI() +{ + delete ui; +} + +void GUI::loadTxtFile(){ + QFile inputFile(":/resources/input.txt"); + inputFile.open(QIODevice::ReadOnly); + + QTextStream in(&inputFile); + QString line = in.readAll(); + inputFile.close(); + + ui->textEdit->setPlainText(line); + QTextCursor cursor = ui->textEdit->textCursor(); + cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor, 1); +} + +void GUI::on_pushButton_clicked() +{ + QString searchString = ui->lineEdit->text(); + ui->textEdit->find(searchString, QTextDocument::FindWholeWords); +} + + + diff --git a/src/gui/GUI.h b/src/gui/GUI.h new file mode 100644 index 0000000..b06f310 --- /dev/null +++ b/src/gui/GUI.h @@ -0,0 +1,27 @@ +#ifndef GUI_H +#define GUI_H + +#include + +QT_BEGIN_NAMESPACE +namespace Ui { +class GUI; +} +QT_END_NAMESPACE + +class GUI : public QWidget +{ + Q_OBJECT + +public: + GUI(QWidget *parent = nullptr); + ~GUI(); + +private slots: + void on_pushButton_clicked(); + +private: + Ui::GUI *ui; + void loadTxtFile(); +}; +#endif // GUI_H diff --git a/src/gui/GUI.ui b/src/gui/GUI.ui new file mode 100644 index 0000000..bce52c2 --- /dev/null +++ b/src/gui/GUI.ui @@ -0,0 +1,55 @@ + + + GUI + + + + 0 + 0 + 800 + 600 + + + + GUI + + + + + 60 + 30 + 317 + 232 + + + + + + + + + keyword + + + + + + + + + + find + + + + + + + + + + + + + + diff --git a/src/gui/gui.py b/src/gui/gui.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/gui/main.cc b/src/gui/main.cc new file mode 100644 index 0000000..e592da9 --- /dev/null +++ b/src/gui/main.cc @@ -0,0 +1,11 @@ +#include "GUI.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + GUI w; + w.show(); + return a.exec(); +} diff --git a/src/gui/resources.qrc b/src/gui/resources.qrc new file mode 100644 index 0000000..44aaefa --- /dev/null +++ b/src/gui/resources.qrc @@ -0,0 +1,5 @@ + + + resources/input.txt + + diff --git a/src/gui/resources/input.txt b/src/gui/resources/input.txt new file mode 100644 index 0000000..fc1c3cf --- /dev/null +++ b/src/gui/resources/input.txt @@ -0,0 +1 @@ +Lorem Ipsum \ No newline at end of file -- cgit v1.2.3