add file
[ardour.git] / gtk2_ardour / mtest.cc
1 #include <iostream>
2 #include <gtkmm.h>
3 #include <gtkmm/accelmap.h>
4
5 using namespace Gtk;
6 using namespace std;
7 using namespace sigc;
8
9 void
10 printit (string txt)
11 {
12         cout << "This is the " << txt << " item\n";
13 }
14
15 Glib::RefPtr<Action>
16 make_action (Glib::RefPtr<ActionGroup> group, Glib::RefPtr<AccelGroup> accel_group, string name, string label, slot<void> sl, guint key, Gdk::ModifierType mods)
17 {
18         Glib::RefPtr<Action> act;
19
20         act = Action::create (name, label);
21         group->add (act, sl);
22         AccelMap::add_entry (act->get_accel_path(), key, mods);
23         act->set_accel_group (accel_group);
24
25         cerr << "action " << name << " has path " << act->get_accel_path() << endl;
26         
27         return act;
28 }
29
30 Glib::RefPtr<Action>
31 make_action (Glib::RefPtr<ActionGroup> group, string name, string label, slot<void> sl, guint key, Gdk::ModifierType mods)
32 {
33         Glib::RefPtr<Action> act;
34
35         act = Action::create (name, label);
36         group->add (act, sl);
37         AccelMap::add_entry (act->get_accel_path(), key, mods);
38
39         cerr << "action " << name << " has path " << act->get_accel_path() << endl;
40         
41         return act;
42 }
43
44 Glib::RefPtr<Action>
45 make_action (Glib::RefPtr<ActionGroup> group, string name, string label, slot<void> sl)
46 {
47         Glib::RefPtr<Action> act;
48
49         act = Action::create (name, label);
50         group->add (act, sl);
51
52         cerr << "action " << name << " has path " << act->get_accel_path() << endl;
53
54         return act;
55 }
56
57 Glib::RefPtr<Action>
58 make_action (Glib::RefPtr<ActionGroup> group, string name, string label)
59 {
60         Glib::RefPtr<Action> act;
61
62         act = Action::create (name, label);
63         group->add (act);
64
65         cerr << "action " << name << " has path " << act->get_accel_path() << endl;
66
67         return act;
68 }
69
70 int
71 main (int argc, char* argv[])
72 {
73         Main app (argc, argv);
74         Window window (WINDOW_TOPLEVEL);
75         Window other_window (WINDOW_TOPLEVEL);
76         Button button ("click me for baz");
77         Button other_button ("click me for baz");
78         VBox   vpacker;
79         VBox   other_vpacker;
80
81         Glib::RefPtr<ActionGroup> shared_actions;
82         Glib::RefPtr<ActionGroup> actions;
83         Glib::RefPtr<ActionGroup> other_actions;
84         Glib::RefPtr<UIManager> uimanager;
85         Glib::RefPtr<UIManager> other_uimanager;
86         Glib::RefPtr<UIManager> shared_uimanager;
87         Glib::RefPtr<AccelGroup> shared_accel_group;
88
89         window.set_name ("Editor");
90         window.set_title ("Editor");
91
92         other_window.set_name ("Other");
93         other_window.set_title ("Other");
94
95         uimanager = UIManager::create();
96         other_uimanager = UIManager::create();
97         shared_uimanager = UIManager::create();
98
99         actions = ActionGroup::create("MyActions");
100         other_actions = ActionGroup::create("OtherActions");
101         shared_actions = ActionGroup::create();
102
103         uimanager->add_ui_from_file ("mtest.menus");
104         other_uimanager->add_ui_from_file ("mtest_other.menus");
105         
106         AccelMap::load ("mtest.bindings");
107
108         make_action (shared_actions, "SharedMenuBar", "shared");
109         make_action (shared_actions, "SharedMenu", "sharedm");
110         Glib::RefPtr<Action> act = make_action (shared_actions, "Baz", "baz", bind (sigc::ptr_fun (printit), "baz"), GDK_p, Gdk::MOD1_MASK);
111         
112         act->connect_proxy (button);
113         act->connect_proxy (other_button);
114
115         make_action (actions, "TopMenu", "top");
116         make_action (actions, "Foo", "foo", bind (sigc::ptr_fun (printit), "foo"), GDK_p, Gdk::ModifierType (0));
117         make_action (actions, "Bar", "bar", bind (sigc::ptr_fun (printit), "bar"), GDK_p, Gdk::CONTROL_MASK);
118         make_action (other_actions, "OTopMenu", "otop");
119         make_action (other_actions, "OFoo", "foo", bind (sigc::ptr_fun (printit), "o-foo"), GDK_p, Gdk::ModifierType (0));
120         make_action (other_actions, "OBar", "bar", bind (sigc::ptr_fun (printit), "o-bar"), GDK_p, Gdk::CONTROL_MASK);
121         
122         other_uimanager->insert_action_group (other_actions);
123         other_uimanager->insert_action_group (shared_actions);
124
125         uimanager->insert_action_group (actions);
126         uimanager->insert_action_group (shared_actions);
127         
128         shared_uimanager->insert_action_group (shared_actions);
129
130         other_window.add_accel_group (other_uimanager->get_accel_group());
131         other_window.add_accel_group (shared_uimanager->get_accel_group());
132
133         window.add_accel_group (uimanager->get_accel_group());
134         window.add_accel_group (shared_uimanager->get_accel_group());
135
136         Gtk::MenuBar* m;
137
138         m = dynamic_cast<MenuBar*>(other_uimanager->get_widget ("/OTop"));
139
140         other_vpacker.pack_start (*m);
141         other_vpacker.pack_start (other_button);
142
143         other_window.add (other_vpacker);
144         other_window.show_all ();
145
146         m = dynamic_cast<MenuBar*>(uimanager->get_widget ("/Top"));
147
148         vpacker.pack_start (*m);
149         vpacker.pack_start (button);
150
151         shared_uimanager->add_ui_from_file ("mtest_shared.menu");
152
153         MenuBar* item = dynamic_cast<MenuBar*> (shared_uimanager->get_widget ("/SharedMenuBar"));
154
155         window.add (vpacker);
156         window.show_all ();
157
158         Settings::get_default()->property_gtk_can_change_accels() = true;
159
160         cerr << " shared = " << shared_uimanager->get_accel_group()
161              << " first = " << uimanager->get_accel_group()
162              << " second = " << other_uimanager->get_accel_group ()
163              << endl;
164
165         app.run ();
166
167         return 0;
168 }