gpanthera.hh
C++ source, ASCII text
1#ifndef GPANTHERA_LIBRARY_H 2#define GPANTHERA_LIBRARY_H 3 4#include <gtkmm.h> 5#include <glibmm.h> 6#include <glibmm/ustring.h> 7#include <utility> 8#include <vector> 9#include <memory> 10 11namespace gPanthera { 12void init(); 13 14class DockStack; 15class DockWindow; 16class LayoutManager; 17 18class DockablePane : public Gtk::Box { 19private: 20Gtk::Label label; 21Glib::ustring name; 22Gtk::Image *icon; 23DockStack *stack; 24DockWindow *window = nullptr; 25std::unique_ptr<Gtk::HeaderBar> header; 26Gtk::Widget *child; 27std::shared_ptr<LayoutManager> layout; 28public: 29DockStack *last_stack = nullptr; 30DockablePane(std::shared_ptr<LayoutManager> layout, Gtk::Widget &child, const Glib::ustring &name, const Glib::ustring &label, Gtk::Image *icon, DockStack *stack = nullptr, Gtk::Widget *custom_header = nullptr); 31Glib::ustring get_identifier() const; 32Gtk::Image *get_icon() const; 33Gtk::Label *get_label(); 34void redock(DockStack *stack); 35void pop_out(); 36Gtk::Widget *get_child() const; 37}; 38 39class DockWindow : public Gtk::Window { 40private: 41DockablePane *pane; 42public: 43explicit DockWindow(DockablePane *pane); 44}; 45 46class LayoutManager : public Glib::ObjectBase { 47private: 48public: 49std::vector<DockablePane*> panes; 50std::vector<DockStack*> stacks; 51LayoutManager(); 52 53void add_pane(DockablePane *pane); 54 55void add_stack(DockStack *stack); 56}; 57 58class DockStack : public Gtk::Stack { 59private: 60public: 61sigc::signal<void(Gtk::Widget*)> signal_child_added; 62sigc::signal<void(Gtk::Widget*)> signal_child_removed; 63std::shared_ptr<LayoutManager> layout; 64Glib::ustring name; 65explicit DockStack(std::shared_ptr<LayoutManager> layout, const Glib::ustring &name); 66 67void add_pane(DockablePane &child); 68void add(Gtk::Widget &child, const Glib::ustring &name); 69void remove(Gtk::Widget &child); 70void add(Gtk::Widget &child) = delete; 71void add(Gtk::Widget &child, const Glib::ustring &name, const Glib::ustring &title) = delete; 72}; 73 74class DockButton : public Gtk::Button { 75private: 76public: 77DockablePane *pane; 78explicit DockButton(DockablePane *pane); 79}; 80 81class DockStackSwitcher : public Gtk::Box { 82private: 83DockStack *stack; 84sigc::connection add_handler, remove_handler; 85public: 86void update_buttons(); 87explicit DockStackSwitcher(DockStack *stack, Gtk::Orientation orientation = Gtk::Orientation::HORIZONTAL); 88~DockStackSwitcher() override; 89}; 90} // namespace gPanthera 91 92#endif // GPANTHERA_LIBRARY_H