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 {