[gdlmm] Example rewritten in a more C++ way.
- From: Fabien Parent <fparent src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gdlmm] Example rewritten in a more C++ way.
- Date: Sun, 3 Jul 2011 19:43:08 +0000 (UTC)
commit 1acf16b541d8e8460275d174717cb30e51e0414b
Author: Fabien Parent <parent f gmail com>
Date: Sun Jul 3 21:42:27 2011 +0200
Example rewritten in a more C++ way.
examples/dock.cc | 394 +++++++++++++++++++++++++++++-------------------------
1 files changed, 214 insertions(+), 180 deletions(-)
---
diff --git a/examples/dock.cc b/examples/dock.cc
index d90e485..5a151c4 100644
--- a/examples/dock.cc
+++ b/examples/dock.cc
@@ -1,5 +1,5 @@
/**
- * Copyright (C) 2009 Fabien Parent <parent f gmail com>
+ * Copyright (C) 2009-2011 Fabien Parent <parent f gmail com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -18,196 +18,230 @@
#include <gtkmm.h>
#include <gdlmm.h>
-#include <gdl/gdl.h>
-
-static Gtk::Widget* create_text_item(void)
+class GdlExampleWindow : public Gtk::Window
{
- Gtk::VBox* vbox = new Gtk::VBox(false);
- Gtk::TextView* text = new Gtk::TextView();
- Gtk::ScrolledWindow* scrolledwindow = new Gtk::ScrolledWindow();
- scrolledwindow->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
- scrolledwindow->set_shadow_type(Gtk::SHADOW_ETCHED_IN);
- scrolledwindow->add(*Gtk::manage(text));
- vbox->pack_start(*Gtk::manage(scrolledwindow));
- vbox->show_all();
-
- return Gtk::manage(vbox);
-}
+public:
+ GdlExampleWindow() :
+ m_layout_manager(Gdl::DockLayout::create(m_dock)),
+ m_ph1("ph1", m_dock, Gdl::DOCK_TOP, false),
+ m_ph2("ph2", m_dock, Gdl::DOCK_BOTTOM, false),
+ m_ph3("ph3", m_dock, Gdl::DOCK_LEFT, false),
+ m_ph4("ph4", m_dock, Gdl::DOCK_RIGHT, false)
+ {
+ Gtk::Button* save_button = new Gtk::Button(Gtk::Stock::SAVE);
+ Gtk::Button* layout_manager_button = new Gtk::Button("Layout Manager");
+ Gtk::Button* dump_button = new Gtk::Button("Dump XML");
-static Gtk::Button* create_item(const Glib::ustring& button_title)
-{
- Gtk::Button* button = new Gtk::Button(button_title);
- button->show();
-
- return Gtk::manage(button);
-}
+ Gdl::DockBar* dockbar = new Gdl::DockBar(m_dock);
+ dockbar->set_style(Gdl::DOCK_BAR_TEXT);
-static void on_style_button_toggled(Gtk::RadioButton* button, Gdl::Dock& dock, Gdl::SwitcherStyle style)
-{
- Glib::RefPtr<Gdl::DockMaster> master = dock.property_master();
- if (button->get_active())
- {
- master->property_switcher_style() = style;
- }
-}
+ Gtk::Box* box = new Gtk::HBox(false, 5);
+ Gtk::Box* button_box = new Gtk::HBox(true, 5);
-static Gtk::RadioButton* create_style_button(Gdl::Dock& dock, Gtk::VBox* box, Gtk::RadioButtonGroup* group, Gdl::SwitcherStyle style, const Glib::ustring& style_text)
-{
- Gdl::SwitcherStyle current_style;
- Gtk::RadioButton* button;
- if (group)
- button = new Gtk::RadioButton(*group, style_text);
- else
- button = new Gtk::RadioButton(style_text);
-
- Glib::RefPtr<Gdl::DockMaster> master = dock.property_master();
- current_style = master->property_switcher_style();
-
- if (current_style == style)
- {
- button->set_active(true);
- }
-
- button->signal_toggled().connect(sigc::bind<Gtk::RadioButton*, Gdl::Dock&, Gdl::SwitcherStyle>(sigc::ptr_fun(&on_style_button_toggled), button, dock, style));
- box->pack_start(*Gtk::manage(button), false, false);
- return button;
-}
+ Gtk::Box* table = new Gtk::VBox(false, 5);
+ table->set_border_width(10);
+ table->pack_start(*Gtk::manage(box));
+ table->pack_end(*Gtk::manage(button_box), false, false);
-static Gtk::Widget* create_styles_item(Gdl::Dock& dock)
-{
- Gtk::VBox* vbox = new Gtk::VBox(false);
- Gtk::RadioButtonGroup* group;
-
- group = &(create_style_button(dock, vbox, 0, Gdl::SWITCHER_STYLE_ICON, "Only icon")->get_group());
- create_style_button(dock, vbox, group, Gdl::SWITCHER_STYLE_TEXT, "Only text");
- create_style_button(dock, vbox, group, Gdl::SWITCHER_STYLE_BOTH, "Both icons and texts");
- create_style_button(dock, vbox, group, Gdl::SWITCHER_STYLE_TOOLBAR, "Desktop toolbar style");
- create_style_button(dock, vbox, group, Gdl::SWITCHER_STYLE_TABS, "Notebook tabs");
- create_style_button(dock, vbox, group, Gdl::SWITCHER_STYLE_NONE, "None of the above");
-
- vbox->show_all();
-
- return Gtk::manage(vbox);
-}
+ box->pack_start(*Gtk::manage(dockbar), false, false);
+ box->pack_end(m_dock);
-static void button_dump_cb(Glib::RefPtr<Gdl::DockLayout> layout)
-{
- layout->save_to_file("layout.xml");
-}
+ button_box->pack_end(*Gtk::manage(save_button), false, true);
+ button_box->pack_end(*Gtk::manage(layout_manager_button), false, true);
+ button_box->pack_end(*Gtk::manage(dump_button), false, true);
-static void run_layout_manager_cb (Glib::RefPtr<Gdl::DockLayout> layout)
-{
- layout->run_manager();
-}
+ save_button->signal_clicked().connect(sigc::mem_fun
+ (*this, &GdlExampleWindow::save_layout));
+ layout_manager_button->signal_clicked().connect(sigc::mem_fun
+ (*this, &GdlExampleWindow::run_layout_manager));
+ dump_button->signal_clicked().connect(sigc::mem_fun
+ (*this, &GdlExampleWindow::dump_xml));
-static void save_layout_cb(Glib::RefPtr<Gdl::DockLayout> layout)
-{
- Gtk::Dialog dialog("New Layout");
- Gtk::HBox hbox;
- hbox.set_border_width(8);
- dialog.get_vbox()->pack_start(hbox, false, false);
- dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK);
-
- Gtk::Label label("Name:");
- hbox.pack_start(label, false, false);
-
- Gtk::Entry entry;
- hbox.pack_start(entry);
-
- hbox.show_all();
-
- if (dialog.run() == Gtk::RESPONSE_OK)
- {
- layout->save_layout(entry.get_text());
- }
-}
+ create_items();
-static void on_change_name(Gdl::DockItem& item)
-{
- static int index = 10;
- item.property_long_name() = Glib::ustring::compose("Item %1", index++);
-}
+ set_title("Docking widget test");
+ set_default_size(400, 400);
+ add(*Gtk::manage(table));
+ show_all_children();
+ }
+
+ void create_items()
+ {
+ Gdl::DockItem* items[4];
+ Gdl::DockItem* item1 = new Gdl::DockItem
+ ("item1", "Item #1", Gdl::DOCK_ITEM_BEH_LOCKED);
+ Gdl::DockItem* item2 = new Gdl::DockItem(
+ "item2",
+ "Item #2: Select the switcher style for notebooks",
+ Gtk::Stock::EXECUTE);
+ Gdl::DockItem* item3 = new Gdl::DockItem(
+ "item3",
+ "Item #3 has accented characters (ÃÃÃÃÃÃ)",
+ Gtk::Stock::CONVERT,
+ Gdl::DOCK_ITEM_BEH_NORMAL | Gdl::DOCK_ITEM_BEH_CANT_CLOSE);
+ items[0] = new Gdl::DockItem(
+ "Item #4",
+ "Item #4",
+ Gtk::Stock::JUSTIFY_FILL,
+ Gdl::DOCK_ITEM_BEH_NORMAL | Gdl::DOCK_ITEM_BEH_CANT_ICONIFY);
+
+ m_dock.add_item(*Gtk::manage(item1), Gdl::DOCK_TOP);
+ m_dock.add_item(*Gtk::manage(item2), Gdl::DOCK_RIGHT);
+ m_dock.add_item(*Gtk::manage(item3), Gdl::DOCK_BOTTOM);
+ m_dock.add_item(*Gtk::manage(items[0]), Gdl::DOCK_BOTTOM);
+
+ for (int i = 1; i < 3; i++)
+ {
+ Glib::ustring name = Glib::ustring::compose("Item #%1", i + 4);
+ items[i] = Gtk::manage
+ (new Gdl::DockItem(name, name, Gtk::Stock::NEW));
+ items[i]->add(*create_text_item());
+ items[0]->dock(*((Gdl::DockObject*) items[i]), Gdl::DOCK_CENTER);
+ }
+
+ Gtk::Button* name_button = new Gtk::Button("Button 3");
+ name_button->signal_clicked().connect(sigc::bind<Gdl::DockItem&>
+ (sigc::mem_fun(*this, &GdlExampleWindow::on_change_name), *item3));
+
+ item2->property_resize() = false;
+
+ item1->add(*create_text_item());
+ item2->add(*create_styles_item());
+ item3->add(*Gtk::manage(name_button));
+ items[0]->add(*create_text_item());
+
+ item3->dock_to(*item1, Gdl::DOCK_TOP);
+ item2->dock_to(*item3, Gdl::DOCK_RIGHT);
+ item2->dock_to(*item3, Gdl::DOCK_LEFT);
+ item2->dock_floating();
+ }
+
+protected:
+ void on_change_name(Gdl::DockItem& item)
+ {
+ static int index = 10;
+ item.property_long_name() = Glib::ustring::compose("Item %1", index++);
+ }
+
+ void on_style_button_toggled(Gtk::RadioButton* button,
+ Gdl::SwitcherStyle style)
+ {
+ Glib::RefPtr<Gdl::DockMaster> master = m_dock.property_master();
+ if (button->get_active())
+ master->property_switcher_style() = style;
+ }
+
+ void dump_xml()
+ {
+ m_layout_manager->save_to_file("layout.xml");
+ }
+
+ void run_layout_manager ()
+ {
+ m_layout_manager->run_manager();
+ }
+
+ void save_layout()
+ {
+ Gtk::Dialog dialog("New Layout");
+ Gtk::HBox hbox;
+ hbox.set_border_width(8);
+ dialog.get_vbox()->pack_start(hbox, false, false);
+ dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK);
+
+ Gtk::Label label("Name:");
+ hbox.pack_start(label, false, false);
+
+ Gtk::Entry entry;
+ hbox.pack_start(entry);
+
+ hbox.show_all();
+
+ if (dialog.run() == Gtk::RESPONSE_OK)
+ m_layout_manager->save_layout(entry.get_text());
+ }
+
+ /**
+ * Helpers
+ */
+ Gtk::Widget* create_text_item()
+ {
+ Gtk::Box* box = new Gtk::VBox(false);
+ Gtk::TextView* text = new Gtk::TextView();
+ Gtk::ScrolledWindow* scrolledwindow = new Gtk::ScrolledWindow();
+ scrolledwindow->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
+ scrolledwindow->set_shadow_type(Gtk::SHADOW_ETCHED_IN);
+ scrolledwindow->add(*Gtk::manage(text));
+ box->pack_start(*Gtk::manage(scrolledwindow));
+ box->show_all();
+
+ return Gtk::manage(box);
+ }
+
+ Gtk::RadioButton* create_style_button(Gtk::Box* box,
+ Gtk::RadioButtonGroup* group,
+ Gdl::SwitcherStyle style,
+ const Glib::ustring& style_text)
+ {
+ Gdl::SwitcherStyle current_style;
+ Gtk::RadioButton* button;
+ if (group)
+ button = new Gtk::RadioButton(*group, style_text);
+ else
+ button = new Gtk::RadioButton(style_text);
+
+ Glib::RefPtr<Gdl::DockMaster> master = m_dock.property_master();
+ current_style = master->property_switcher_style();
+
+ if (current_style == style)
+ button->set_active(true);
+
+ button->signal_toggled().connect
+ (sigc::bind<Gtk::RadioButton*, Gdl::SwitcherStyle>(sigc::mem_fun
+ (*this, &GdlExampleWindow::on_style_button_toggled),
+ button, style));
+ box->pack_start(*Gtk::manage(button), false, false);
+ return Gtk::manage(button);
+ }
+
+ Gtk::Widget* create_styles_item()
+ {
+ Gtk::Box* box = new Gtk::VBox(false);
+ Gtk::RadioButtonGroup group;
+
+ group = create_style_button
+ (box,0, Gdl::SWITCHER_STYLE_ICON, "Only icon")->get_group();
+ create_style_button(box, &group, Gdl::SWITCHER_STYLE_TEXT, "Only text");
+ create_style_button
+ (box, &group, Gdl::SWITCHER_STYLE_BOTH, "Both icons and texts");
+ create_style_button
+ (box, &group, Gdl::SWITCHER_STYLE_TOOLBAR, "Desktop toolbar style");
+ create_style_button
+ (box, &group, Gdl::SWITCHER_STYLE_TABS, "Notebook tabs");
+ create_style_button
+ (box, &group, Gdl::SWITCHER_STYLE_NONE, "None of the above");
+ box->show_all();
+ return Gtk::manage(box);
+ }
+
+private:
+ Gdl::Dock m_dock;
+ Glib::RefPtr<Gdl::DockLayout> m_layout_manager;
+
+ Gdl::DockPlaceholder m_ph1;
+ Gdl::DockPlaceholder m_ph2;
+ Gdl::DockPlaceholder m_ph3;
+ Gdl::DockPlaceholder m_ph4;
+};
int main(int argc, char** argv)
{
- Gtk::Main kit(argc, argv);
- Gdl::init();
- Gtk::Window window;
-
- window.set_title("Docking widget test");
- window.set_default_size(400, 400);
-
- Gtk::VBox table;
- table.set_border_width(10);
-
- Gtk::HBox box, button_box(true);
-
- Gtk::Button save_button(Gtk::Stock::SAVE), layout_manager_button("Layout Manager"), dump_button("Dump XML");
-
- Gdl::DockItem item1("item1", "Item #1", Gdl::DOCK_ITEM_BEH_LOCKED);
- Gdl::DockItem item2("item2", "Item #2: Select the switcher style for notebooks", Gtk::Stock::EXECUTE);
- Gdl::DockItem item3("item3", "Item #3 has accented characters (ÃÃÃÃÃÃ)", Gtk::Stock::CONVERT, Gdl::DOCK_ITEM_BEH_NORMAL | Gdl::DOCK_ITEM_BEH_CANT_CLOSE);
- Gdl::DockItem* items[4];
- items[0] = new Gdl::DockItem("Item #4", "Item #4", Gtk::Stock::JUSTIFY_FILL, Gdl::DOCK_ITEM_BEH_NORMAL | Gdl::DOCK_ITEM_BEH_CANT_ICONIFY);
-
- Gdl::Dock dock;
- dock.add_item(item1, Gdl::DOCK_TOP);
- dock.add_item(item2, Gdl::DOCK_RIGHT);
- dock.add_item(item3, Gdl::DOCK_BOTTOM);
- dock.add_item(*(items[0]), Gdl::DOCK_BOTTOM);
-
- item1.add(*create_text_item());
- item2.add(*create_styles_item(dock));
- items[0]->add(*create_text_item());
-
- Gtk::Button& name_button = *create_item("Button 3");
- name_button.signal_clicked().connect(sigc::bind<Gdl::DockItem&>(sigc::ptr_fun(&on_change_name), item3));
- item3.add(name_button);
-
- item2.property_resize() = false;
-
- for (int i = 1; i < 3; i++)
- {
- Glib::ustring name = Glib::ustring::compose("Item #%1", i + 4);
- items[i] = new Gdl::DockItem(name, name, Gtk::Stock::NEW);
- items[i]->add(*create_text_item());
- items[0]->dock(*((Gdl::DockObject*) items[i]), Gdl::DOCK_CENTER);
- }
-
- item3.dock_to(item1, Gdl::DOCK_TOP);
- item2.dock_to(item3, Gdl::DOCK_RIGHT);
- item2.dock_to(item3, Gdl::DOCK_LEFT);
- item2.dock_floating();
-
- Gdl::DockBar dock_bar(dock);
- dock_bar.set_style(Gdl::DOCK_BAR_TEXT);
-
- table.pack_start(box);
- box.pack_start(dock_bar, false, false);
- box.pack_end(dock);
-
- window.add(table);
- table.pack_end(button_box, false, false);
-
- Glib::RefPtr<Gdl::DockLayout> layout_manager = Gdl::DockLayout::create(dock);
-
- button_box.pack_end(save_button, false, true);
- button_box.pack_end(layout_manager_button, false, true);
- button_box.pack_end(dump_button, false, true);
-
- save_button.signal_clicked().connect(sigc::bind<Glib::RefPtr<Gdl::DockLayout> >(sigc::ptr_fun(&save_layout_cb), layout_manager));
- layout_manager_button.signal_clicked().connect(sigc::bind<Glib::RefPtr<Gdl::DockLayout> >(sigc::ptr_fun(&run_layout_manager_cb), layout_manager));
- dump_button.signal_clicked().connect(sigc::bind<Glib::RefPtr<Gdl::DockLayout> >(sigc::ptr_fun(&button_dump_cb), layout_manager));
-
- Gdl::DockPlaceholder("ph1", dock, Gdl::DOCK_TOP, false);
- Gdl::DockPlaceholder("ph2", dock, Gdl::DOCK_BOTTOM, false);
- Gdl::DockPlaceholder("ph3", dock, Gdl::DOCK_LEFT, false);
- Gdl::DockPlaceholder("ph4", dock, Gdl::DOCK_RIGHT, false);
-
-
- window.show_all_children();
- Gtk::Main::run(window);
-
- return 0;
+ Gtk::Main kit(argc, argv);
+ Gdl::init();
+
+ GdlExampleWindow window;
+ Gtk::Main::run(window);
+
+ return 0;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]