roundabout,
created on Saturday, 1 March 2025, 09:07:51 (1740820071),
received on Saturday, 1 March 2025, 09:07:54 (1740820074)
Author identity: vlad <vlad.muntoiu@gmail.com>
98adf72a8c22f9cd1b5a4e8a2893c432378297dd
CMakeLists.txt
@@ -16,3 +16,5 @@ link_directories(${GTKMM_LIBRARY_DIRS})
add_definitions(${GTKMM_CFLAGS_OTHER}) target_link_libraries(gpanthera ${GTKMM_LIBRARIES}) file(COPY locales DESTINATION ${CMAKE_BINARY_DIR})
gpanthera.cc
@@ -2,8 +2,18 @@
#include <iostream> #include <utility> #include <gtk/gtk.h> #include <libintl.h> #include <locale.h> #include <filesystem> #define _(STRING) gettext(STRING)namespace gPanthera { void init() { setlocale(LC_ALL, "ro_RO.utf8"); bindtextdomain("gpanthera", "./locales"); textdomain("gpanthera"); }DockablePane::DockablePane(std::shared_ptr<LayoutManager> layout, Gtk::Widget &child, const Glib::ustring &name, const Glib::ustring &label, Gtk::Image *icon, DockStack *stack, Gtk::Widget *custom_header) : Gtk::Box(Gtk::ORIENTATION_VERTICAL, 0), name(name) { if(icon) {
@@ -25,8 +35,8 @@ namespace gPanthera {
auto header_menu = Gtk::make_managed<Gtk::Menu>(); header_menu_button->set_direction(Gtk::ARROW_NONE); header_menu_button->set_popup(*header_menu); auto close_menu_item = Gtk::make_managed<Gtk::MenuItem>("Close");auto pop_out_menu_item = Gtk::make_managed<Gtk::MenuItem>("Pop out");auto close_menu_item = Gtk::make_managed<Gtk::MenuItem>(_("Close")); auto pop_out_menu_item = Gtk::make_managed<Gtk::MenuItem>(_("Pop out"));auto move_menu = Gtk::make_managed<Gtk::Menu>(); close_menu_item->signal_activate().connect([this]() { if(this->stack) {
@@ -45,7 +55,7 @@ namespace gPanthera {
}); move_menu->append(*menu_item); } auto move_menu_item = Gtk::make_managed<Gtk::MenuItem>("Move");auto move_menu_item = Gtk::make_managed<Gtk::MenuItem>(_("Move"));move_menu_item->set_submenu(*move_menu); header_menu->append(*close_menu_item); header_menu->append(*pop_out_menu_item);
@@ -146,6 +156,13 @@ namespace gPanthera {
remove_handler.disconnect(); } DockButton::DockButton(DockablePane *pane) : Gtk::Button(), pane(pane) { if(pane->get_icon()) { this->set_image(*pane->get_icon()); } this->set_tooltip_text(pane->get_label()->get_text()); } void DockStackSwitcher::update_buttons() { auto children = get_children(); for(auto &child: children) {
@@ -155,10 +172,7 @@ namespace gPanthera {
} for(auto const &widget : stack->get_children()) { if(auto pane = dynamic_cast<DockablePane*>(widget)) { auto *button = Gtk::make_managed<Gtk::Button>();if(pane->get_icon()) {button->set_image(*pane->get_icon());}auto *button = Gtk::make_managed<DockButton>(pane);button->signal_clicked().connect([this, pane]() { if(stack->get_visible_child_name() == pane->get_identifier()) { stack->set_visible_child("empty");
gpanthera.hh
@@ -9,6 +9,8 @@
#include <memory> namespace gPanthera { void init();class DockStack; class DockWindow; class LayoutManager;
@@ -42,8 +44,8 @@ namespace gPanthera {
class LayoutManager : public Glib::ObjectBase { private: std::vector<DockablePane*> panes;public: std::vector<DockablePane*> panes;std::vector<DockStack*> stacks; LayoutManager();
@@ -54,14 +56,21 @@ namespace gPanthera {
class DockStack : public Gtk::Stack { private: std::shared_ptr<LayoutManager> layout;public: std::shared_ptr<LayoutManager> layout;Glib::ustring name; explicit DockStack(std::shared_ptr<LayoutManager> layout, const Glib::ustring &name); void add_pane(DockablePane &child); }; class DockButton : public Gtk::Button { private: public: DockablePane *pane; explicit DockButton(DockablePane *pane); }; class DockStackSwitcher : public Gtk::ButtonBox { private: DockStack *stack;
panthera-www.cc
@@ -4,8 +4,11 @@
#include <glibmm/ustring.h> #include <iostream> #include <memory> #include <libintl.h> #include <locale.h>int main(int argc, char *argv[]) { gPanthera::init();auto app = Gtk::Application::create(argc, argv, "org.gpanthera.demo"); Gtk::Window window;
@@ -20,12 +23,19 @@ int main(int argc, char *argv[]) {
auto switcher_1 = Gtk::make_managed<gPanthera::DockStackSwitcher>(dock_stack_1); auto dock_stack_2 = Gtk::make_managed<gPanthera::DockStack>(layout_manager, "Two"); auto switcher_2 = Gtk::make_managed<gPanthera::DockStackSwitcher>(dock_stack_2); auto pane_content = Gtk::make_managed<Gtk::Box>(Gtk::ORIENTATION_VERTICAL, 0);pane_content->pack_start(*Gtk::make_managed<Gtk::Label>("Pane 1 content"), Gtk::PACK_EXPAND_WIDGET);auto pane_icon = Gtk::make_managed<Gtk::Image>();pane_icon->set_from_icon_name("go-home-symbolic", Gtk::ICON_SIZE_MENU);auto pane = Gtk::make_managed<gPanthera::DockablePane>(layout_manager, *pane_content, "pane1", "Pane 1", pane_icon);dock_stack_1->add_pane(*pane);auto pane_1_content = Gtk::make_managed<Gtk::Box>(Gtk::ORIENTATION_VERTICAL, 0); pane_1_content->pack_start(*Gtk::make_managed<Gtk::Label>("Pane 1 content"), Gtk::PACK_EXPAND_WIDGET); auto pane_2_content = Gtk::make_managed<Gtk::Box>(Gtk::ORIENTATION_VERTICAL, 0); pane_2_content->pack_start(*Gtk::make_managed<Gtk::Label>("Pane 2 content"), Gtk::PACK_EXPAND_WIDGET); auto pane_1_icon = Gtk::make_managed<Gtk::Image>(); pane_1_icon->set_from_icon_name("go-home-symbolic", Gtk::ICON_SIZE_MENU); auto pane_2_icon = Gtk::make_managed<Gtk::Image>(); pane_2_icon->set_from_icon_name("folder-symbolic", Gtk::ICON_SIZE_MENU); auto pane_1 = Gtk::make_managed<gPanthera::DockablePane>(layout_manager, *pane_1_content, "pane1", "Pane 1", pane_1_icon); auto pane_2 = Gtk::make_managed<gPanthera::DockablePane>(layout_manager, *pane_2_content, "pane2", "Pane 2", pane_2_icon); dock_stack_1->add_pane(*pane_1); dock_stack_2->add_pane(*pane_2);Gtk::Box vbox(Gtk::ORIENTATION_VERTICAL); vbox.pack_start(*switcher_1, Gtk::PACK_SHRINK);
po/gpanthera.pot
@@ -0,0 +1,30 @@
# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-26 17:31+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: gpanthera.cc:31 msgid "Close" msgstr "" #: gpanthera.cc:32 msgid "Pop out" msgstr "" #: gpanthera.cc:51 msgid "Move" msgstr ""
po/ro.po
@@ -0,0 +1,31 @@
# Romanian translations for PACKAGE package. # Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Vlad <vlad@roundabout-host.com>, 2025. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-02-26 17:31+0200\n" "PO-Revision-Date: 2025-02-26 17:32+0200\n" "Last-Translator: Vlad <vlad@roundabout-host.com>\n" "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " "20)) ? 1 : 2;\n" #: gpanthera.cc:31 msgid "Close" msgstr "Închide" #: gpanthera.cc:32 msgid "Pop out" msgstr "Scoate" #: gpanthera.cc:51 msgid "Move" msgstr "Mută"