roundabout,
created on Tuesday, 18 February 2025, 21:14:30 (1739913270),
received on Tuesday, 18 February 2025, 21:14:50 (1739913290)
Author identity: vlad <vlad.muntoiu@gmail.com>
4201e78871304b5ae4c1e36b9433c4178151abb7
gpanthera.cc
@@ -11,7 +11,7 @@ namespace gPanthera {
this->stack = stack; } this->label.set_text(label); auto header = Gtk::make_managed<Gtk::HeaderBar>();header = Gtk::make_managed<Gtk::HeaderBar>();header->set_show_close_button(false); if(custom_header) { header->set_custom_title(*custom_header);
@@ -39,25 +39,33 @@ namespace gPanthera {
header_menu->show_all(); header->pack_end(*header_menu_button); this->pack_start(*header, Gtk::PACK_SHRINK); this->child = &child;this->pack_end(child, Gtk::PACK_EXPAND_WIDGET); show_all_children(); } void DockablePane::redock(DockStack *stack) { if(this->window) {if(this->window != nullptr) {this->window->close(); delete this->window;this->window = nullptr; } this->stack = stack; } void DockablePane::pop_out() { if(this->stack) {if(this->stack != nullptr) {this->stack->remove(*this); this->stack = nullptr; } }if(this->window == nullptr) { this->remove(*this->header); this->window = new DockWindow(this); this->window->set_titlebar(*this->header); this->window->show_all(); } } Glib::ustring DockablePane::get_identifier() const { return name;
@@ -67,6 +75,14 @@ namespace gPanthera {
return icon; } Gtk::HeaderBar *DockablePane::get_header() const { return header; } Gtk::Widget *DockablePane::get_child() const { return child; } Gtk::Label *DockablePane::get_label() { return &label; }
@@ -85,6 +101,7 @@ namespace gPanthera {
DockWindow::DockWindow(DockablePane *pane) { this->pane = pane; this->add(*pane);} DockStackSwitcher::DockStackSwitcher(DockStack *stack) : Gtk::ButtonBox(Gtk::ORIENTATION_HORIZONTAL), stack(stack) {
@@ -97,8 +114,10 @@ namespace gPanthera {
} void DockStackSwitcher::update_buttons() { for(auto const &child : get_children()) {remove(*child);for(auto &child : get_children()) { if(child) { remove(*child); }} for(auto const &widget : stack->get_children()) { if(auto pane = dynamic_cast<DockablePane*>(widget)) {
gpanthera.hh
@@ -18,7 +18,9 @@ namespace gPanthera {
Glib::ustring name; Gtk::Image *icon; DockStack *stack; DockWindow *window;DockWindow *window = nullptr; Gtk::HeaderBar *header; Gtk::Widget *child;public: DockablePane(Gtk::Widget &child, const Glib::ustring &name, const Glib::ustring &label, Gtk::Image *icon, DockStack *stack = nullptr, Gtk::Widget *custom_header = nullptr); Glib::ustring get_identifier() const;
@@ -26,6 +28,8 @@ namespace gPanthera {
Gtk::Label *get_label(); void redock(DockStack *stack); void pop_out(); Gtk::HeaderBar *get_header() const; Gtk::Widget *get_child() const;}; class DockWindow : public Gtk::Window {