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: 29DockablePane(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); 30Glib::ustring get_identifier() const; 31Gtk::Image *get_icon() const; 32Gtk::Label *get_label(); 33void redock(DockStack *stack); 34void pop_out(); 35Gtk::Widget *get_child() const; 36}; 37 38class DockWindow : public Gtk::Window { 39private: 40DockablePane *pane; 41public: 42explicit DockWindow(DockablePane *pane); 43}; 44 45class LayoutManager : public Glib::ObjectBase { 46private: 47public: 48std::vector<DockablePane*> panes; 49std::vector<DockStack*> stacks; 50LayoutManager(); 51 52void add_pane(DockablePane *pane); 53 54void add_stack(DockStack *stack); 55}; 56 57class DockStack : public Gtk::Stack { 58private: 59public: 60std::shared_ptr<LayoutManager> layout; 61Glib::ustring name; 62explicit DockStack(std::shared_ptr<LayoutManager> layout, const Glib::ustring &name); 63 64void add_pane(DockablePane &child); 65}; 66 67class DockButton : public Gtk::Button { 68private: 69public: 70DockablePane *pane; 71explicit DockButton(DockablePane *pane); 72}; 73 74class DockStackSwitcher : public Gtk::ButtonBox { 75private: 76DockStack *stack; 77sigc::connection add_handler, remove_handler; 78public: 79void update_buttons(); 80explicit DockStackSwitcher(DockStack *stack); 81~DockStackSwitcher() override; 82}; 83} // namespace gPanthera 84 85#endif // GPANTHERA_LIBRARY_H