diff --git a/src/meson.build b/src/meson.build index 672f9d5..f964c2c 100644 --- a/src/meson.build +++ b/src/meson.build @@ -1,2 +1,3 @@ #subdir('gui') subdir('cli') +subdir('qt') diff --git a/src/qt/main.cpp b/src/qt/main.cpp new file mode 100644 index 0000000..8150970 --- /dev/null +++ b/src/qt/main.cpp @@ -0,0 +1,11 @@ +#include "memoserv_win.hpp" +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + duck::MemoservWin w(&app); + w.show(); + + return app.exec(); +} diff --git a/src/qt/memoserv_win.cpp b/src/qt/memoserv_win.cpp new file mode 100644 index 0000000..9cc816d --- /dev/null +++ b/src/qt/memoserv_win.cpp @@ -0,0 +1,39 @@ +#include "memoserv_win.hpp" +#include "app_config.h" +#include +#include +#include +#include + +class QApplication; + +namespace duck { + +MemoservWin::MemoservWin(QApplication* app, QWidget *parent) : + QMainWindow(parent) +{ + create_menu(app); +} + +MemoservWin::~MemoservWin() noexcept = default; + +void MemoservWin::create_menu(QApplication* app) { + QMenu* const file_menu = menuBar()->addMenu(tr("&File")); + { + const QIcon open_icon = QIcon::fromTheme("document-open", QIcon(":/images/open.png")); + const auto open_act = new QAction(open_icon, tr("&Open..."), this); + connect(open_act, &QAction::triggered, this, &MemoservWin::open); + file_menu->addAction(open_act); + } + + QMenu* const help_menu = menuBar()->addMenu(tr("&Help")); + { + help_menu->addAction(tr("About &Qt..."), app, &QApplication::aboutQt); + } +} + +void MemoservWin::open() { + std::cout << "MemoservWin::open()\n"; +} + +} //namespace duck diff --git a/src/qt/memoserv_win.hpp b/src/qt/memoserv_win.hpp new file mode 100644 index 0000000..e9c176b --- /dev/null +++ b/src/qt/memoserv_win.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include + +class QApplication; + +namespace duck { + +class MemoservWin : public QMainWindow +{ + Q_OBJECT + +public: + explicit MemoservWin(QApplication*, QWidget *parent = nullptr); + ~MemoservWin() noexcept; + +private: + void create_menu(QApplication*); + + void open(); +}; + +} //namespace duck diff --git a/src/qt/meson.build b/src/qt/meson.build new file mode 100644 index 0000000..7524826 --- /dev/null +++ b/src/qt/meson.build @@ -0,0 +1,31 @@ +cpp = meson.get_compiler('cpp') +fslib_dep = cpp.find_library('stdc++fs', required: false) + +qt5 = import('qt5') +qt5_dep = dependency('qt5', modules: ['Core', 'Gui', 'Widgets']) +inc = include_directories('includes') +moc_files = qt5.preprocess( + moc_headers: 'memoserv_win.hpp', + #ui_files: 'main_window.ui', + moc_extra_arguments: ['-DMAKES_MY_MOC_HEADER_COMPILE'], + include_directories: inc, + dependencies: qt5_dep +) + +app_name = meson.project_name() + '-qt' +conf = configuration_data() +conf.set('APP_NAME', app_name) +conf.set('APP_SHORT_DESC', 'PSX memory card inspector') +config_file = configure_file( + input: app_config_model, + output: 'app_config.h', + configuration: conf +) + +executable(app_name, + 'main.cpp', + 'memoserv_win.cpp', + moc_files, + include_directories: inc, + dependencies: [qt5_dep, fslib_dep], +)