From c4dc2f22ec95f92b279f815c5bdc6429cc67c9ca Mon Sep 17 00:00:00 2001 From: James Date: Sat, 5 Mar 2022 00:16:13 +0000 Subject: [PATCH] #1 Move UI to classes --- CMakeLists.txt | 2 +- src/CMakeLists.txt | 16 ++++--------- src/main.cpp | 43 +++++------------------------------ src/ui/CMakeLists.txt | 13 +++++++++++ src/ui/common/CMakeLists.txt | 20 ++++++++++++++++ src/ui/common/closebutton.cpp | 15 ++++++++++++ src/ui/common/closebutton.h | 15 ++++++++++++ src/ui/common/common.h | 6 +++++ src/ui/jamcswindow.cpp | 18 +++++++++++++++ src/ui/jamcswindow.h | 19 ++++++++++++++++ src/ui/viewfinder.cpp | 11 +++++++++ src/ui/viewfinder.h | 17 ++++++++++++++ 12 files changed, 146 insertions(+), 49 deletions(-) create mode 100644 src/ui/CMakeLists.txt create mode 100644 src/ui/common/CMakeLists.txt create mode 100644 src/ui/common/closebutton.cpp create mode 100644 src/ui/common/closebutton.h create mode 100644 src/ui/common/common.h create mode 100644 src/ui/jamcswindow.cpp create mode 100644 src/ui/jamcswindow.h create mode 100644 src/ui/viewfinder.cpp create mode 100644 src/ui/viewfinder.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f87de2..e10c9f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_CLANG_TIDY clang-tidy -checks=-*,bugprone-*,concurrency-*,cppcoreguidelines-*,modernize-*,performance-*,readability-*,) -project(PiCamera) +project(JAMCS) # Find gtk+-4.0 library find_package(PkgConfig REQUIRED) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a38bfed..907d319 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,20 +1,14 @@ +add_subdirectory(ui) + add_executable( JAMCS main.cpp ) -target_include_directories( - JAMCS - PRIVATE - ${GTK_INCLUDE_DIRS} -) -target_link_directories( - JAMCS - PRIVATE - ${GTK_LIBRARY_DIRS} -) + target_link_libraries( JAMCS PRIVATE - ${GTK_LIBRARIES} + UI ) + add_definitions (${GTK_CFLAGS_OTHER}) diff --git a/src/main.cpp b/src/main.cpp index 1a09cfd..dc47c7f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,49 +1,18 @@ #include #include -class CloseButton : public Gtk::Button -{ -private: - void on_button_clicked(); - Glib::RefPtr app; -public: - CloseButton(const Glib::ustring &label, Glib::RefPtr app); -}; +#include "ui/jamcswindow.h" -CloseButton::CloseButton(const Glib::ustring &label, Glib::RefPtr app) -{ - this->app = app; - - set_label(label); - - signal_clicked().connect(sigc::mem_fun(*this, &CloseButton::on_button_clicked)); - -} - -void CloseButton::on_button_clicked() -{ - this->app.get()->quit(); -} - -class MyWindow : public Gtk::Window -{ -public: - MyWindow(); -}; - -MyWindow::MyWindow() -{ - set_title("Basic application"); - set_default_size(200, 200); -} +// Default size for JAMCS window +// Set to match resolution of HyperPixel 4 display +const static int DEFAULT_WINDOW_WIDTH = 800; +const static int DEFAULT_WINDOW_HEIGHT = 480; int main(int argc, char* argv[]) { auto app = Gtk::Application::create("org.gtkmm.examples.base"); - MyWindow window; - CloseButton button("Close", app); - window.add(button); + JamcsWindow window(app, "JAMCS", DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT); window.show_all(); return app->run(window); diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt new file mode 100644 index 0000000..5c928ca --- /dev/null +++ b/src/ui/CMakeLists.txt @@ -0,0 +1,13 @@ +add_subdirectory(common) + +add_library( + UI + STATIC + jamcswindow.cpp + viewfinder.cpp +) +target_link_libraries( + UI + PUBLIC + CommonUI +) diff --git a/src/ui/common/CMakeLists.txt b/src/ui/common/CMakeLists.txt new file mode 100644 index 0000000..6d6c613 --- /dev/null +++ b/src/ui/common/CMakeLists.txt @@ -0,0 +1,20 @@ +add_library( + CommonUI + STATIC + closebutton.cpp +) +target_include_directories( + CommonUI + PUBLIC + ${GTK_INCLUDE_DIRS} +) +target_link_directories( + CommonUI + PUBLIC + ${GTK_LIBRARY_DIRS} +) +target_link_libraries( + CommonUI + PUBLIC + ${GTK_LIBRARIES} +) diff --git a/src/ui/common/closebutton.cpp b/src/ui/common/closebutton.cpp new file mode 100644 index 0000000..2102393 --- /dev/null +++ b/src/ui/common/closebutton.cpp @@ -0,0 +1,15 @@ +#include "closebutton.h" + +#include + +CloseButton::CloseButton(const Glib::ustring &label, Glib::RefPtr appPtr) : app(appPtr) +{ + set_label(label); + + signal_clicked().connect(sigc::mem_fun(*this, &CloseButton::on_button_clicked)); +} + +void CloseButton::on_button_clicked() +{ + this->app.get()->quit(); +} diff --git a/src/ui/common/closebutton.h b/src/ui/common/closebutton.h new file mode 100644 index 0000000..bf9d68d --- /dev/null +++ b/src/ui/common/closebutton.h @@ -0,0 +1,15 @@ +#ifndef _CLOSEBUTTON_H +#define _CLOSEBUTTON_H + +#include + +class CloseButton : public Gtk::Button +{ +private: + void on_button_clicked(); + Glib::RefPtr app; +public: + CloseButton(const Glib::ustring &label, Glib::RefPtr appPtr); +}; + +#endif // _CLOSEBUTTON_H diff --git a/src/ui/common/common.h b/src/ui/common/common.h new file mode 100644 index 0000000..3d99d00 --- /dev/null +++ b/src/ui/common/common.h @@ -0,0 +1,6 @@ +#ifndef _COMMON_H +#define _COMMON_H + +#include "closebutton.h" + +#endif // _COMMON_H diff --git a/src/ui/jamcswindow.cpp b/src/ui/jamcswindow.cpp new file mode 100644 index 0000000..c60760c --- /dev/null +++ b/src/ui/jamcswindow.cpp @@ -0,0 +1,18 @@ +#include "jamcswindow.h" + +#include + +#include "viewfinder.h" + +JamcsWindow::JamcsWindow(Glib::RefPtr appPtr, const Glib::ustring &title, int width, int height) : app(appPtr) +{ + set_title(title); + set_default_size(width, height); + + this->viewfinder = std::unique_ptr(new Viewfinder(app)); + this->stack.add(*this->viewfinder, "viewfinder"); + + this->stack.set_visible_child("viewfinder"); + + this->add(this->stack); +} diff --git a/src/ui/jamcswindow.h b/src/ui/jamcswindow.h new file mode 100644 index 0000000..1b4ebce --- /dev/null +++ b/src/ui/jamcswindow.h @@ -0,0 +1,19 @@ +#ifndef _WINDOW_H +#define _WINDOW_H + +#include +#include + +#include "viewfinder.h" + +class JamcsWindow : public Gtk::Window +{ +private: + Glib::RefPtr app; + Gtk::Stack stack; + std::unique_ptr viewfinder = nullptr; +public: + JamcsWindow(Glib::RefPtr appPtr, const Glib::ustring &title, int width, int height); +}; + +#endif // _WINDOW_H diff --git a/src/ui/viewfinder.cpp b/src/ui/viewfinder.cpp new file mode 100644 index 0000000..4788465 --- /dev/null +++ b/src/ui/viewfinder.cpp @@ -0,0 +1,11 @@ +#include "viewfinder.h" + +#include "common/common.h" + +Viewfinder::Viewfinder(Glib::RefPtr appPtr) : app(appPtr) +{ + this->close_button = std::unique_ptr(new CloseButton("X", app)); + this->add(*this->close_button); + + this->show_all(); +} diff --git a/src/ui/viewfinder.h b/src/ui/viewfinder.h new file mode 100644 index 0000000..8293e8c --- /dev/null +++ b/src/ui/viewfinder.h @@ -0,0 +1,17 @@ +#ifndef _VIEWFINDER_H +#define _VIEWFINDER_H + +#include + +#include "common/common.h" + +class Viewfinder : public Gtk::Box +{ +private: + Glib::RefPtr app; + std::unique_ptr close_button = nullptr; +public: + Viewfinder(Glib::RefPtr appPtr); +}; + +#endif // _VIEWFINDER_H