From 895b5ddd6fe4db906720ecbf0de0cab5acdb35ec Mon Sep 17 00:00:00 2001 From: bd Date: Mon, 24 Mar 2025 12:17:41 -0400 Subject: Added gui folder with its own CMake to house GUI+main.cc --- gui/CMakeLists.txt | 30 +++++++++++++++++ gui/gui.cc | 39 ++++++++++++++++++++++ gui/gui.h | 26 +++++++++++++++ gui/gui.ui | 55 ++++++++++++++++++++++++++++++ gui/main.cc | 89 +++++++++++++++++++++++++++++++++++++++++++++++++ gui/resources.qrc | 6 ++++ gui/resources/input.txt | 1 + 7 files changed, 246 insertions(+) create mode 100644 gui/CMakeLists.txt create mode 100644 gui/gui.cc create mode 100644 gui/gui.h create mode 100644 gui/gui.ui create mode 100644 gui/main.cc create mode 100644 gui/resources.qrc create mode 100644 gui/resources/input.txt (limited to 'gui') diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt new file mode 100644 index 0000000..6b5eb22 --- /dev/null +++ b/gui/CMakeLists.txt @@ -0,0 +1,30 @@ +cmake_minimum_required(VERSION 3.5) +set(CMAKE_CXX_COMPILER "g++") + +add_compile_options(-Wall -lstdc++) +add_compile_options(-Wextra -Wpedantic) + +# cpp standard +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# find QT components +find_package(Qt6 COMPONENTS Widgets REQUIRED) +qt_standard_project_setup() + +file(GLOB SRCS + "*.h" + "*.cc" + "*.ui" +) + +# gather gui source files +qt_add_resources(GUI_RESOURCES "resources.qrc") + +add_executable(risc_vector ${SRCS} ${GUI_RESOURCES}) +target_link_libraries(${PROJECT_NAME} PRIVATE ${PROJECT_NAME}_lib Qt6::Widgets) + +set_target_properties(risc_vector PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" +) + diff --git a/gui/gui.cc b/gui/gui.cc new file mode 100644 index 0000000..9f2405d --- /dev/null +++ b/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/gui/gui.h b/gui/gui.h new file mode 100644 index 0000000..668fafa --- /dev/null +++ b/gui/gui.h @@ -0,0 +1,26 @@ +#ifndef GUI_H +#define GUI_H +#include + +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/gui/gui.ui b/gui/gui.ui new file mode 100644 index 0000000..5f71c91 --- /dev/null +++ b/gui/gui.ui @@ -0,0 +1,55 @@ + + + gui + + + + 0 + 0 + 800 + 600 + + + + gui + + + + + 60 + 30 + 317 + 232 + + + + + + + + + keyword + + + + + + + + + + find + + + + + + + + + + + + + + diff --git a/gui/main.cc b/gui/main.cc new file mode 100644 index 0000000..4c14fbe --- /dev/null +++ b/gui/main.cc @@ -0,0 +1,89 @@ +#include "cli.h" +#include "definitions.h" +#include "gui.h" +#include "logger.h" +#include +#include +#include + +static Logger *global_log = Logger::getInstance(); + +static std::string version_number = "v0.1"; +static std::string banner = + " _/_/_/ _/_/_/ _/_/_/ _/_/_/ \n" + " _/ _/ _/ _/ _/ \n" + " _/_/_/ _/ _/_/ _/ \n" + " _/ _/ _/ _/ _/ \n" + "_/ _/ _/_/_/ _/_/_/ _/_/_/ \n" + " \n" + " \n" + " _/_/ _/_/ \n" + " _/ _/ _/ _/_/_/_/ _/_/_/ _/_/_/_/_/ _/_/ _/_/_/ _/ \n" + " _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ \n" + "_/ _/ _/ _/_/_/ _/ _/ _/ _/ _/_/_/ _/ \n" + " _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ \n" + " _/ _/ _/_/_/_/ _/_/_/ _/ _/_/ _/ _/ _/ \n" + " _/_/ _/_/ "; +static void print_version_number() +{ + std::cout << banner << version_number << '\n'; +} + +static void err() +{ + std::cerr << "Usage:\n\trisc_vector [OPTIONS]\nOptions:\n\t--debug,\t-d: " + "turn on verbose output\n\t--memory-only,\t-m: run the memory " + "simulator only, without a GUI.\n\t--version,\t-v: print the " + "version information and exit\n" + << std::endl; +} + +static void parseArguments(int argc, char **argv, bool &memory_only) +{ + struct option long_options[] = { + {"debug", no_argument, 0, 'd'}, + {"memory-only", no_argument, 0, 'm'}, + {0, 0, 0, 0}}; + + int opt; + + while ((opt = getopt_long(argc, argv, "d:m", long_options, NULL)) != -1) { + switch (opt) { + case 'd': + global_log->setLevel(DEBUG); + global_log->log(DEBUG, "DEBUG output enabled."); + break; + case 'm': + global_log->log(INFO, "Starting the storage CLI interface..."); + memory_only = true; + break; + default: + err(); + exit(EXIT_FAILURE); + } + } +} + +int main(int argc, char **argv) +{ + print_version_number(); + global_log->log(INFO, "Initializing..."); + + bool memory_only = false; + parseArguments(argc, argv, memory_only); + + if (memory_only) { + Cli cli; + cli.run(); + } else { + global_log->log(INFO, "Starting QT..."); + QApplication a(argc, argv); + Gui w; + w.show(); + a.exec(); + } + + global_log->log(INFO, "Cleaning up..."); + global_log->log(INFO, "Goodbye!"); + return EXIT_SUCCESS; +} diff --git a/gui/resources.qrc b/gui/resources.qrc new file mode 100644 index 0000000..8bfd4e7 --- /dev/null +++ b/gui/resources.qrc @@ -0,0 +1,6 @@ + + + + resources/input.txt + + diff --git a/gui/resources/input.txt b/gui/resources/input.txt new file mode 100644 index 0000000..fc1c3cf --- /dev/null +++ b/gui/resources/input.txt @@ -0,0 +1 @@ +Lorem Ipsum \ No newline at end of file -- cgit v1.2.3