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 { 12class DockStack; 13class DockWindow; 14class LayoutManager; 15 16class DockablePane : public Gtk::Box { 17private: 18Gtk::Label label; 19Glib::ustring name; 20Gtk::Image *icon; 21DockStack *stack; 22DockWindow *window = nullptr; 23std::unique_ptr<Gtk::HeaderBar> header; 24Gtk::Widget *child; 25std::shared_ptr<LayoutManager> layout; 26public: 27DockablePane(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); 28Glib::ustring get_identifier() const; 29Gtk::Image *get_icon() const; 30Gtk::Label *get_label(); 31void redock(DockStack *stack); 32void pop_out(); 33Gtk::Widget *get_child() const; 34}; 35 36class DockWindow : public Gtk::Window { 37private: 38DockablePane *pane; 39public: 40explicit DockWindow(DockablePane *pane); 41}; 42 43class LayoutManager : public Glib::ObjectBase { 44private: 45std::vector<DockablePane*> panes; 46public: 47std::vector<DockStack*> stacks; 48LayoutManager(); 49 50void add_pane(DockablePane *pane); 51 52void add_stack(DockStack *stack); 53}; 54 55class DockStack : public Gtk::Stack { 56private: 57std::shared_ptr<LayoutManager> layout; 58public: 59Glib::ustring name; 60explicit DockStack(std::shared_ptr<LayoutManager> layout, const Glib::ustring &name); 61 62void add_pane(DockablePane &child); 63}; 64 65class DockStackSwitcher : public Gtk::ButtonBox { 66private: 67DockStack *stack; 68public: 69void update_buttons(); 70explicit DockStackSwitcher(DockStack *stack); 71}; 72} // namespace gPanthera 73 74#endif // GPANTHERA_LIBRARY_H