[glom] Egg::SpreadTable: Add a test.
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glom] Egg::SpreadTable: Add a test.
- Date: Tue, 19 Apr 2011 18:17:43 +0000 (UTC)
commit 00717c1502418a4c97e35f6aa1e52aff8c0dde8a
Author: Murray Cumming <murrayc murrayc com>
Date: Tue Apr 19 18:34:40 2011 +0200
Egg::SpreadTable: Add a test.
* Makefile_tests.am:
* glom/utility_widgets/eggspreadtablemm/test_preadtablemm.[h|cc]:
Add a test based on the C test. It seems to work fine.
ChangeLog | 8 +
Makefile_tests.am | 7 +
.../eggspreadtablemm/test_spreadtablednd.cc | 357 ++++++++++++++++++++
3 files changed, 372 insertions(+), 0 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 1052646..3ae56e9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2011-04-19 Murray Cumming <murrayc murrayc com>
+ Egg::SpreadTable: Add a test.
+
+ * Makefile_tests.am:
+ * glom/utility_widgets/eggspreadtablemm/test_preadtablemm.[h|cc]:
+ Add a test based on the C test. It seems to work fine.
+
+2011-04-19 Murray Cumming <murrayc murrayc com>
+
Egg::SpreadTable: Derive from (and implement) Orientable.
* glom/utility_widgets/eggspreadtablemm/eggspreadtablemm.[h|cc]:
diff --git a/Makefile_tests.am b/Makefile_tests.am
index d9b6acc..758156a 100644
--- a/Makefile_tests.am
+++ b/Makefile_tests.am
@@ -133,6 +133,7 @@ if GLOM_ENABLE_UI
# TODO: Shouldn't test_pyembed be non-UI?
check_PROGRAMS += \
glom/utility_widgets/test_flowtable \
+ glom/utility_widgets/eggspreadtablemm/test_spreadtablednd \
glom/test_pyembed \
tests/test_glade_derived_instantiation \
tests/glade_toplevels_instantiation \
@@ -162,6 +163,12 @@ glom_utility_widgets_test_flowtable_SOURCES = \
glom_utility_widgets_test_flowtable_LDADD = $(GLOM_LIBS)
glom_utility_widgets_test_flowtable_CPPFLAGS = $(tests_cppflags_ui)
+glom_utility_widgets_eggspreadtablemm_test_spreadtablednd_SOURCES = \
+ $(glom_eggspreadtable_files) \
+ glom/utility_widgets/eggspreadtablemm/test_spreadtablednd.cc
+glom_utility_widgets_eggspreadtablemm_test_spreadtablednd_LDADD = $(GLOM_LIBS)
+glom_utility_widgets_eggspreadtablemm_test_spreadtablednd_CPPFLAGS = $(tests_cppflags_ui)
+
# Disabled because it slows down the build, because it builds all Glom files again, using its own flags:
#glom_mode_data_test_flowtablewithfields_SOURCES = \
# $(glom_source_files) \
diff --git a/glom/utility_widgets/eggspreadtablemm/test_spreadtablednd.cc b/glom/utility_widgets/eggspreadtablemm/test_spreadtablednd.cc
new file mode 100644
index 0000000..5368663
--- /dev/null
+++ b/glom/utility_widgets/eggspreadtablemm/test_spreadtablednd.cc
@@ -0,0 +1,357 @@
+/* Glom
+ *
+ * Copyright (C) 2010 Openismus GmbH
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <gtkmm.h>
+#include <glom/utility_widgets/eggspreadtable/eggspreadtablednd.h>
+#include <glom/utility_widgets/eggspreadtablemm/eggspreadtabledndmm.h>
+
+static const guint INITIAL_HSPACING = 2;
+static const guint INITIAL_VSPACING = 2;
+static const guint INITIAL_LINES = 3;
+static const Gtk::Align INITIAL_HALIGN = Gtk::ALIGN_FILL;
+
+static Egg::SpreadTableDnd *paper = 0;
+static Gtk::ComboBoxText* combo_halign = 0;
+static Gtk::ComboBoxText* combo_orientation = 0;
+static Gtk::SpinButton* spinbutton_lines = 0;
+static Gtk::Align child_halign = INITIAL_HALIGN;
+static bool child_accepts_drops = true;
+static bool parent_accepts_drops = true;
+
+
+static void
+populate_spread_table_wrappy(Egg::SpreadTable* spread_table)
+{
+ const gchar *strings[] = {
+ "These are", "some wrappy label", "texts", "of various", "lengths.",
+ "They should always be", "shown", "consecutively. Except it's",
+ "hard to say", "where exactly the", "label", "will wrap", "and where exactly",
+ "the actual", "container", "will wrap.", "This label is really really really long !",
+ "Let's add some more", "labels to the",
+ "mix. Just to", "make sure we", "got something to work", "with here."
+ };
+
+ /* Remove all children first */
+ typedef std::vector<Gtk::Widget*> type_vec_widgets;
+ type_vec_widgets children = paper->get_children();
+ for(type_vec_widgets::iterator iter = children.begin();
+ iter != children.end(); ++iter)
+ {
+ Gtk::Widget *child = *iter;
+ paper->remove(*child);
+ delete child;
+ }
+
+ for(gsize i = 0; i < G_N_ELEMENTS (strings); ++i)
+ {
+ Gtk::Label* label = Gtk::manage(new Gtk::Label(strings[i]));
+ Gtk::Frame* frame = Gtk::manage(new Gtk::Frame());
+ Gtk::EventBox* eventbox = Gtk::manage(new Gtk::EventBox());
+ label->show();
+ frame->show();
+ eventbox->show();
+
+ frame->add(*label);
+ eventbox->add(*frame);
+
+ label->set_line_wrap();
+ label->set_line_wrap_mode(Pango::WRAP_WORD);
+ label->set_width_chars(10);
+
+ frame->set_halign(child_halign);
+
+ spread_table->insert_child(*eventbox, -1);
+ }
+}
+
+static void
+on_combo_orientation_changed()
+{
+ Gtk::Orientation orientation = (Gtk::Orientation)combo_orientation->get_active_row_number();
+
+ paper->set_orientation(orientation);
+}
+
+static void
+on_spinbutton_lines_changed()
+{
+ const int lines = spinbutton_lines->get_value_as_int();
+
+ paper->set_lines(lines);
+}
+
+static void
+on_spinbutton_spacing_changed(Gtk::SpinButton* spinbutton, Gtk::Orientation orientation)
+{
+ const int state = spinbutton->get_value_as_int();
+
+ if(orientation == Gtk::ORIENTATION_HORIZONTAL)
+ paper->set_horizontal_spacing(state);
+ else
+ paper->set_vertical_spacing(state);
+}
+
+static void
+on_combo_halign_changed()
+{
+ child_halign = (Gtk::Align)combo_halign->get_active_row_number();
+
+ populate_spread_table_wrappy(paper);
+}
+
+static bool
+on_spreadtable_parent_drop_possible(Gtk::Widget* /* child */)
+{
+ if(parent_accepts_drops)
+ return true;
+
+ return false;
+}
+
+static bool
+on_inner_spreadtable_drop_possible(Gtk::Widget* /* child */)
+{
+ if(child_accepts_drops)
+ return true;
+
+ return false;
+}
+
+static void
+on_togglebutton_toggled(Gtk::ToggleButton* togglebutton, bool& value)
+{
+ value = togglebutton->get_active();
+}
+
+static Gtk::Window *
+create_window()
+{
+ Gtk::Window* window = new Gtk::Window();
+ Gtk::HBox* hbox = Gtk::manage(new Gtk::HBox(false, 2));
+ hbox->show();
+ Gtk::VBox* vbox = Gtk::manage(new Gtk::VBox(false, 6));
+ vbox->show();
+
+ window->set_border_width (8);
+
+ window->add (*hbox);
+ hbox->pack_start(*vbox, false, false, 0);
+
+ Gtk::Frame* frame = Gtk::manage(new Gtk::Frame("SpreadTable"));
+ frame->show();
+ hbox->pack_start(*frame, true, true, 0);
+
+ Gtk::ScrolledWindow* swindow = Gtk::manage(new Gtk::ScrolledWindow());
+ swindow->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
+
+ swindow->show();
+ frame->add(*swindow);
+
+ paper =
+ Gtk::manage(new Egg::SpreadTableDnd(
+ Gtk::ORIENTATION_VERTICAL,
+ INITIAL_LINES));
+
+ paper->set_vertical_spacing (INITIAL_VSPACING);
+ paper->set_horizontal_spacing (INITIAL_HSPACING);
+ paper->show();
+
+ swindow->add(*paper);
+
+ /* Add SpreadTable test control frame */
+ Gtk::Expander* expander = Gtk::manage(new Gtk::Expander("SpreadTable controls"));
+ expander->set_expanded();
+ Gtk::VBox* paper_cntl = Gtk::manage(new Gtk::VBox(false, 2));
+ paper_cntl->show();;
+ expander->show();
+ expander->add(*paper_cntl);
+ vbox->pack_start(*expander, false, false, 0);
+
+ /* Add Orientation control */
+ combo_orientation = Gtk::manage(new Gtk::ComboBoxText());
+ combo_orientation->append("Horizontal");
+ combo_orientation->append("Vertical");
+ combo_orientation->set_active(1);
+ combo_orientation->show();
+
+ combo_orientation->set_tooltip_text("Set the spread_table orientation");
+ paper_cntl->pack_start(*combo_orientation, false, false, 0);
+
+ combo_orientation->signal_changed().connect(
+ sigc::ptr_fun(&on_combo_orientation_changed));
+
+ /* Add horizontal/vertical spacing controls */
+ hbox = Gtk::manage(new Gtk::HBox(false, 2));
+ hbox->show();
+
+ Gtk::Widget* label = Gtk::manage(new Gtk::Label("H Spacing"));
+ label->show();
+ hbox->pack_start(*label, true, true, 0);
+
+ Gtk::SpinButton* spinbutton = Glib::wrap(GTK_SPIN_BUTTON(gtk_spin_button_new_with_range (0, 30, 1)));
+ spinbutton->set_value(INITIAL_HSPACING);
+ spinbutton->show();
+
+ spinbutton->set_tooltip_text("Set the horizontal spacing between children");
+ hbox->pack_start(*spinbutton, false, false, 0);
+
+ spinbutton->signal_changed().connect(
+ sigc::bind(
+ sigc::ptr_fun(&on_spinbutton_spacing_changed),
+ spinbutton, Gtk::ORIENTATION_HORIZONTAL));
+ spinbutton->signal_value_changed().connect(
+ sigc::bind(
+ sigc::ptr_fun(&on_spinbutton_spacing_changed),
+ spinbutton, Gtk::ORIENTATION_HORIZONTAL));
+
+ paper_cntl->pack_start(*hbox, false, false, 0);
+
+ hbox = Gtk::manage(new Gtk::HBox(false, 2));
+ hbox->show();
+
+ label = Gtk::manage(new Gtk::Label("V Spacing"));
+ label->show();
+ hbox->pack_start(*label, true, true, 0);
+
+ spinbutton = Glib::wrap(GTK_SPIN_BUTTON(gtk_spin_button_new_with_range (0, 30, 1)));
+ spinbutton->set_value(INITIAL_VSPACING);
+ spinbutton->show();
+
+ spinbutton->set_tooltip_text("Set the vertical spacing between children");
+ hbox->pack_start(*spinbutton, false, false, 0);
+
+ spinbutton->signal_changed().connect(
+ sigc::bind(
+ sigc::ptr_fun(&on_spinbutton_spacing_changed),
+ spinbutton, Gtk::ORIENTATION_VERTICAL));
+ spinbutton->signal_value_changed().connect(
+ sigc::bind(
+ sigc::ptr_fun(&on_spinbutton_spacing_changed),
+ spinbutton, Gtk::ORIENTATION_VERTICAL));
+
+ paper_cntl->pack_start(*hbox, false, false, 0);
+
+ /* Add widget-drop-possible controls */
+ Gtk::ToggleButton* togglebutton = Gtk::manage(new Gtk::ToggleButton("parent accept drop"));
+ togglebutton->show();
+ togglebutton->set_active();
+ paper_cntl->pack_start(*togglebutton, false, false, 0);
+ togglebutton->signal_toggled().connect(
+ sigc::bind(
+ sigc::ptr_fun(&on_togglebutton_toggled),
+ togglebutton, parent_accepts_drops));
+
+ togglebutton = Gtk::manage(new Gtk::ToggleButton("child accept drop"));
+ togglebutton->show();
+ togglebutton->set_active();
+ paper_cntl->pack_start(*togglebutton, false, false, 0);
+ togglebutton->signal_toggled().connect(
+ sigc::bind(
+ sigc::ptr_fun(&on_togglebutton_toggled),
+ togglebutton, child_accepts_drops));
+
+ /* Add lines controls */
+ hbox = Gtk::manage(new Gtk::HBox(false, 2));
+ hbox->show();
+
+ label = Gtk::manage(new Gtk::Label("Lines"));
+ label->show();
+ hbox->pack_start(*label, true, true, 0);
+
+ spinbutton_lines = Glib::wrap(GTK_SPIN_BUTTON(gtk_spin_button_new_with_range (1, 30, 1)));
+ spinbutton_lines->set_value(INITIAL_LINES);
+ spinbutton_lines->show();
+
+ spinbutton_lines->set_tooltip_text("Set the horizontal spacing between children");
+ hbox->pack_start(*spinbutton_lines, false, false, 0);
+
+ spinbutton_lines->signal_changed().connect(
+ sigc::ptr_fun(&on_spinbutton_lines_changed));
+ spinbutton_lines->signal_value_changed().connect(
+ sigc::ptr_fun(&on_spinbutton_lines_changed));
+
+ paper_cntl->pack_start(*hbox, false, false, 0);
+
+
+ /* Add test items control frame */
+ expander = Gtk::manage(new Gtk::Expander("Test item controls"));
+ expander->set_expanded();
+ Gtk::VBox* items_cntl = Gtk::manage(new Gtk::VBox(false, 2));
+ items_cntl->show();
+ expander->show();
+ expander->add(*items_cntl);
+ vbox->pack_start(*expander, false, false, 0);
+
+ /* Add child halign control */
+ combo_halign = Gtk::manage(new Gtk::ComboBoxText());
+ combo_halign->append("Fill");
+ combo_halign->append("Start");
+ combo_halign->append("End");
+ combo_halign->append("Center");
+ combo_halign->set_active(INITIAL_HALIGN);
+ combo_halign->show();
+
+ combo_halign->set_tooltip_text("Set the children's halign property");
+ items_cntl->pack_start(*combo_halign, false, false, 0);
+
+ combo_halign->signal_changed().connect(
+ sigc::ptr_fun(&on_combo_halign_changed));
+
+ populate_spread_table_wrappy(paper);
+
+ /* Embed another dnd spread table */
+ Egg::SpreadTableDnd* spreadtable_inner =
+ Gtk::manage(new Egg::SpreadTableDnd(
+ Gtk::ORIENTATION_VERTICAL,
+ INITIAL_LINES));
+
+ spreadtable_inner->set_vertical_spacing(INITIAL_VSPACING);
+ spreadtable_inner->set_horizontal_spacing(INITIAL_HSPACING);
+
+ frame = Gtk::manage(new Gtk::Frame());
+ spreadtable_inner->show();
+ frame->show();
+ spreadtable_inner->set_size_request(40, 40);
+ frame->add(*spreadtable_inner);
+
+ paper->insert_child(*frame, 5);
+
+ window->set_default_size (500, 400);
+
+
+ /* Signals to control drop allowed or not */
+ paper->signal_widget_drop_possible().connect(
+ sigc::ptr_fun(&on_spreadtable_parent_drop_possible));
+ spreadtable_inner->signal_widget_drop_possible().connect(
+ sigc::ptr_fun(&on_inner_spreadtable_drop_possible));
+
+ return window;
+}
+
+int
+main(int argc, char *argv[])
+{
+ Gtk::Main kit(argc, argv);
+
+ Gtk::Window* window = create_window();
+ Gtk::Main::run(*window);
+
+ return 0;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]