GTK docking interfaces and more

By using this site, you agree to have cookies stored on your device, strictly for functional purposes, such as storing your session and preferences.

Dismiss

 panthera-www.cc

View raw Download
text/x-c++ • 3.68 kiB
C++ source, ASCII text
        
            
1
#include "gpanthera.hh"
2
#include <gtkmm.h>
3
#include <glibmm.h>
4
#include <glibmm/ustring.h>
5
#include <iostream>
6
#include <memory>
7
#include <libintl.h>
8
#include <locale.h>
9
10
class PantheraWww : public Gtk::Application {
11
Gtk::Window *window = Gtk::make_managed<Gtk::Window>();
12
protected:
13
void on_startup() override {
14
Gtk::Application::on_startup();
15
add_window(*window);
16
window->set_default_size(600, 400);
17
auto layout_manager = std::make_shared<gPanthera::LayoutManager>();
18
auto dock_stack_1 = Gtk::make_managed<gPanthera::DockStack>(layout_manager, "One");
19
auto switcher_1 = Gtk::make_managed<gPanthera::DockStackSwitcher>(dock_stack_1, Gtk::Orientation::HORIZONTAL);
20
auto dock_stack_2 = Gtk::make_managed<gPanthera::DockStack>(layout_manager, "Two");
21
auto switcher_2 = Gtk::make_managed<gPanthera::DockStackSwitcher>(dock_stack_2, Gtk::Orientation::VERTICAL);
22
auto pane_1_content = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL, 0);
23
pane_1_content->append(*Gtk::make_managed<Gtk::Label>("Pane 1 content"));
24
auto pane_2_content = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL, 0);
25
pane_2_content->append(*Gtk::make_managed<Gtk::Label>("Pane 2 content"));
26
auto pane_3_content = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL, 0);
27
pane_3_content->append(*Gtk::make_managed<Gtk::Label>("Pane 3 content"));
28
auto pane_1_icon = Gtk::make_managed<Gtk::Image>();
29
pane_1_icon->set_from_icon_name("go-home-symbolic");
30
auto pane_2_icon = Gtk::make_managed<Gtk::Image>();
31
pane_2_icon->set_from_icon_name("folder-symbolic");
32
auto pane_3_icon = Gtk::make_managed<Gtk::Image>();
33
pane_3_icon->set_from_icon_name("network-transmit-receive-symbolic");
34
auto pane_1 = Gtk::make_managed<gPanthera::DockablePane>(layout_manager, *pane_1_content, "pane1", "Pane 1", pane_1_icon);
35
auto pane_2 = Gtk::make_managed<gPanthera::DockablePane>(layout_manager, *pane_2_content, "pane2", "Pane 2", pane_2_icon);
36
auto pane_3 = Gtk::make_managed<gPanthera::DockablePane>(layout_manager, *pane_3_content, "pane3", "Pane 3", pane_3_icon);
37
38
dock_stack_1->set_transition_type(Gtk::StackTransitionType::SLIDE_LEFT_RIGHT);
39
dock_stack_1->set_transition_duration(125);
40
dock_stack_1->set_expand(true);
41
dock_stack_2->set_transition_type(Gtk::StackTransitionType::SLIDE_UP_DOWN);
42
dock_stack_2->set_transition_duration(125);
43
dock_stack_2->set_expand(true);
44
45
dock_stack_1->add_pane(*pane_1);
46
dock_stack_1->add_pane(*pane_3);
47
dock_stack_2->add_pane(*pane_2);
48
49
auto outer_grid = Gtk::make_managed<Gtk::Grid>();
50
outer_grid->attach(*switcher_2, 0, 1, 1, 1);
51
outer_grid->attach(*switcher_1, 1, 2, 1, 1);
52
auto outer_paned = Gtk::make_managed<Gtk::Paned>(Gtk::Orientation::HORIZONTAL);
53
outer_paned->set_start_child(*dock_stack_2);
54
auto inner_paned = Gtk::make_managed<Gtk::Paned>(Gtk::Orientation::VERTICAL);
55
auto content = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL, 0);
56
inner_paned->set_start_child(*content);
57
inner_paned->set_end_child(*dock_stack_1);
58
outer_paned->set_end_child(*inner_paned);
59
outer_grid->attach(*outer_paned, 1, 1, 1, 1);
60
window->set_child(*outer_grid);
61
}
62
63
void on_activate() override {
64
window->present();
65
}
66
public:
67
static Glib::RefPtr<PantheraWww> create() {
68
return Glib::make_refptr_for_instance<PantheraWww>(new PantheraWww());
69
}
70
};
71
72
int main(int argc, char *argv[]) {
73
gPanthera::init();
74
auto app = PantheraWww::create();
75
return app->run(argc, argv);
76
}
77