roundabout,
created on Sunday, 23 February 2025, 19:16:22 (1740338182),
received on Sunday, 23 February 2025, 19:16:36 (1740338196)
Author identity: vlad <vlad.muntoiu@gmail.com>
83a8609fc646df9d00a9c477b0e399ecc24aed1a
gpanthera.cc
@@ -1,6 +1,7 @@
#include "gpanthera.hh" #include <iostream> #include <utility> #include <gtk/gtk.h>namespace 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)
@@ -13,7 +14,7 @@ namespace gPanthera {
} this->layout = std::move(layout); this->label.set_text(label); header = Gtk::make_managed<Gtk::HeaderBar>();header = std::make_unique<Gtk::HeaderBar>();header->set_show_close_button(false); if(custom_header) { header->set_custom_title(*custom_header);
@@ -40,7 +41,7 @@ namespace gPanthera {
for(auto &this_stack: this->layout->stacks) { auto menu_item = Gtk::make_managed<Gtk::MenuItem>(this_stack->name); menu_item->signal_activate().connect([this, this_stack]() { this->redock(this_stack);this_stack->add_pane(*this);}); move_menu->append(*menu_item); }
@@ -59,12 +60,21 @@ namespace gPanthera {
void DockablePane::redock(DockStack *stack) { if(this->window != nullptr) { this->window->hide(); gtk_window_set_titlebar(GTK_WINDOW(this->window->gobj()), nullptr); // TODO: Why is it changing style? this->header->unset_background_color(); this->window->remove(); this->window->set_decorated(false);this->window->close(); delete this->window; this->window = nullptr; this->pack_start(*this->header);this->pack_start(*this->header, Gtk::PACK_SHRINK); this->header->show_all();} this->stack = stack; this->stack->add(*this, this->get_identifier()); this->show_all();} void DockablePane::pop_out() {
@@ -89,10 +99,6 @@ namespace gPanthera {
return icon; } Gtk::HeaderBar *DockablePane::get_header() const {return header;}Gtk::Widget *DockablePane::get_child() const { return child; }
@@ -157,12 +163,10 @@ namespace gPanthera {
} } } this->show_all();} void DockStack::add_pane(Gtk::Widget &child, const Glib::ustring &name) {if(auto pane = dynamic_cast<DockablePane*>(&child)) {pane->redock(this);}Gtk::Stack::add(child, name);void DockStack::add_pane(DockablePane &child) { child.redock(this);} } // namespace gPanthera
gpanthera.hh
@@ -20,7 +20,7 @@ namespace gPanthera {
Gtk::Image *icon; DockStack *stack; DockWindow *window = nullptr; Gtk::HeaderBar *header;std::unique_ptr<Gtk::HeaderBar> header;Gtk::Widget *child; std::shared_ptr<LayoutManager> layout; public:
@@ -30,7 +30,6 @@ namespace gPanthera {
Gtk::Label *get_label(); void redock(DockStack *stack); void pop_out(); Gtk::HeaderBar *get_header() const;Gtk::Widget *get_child() const; };
@@ -60,7 +59,7 @@ namespace gPanthera {
Glib::ustring name; explicit DockStack(std::shared_ptr<LayoutManager> layout, const Glib::ustring &name); void add_pane(Gtk::Widget &child, const Glib::ustring &name);void add_pane(DockablePane &child);}; class DockStackSwitcher : public Gtk::ButtonBox {
panthera-www.cc
@@ -19,7 +19,7 @@ int main(int argc, char *argv[]) {
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->add_pane(*pane, pane->get_identifier());dock_stack->add_pane(*pane);switcher->update_buttons(); Gtk::Box vbox(Gtk::ORIENTATION_VERTICAL);