[glom/glom-1-16: 26/26] Merged from glom-1-14, hopefully with no losses.



commit 4a21848d712fda8a44177f0de3d90015bd8fa540
Merge: 6bf1375 55b7296
Author: Murray Cumming <murrayc murrayc com>
Date:   Sun Jul 25 15:56:46 2010 +0200

    Merged from glom-1-14, hopefully with no losses.

 ChangeLog                                          |  292 ++++++++-
 Makefile_tests.am                                  |    2 +-
 NEWS                                               |   24 +-
 configure.ac                                       |   12 +
 examples/example_smallbusiness.glom                |   28 +-
 glom/application.cc                                |  687 +++++++++++++++++++-
 glom/application.h                                 |   21 +-
 glom/bakery/app_withdoc_gtk.h                      |    6 +-
 glom/bakery/dialog_offersave.cc                    |    2 +-
 glom/base_db.h                                     |    3 +-
 glom/dialog_progress_creating.cc                   |    2 +-
 glom/frame_glom.cc                                 |   22 +-
 glom/frame_glom.h                                  |    4 +-
 glom/glom_document.dtd                             |    5 +-
 glom/libglom/connectionpool.cc                     |   73 ++-
 glom/libglom/connectionpool.h                      |   70 ++-
 glom/libglom/connectionpool_backends/backend.cc    |   15 +-
 glom/libglom/connectionpool_backends/backend.h     |   54 ++-
 glom/libglom/connectionpool_backends/postgres.cc   |  526 +++++++++++++++-
 glom/libglom/connectionpool_backends/postgres.h    |   57 ++-
 .../connectionpool_backends/postgres_central.cc    |   24 +-
 .../connectionpool_backends/postgres_central.h     |    3 -
 .../connectionpool_backends/postgres_self.cc       |  305 +++-------
 .../connectionpool_backends/postgres_self.h        |   21 +-
 glom/libglom/connectionpool_backends/sqlite.cc     |   50 +-
 glom/libglom/connectionpool_backends/sqlite.h      |    8 +-
 glom/libglom/db_utils.cc                           |   92 +++
 glom/libglom/db_utils.h                            |    2 +
 glom/libglom/document/bakery/document.cc           |    3 +-
 glom/libglom/document/document.cc                  |  220 ++++---
 glom/libglom/document/document.h                   |    4 +
 glom/libglom/spawn_with_feedback.cc                |   86 ++-
 glom/libglom/utils.cc                              |   92 +++-
 glom/libglom/utils.h                               |   16 +
 glom/main.cc                                       |   67 +-
 glom/mode_data/notebook_data.cc                    |    4 +-
 glom/mode_design/box_db_table_relationships.cc     |    9 +-
 glom/mode_design/box_db_table_relationships.h      |    5 +-
 glom/mode_design/dialog_add_related_table.h        |    3 +-
 glom/mode_design/dialog_database_preferences.h     |    3 +-
 glom/mode_design/dialog_initial_password.h         |    3 +-
 glom/mode_design/fields/combo_fieldtype.cc         |   11 +-
 glom/mode_design/layout/treestore_layout.cc        |    4 +-
 .../print_layouts/print_layout_toolbar.cc          |   14 +-
 .../print_layouts/print_layout_toolbar.h           |    2 +-
 .../print_layouts/window_print_layout_edit.h       |    2 +-
 .../dialog_relationships_overview.cc               |   76 ++--
 .../report_layout/treestore_report_layout.cc       |    1 +
 .../mode_design/script_library/dialog_new_script.h |    3 +-
 .../translation/dialog_change_language.cc          |    1 +
 .../translation/dialog_change_language.h           |    2 +-
 .../translation/dialog_copy_translation.h          |    3 +-
 .../translation/dialog_identify_original.h         |    3 +-
 .../mode_design/translation/window_translations.cc |    2 +
 glom/mode_design/users/dialog_choose_user.h        |    3 +-
 glom/mode_design/users/dialog_groups_list.cc       |    3 +-
 glom/mode_design/users/dialog_new_group.h          |    2 +-
 glom/mode_find/notebook_find.cc                    |   14 +-
 glom/print_layout/canvas_layout_item.cc            |   49 +-
 glom/utility_widgets/canvas/canvas_editable.cc     |    4 +-
 glom/utility_widgets/canvas/canvas_item_movable.h  |   12 +-
 .../cellrendererlist/cellrendererlist.h            |    7 +-
 glom/utility_widgets/db_adddel/glom_db_treemodel.h |    8 +-
 glom/utility_widgets/dialog_properties.cc          |    6 +-
 .../utility_widgets/filechooserdialog_saveextras.h |    2 +-
 glom/utility_widgets/layouttoolbar.h               |    3 +-
 glom/utility_widgets/layouttoolbarbutton.cc        |    7 +-
 glom/utility_widgets/layoutwidgetbase.h            |    8 +-
 glom/utility_widgets/sidebar.h                     |   10 +-
 glom/utils_ui.h                                    |   14 +-
 tests/test_selfhosting_new_empty.cc                |   62 +--
 71 files changed, 2449 insertions(+), 814 deletions(-)
---
diff --cc ChangeLog
index 86adb0e,6ad457f..d43cd5f
--- a/ChangeLog
+++ b/ChangeLog
@@@ -1,95 -1,298 +1,338 @@@
 -1.14.5:
 -
+ 2010-07-25  Murray Cumming  <murrayc murrayc com>
+ 
+ 	Allow unique fields with same name in multiple tables.
+ 
+ 	* glom/libglom/connectionpool_backends/postgres.cc:
+ 	change_column(): Prefix the table name to the constraint name when
+ 	setting/removing the unique-key constraint, as libgda (or PostgreSQL)
+ 	seems to do when creating a field. This prevents a clash when two tables
+ 	have the same field name, and both should be unique.
+ 	This is nasty code anyway that I would rather have in libgda.
+ 	This fixes bug #625192 (fmyhr).
+ 
 -1.14.4:
+ 
+ 2010-07-22  Murray Cumming  <murrayc murrayc com>
+ 
+ 	Added --restore command-line option.
+ 
+ 	* glom/application.[h|cc]: Added init() with a bool restore option,
+   calling do_backup_restore() if appropriate.
+ 	* glom/main.cc: Added a --restore command and pass the bool result to
+   Application::init().
+ 
+   This allows the user to restore from a backup without first loading an
+   existing file, though this is so far only possible via the terminal.
+ 
+ 2010-07-22  Murray Cumming  <murrayc murrayc com>
+ 
+   Added Developer/Restore Backup menu item.
+ 
+ 	* glom/application.[h.cc]: Added a Developer/Restore Backup menu item,
+   which lets the user choose a .tar.gz, untars it in /tmp/ and opens it.
+ 
+ 	* tests/test_selfhosting_new_empty.cc:
+ 	* glom/libglom/utils.[h|cc]: Move delete_directory() to Utils.
+   Added get_directory_child_with_suffix(), used to find the .glom file inside
+   an untarred directory.
+ 
+ 2010-07-22  Murray Cumming  <murrayc murrayc com>
+ 
+ 	Saving from a backup: Now works.
+ 
+ 	* glom/application.[h|cc]: on_document_load(): Simplify the code to
+   create from a backup, modifying the from-example code to handle it too,
+   calling a new recreate_database_from_backup() method.
+   That now creates the database and then adds the groups before trying
+   to restore from the backup file.
+ 	* glom/libglom/connectionpool_backends/backend.h: convert_backup():
+ 	* glom/libglom/connectionpool_backends/postgres.[h|cc]: convert_backup():
+ 	* glom/libglom/connectionpool_backends/sqlite.[h|cc]: convert_backup():
+   Add a database_name_parameter. This now expects the database to exist
+   already, though it should be empty. It should also already have the
+   expected groups.
+ 	* glom/libglom/connectionpool.[h|cc]: convert_backup(): Supply the
+   database name. Also update the meta data so we know about the new tables.
+ 
+ 2010-07-21  Murray Cumming  <murrayc murrayc com>
+ 
+ 	Small Business example: Add table privileges.
+ 
+ 	* examples/example_smallbusiness.glom: Give some privileges to the
+     accounts and personnel groups and resave-as-an-example. These were
+     probably lost some time.
+ 
+ 2010-07-21  Murray Cumming  <murrayc murrayc com>>
+ 
+ 	Saving as example: Fix this.
+ 
+ 	* glom/libglom/document/document.cc: set_modified(): Actually use
+     m_allow_auto_save so we don't just save every time, overwriting
+     previous saves. For instance, the examples were saved with is_example=false
+     after the document was changed back.
+ 
+ 2010-07-21  Murray Cumming  <murrayc murrayc com>>
+ 
+ 	Saving from examples: Set the table privileges mentioned in the document.
+ 
+ 	* glom/base_db.[h|cc]: Added set_table_privileges_groups_from_document().
+ 	* glom/application.cc: recreate_database_from_example(): call it.
+ 
+ 2010-07-21  Murray Cumming  <murrayc murrayc com>
+ 
+ 	Saving from examples: Create the groups mentioned in the document.
+ 
+ 	* glom/base_db.[h|cc]: Added add_groups_from_document().
+ 	* glom/application.cc: recreate_database_from_example(): call it.
+ 
+ 2010-07-20  Murray Cumming  <murrayc murrayc com>>
+ 
+ 	Fixed warnings with latest gtkmm-2.24
+ 
+ 	* glom/mode_data/notebook_data.cc:
+ 	* glom/mode_find/notebook_find.cc: Use Gtk::Notebook::append_page()
+     instead of Gtk::Notebook::pages().push_back().
+ 
+ 2010-07-13  Murray Cumming  <murrayc murrayc com>
+ 
+ 	Fixed warnings, even with the latest gtkmm-2.24.
+ 
+ 	Many files: Try to include box.h or dialog.h before other treemodel.h.
+     Sometimes just add a gtkmm.h to simplify things. This will not be necessary
+     with gtkmm-3.0 (in glom's master branch).
+ 
+ 2010-07-07  Murray Cumming  <murrayc murrayc-desktop>
+ 
+ 	PostgresQL backups: Suggest a dated name.
+ 
+ 	* glom/application.cc: on_menu_developer_export_backup(): Suggest
+     a directory name based on the current name and the date/time.
+     Also use the directory name for the .glom filename, as we usually would do,
+     instead of calling it just backup.glom.
+ 
+ 2010-07-07  Murray Cumming  <murrayc murrayc com>
+ 
+ 	PostgreSQL backups: Archive the directory in a .tar.gz..
+ 
+ 	* configure.ac: Check for the tar and gzip executables.
+ 	* glom/application.cc: on_menu_developer_export_backup(): Use tar
+     via the command line, to put it all in a .tar.gz, so it is self-contained.
+ 
+ 2010-07-07  Murray Cumming  <murrayc murrayc com>
+ 
+ 	PostgreSQL backups: Use .pgpass.
+ 
+ 	* glom/libglom/connectionpool_backends/postgres.[h|cc]:
+ 	* glom/libglom/connectionpool_backends/postgres_self.[h|cc]:
+     Move create_text_file() from PostgresSelf to Postgres and add an
+     only_for_current_user bool parameter, so we can use it in a
+     new save_password_to_pgpass() method.
+     save_backup(), convert_backup(): Temporarily store the password in
+     ~/.pgpass, so pg_dump and pg_restore actually work.
+ 
+ 2010-07-05  Murray Cumming  <murrayc murrayc com>
+ 
+ 	Show progress in the UI during backup saving and restoring.
+ 
+ 	* glom/application.[h|cc]: on_document_load(),
+     on_menu_developer_export_backup(): Show a pulsing progress dialog while
+     waiting for backup exporting and restoring.
+     on_menu_developer_export_backup(): Close the file chooser dialog as soon
+     as we stop using it.
+ 
+ 2010-07-03  Murray Cumming  <murrayc murrayc com>
+ 
+ 	Improve backup saving and add backup restoring.
+ 
+ 	* glom/libglom/document/document.[h|cc]: Added get/set_is_backup_file(),
+ 	saved in the XML document..
+   on_menu_developer_export_backup(): Mark the .glom file as a backup file.
+ 	Rename recreate_database() to recreate_database_from_example().
+ 	on_document_load(): Handle backup .glom files similarly to examples files,
+ 	but using the backup file instead of example data.
+ 	* glom/frame_glom.cc:
+ 	* glom/libglom/connection_pool.[h|cc]:
+ 	* glom/libglom/connectionpool_backends/backend.[h|cc]: startup(): Return a
+ 	StartupErrors enum, to provide more clues, for instance to say that backup
+ 	data was found.
+ 	Add get/set_database_directory_uri(), replacing the one in sqlite.[h|cc] and
+ 	replacing set_self_hosting_data_uri() in postgres_self.[hc|cc].
+ 	save_backup(): Don't take a filepath - use get_database_directory_uri()
+ 	instead.
+ 	Added convert_backup() to restore from a backup.
+ 	* glom/libglom/connectionpool_backends/sqlite.[h|cc]:
+ 	* glom/libglom/connectionpool_backends/postgres.[h|cc]:
+ 	get_path_to_postgres_executable(): Catch exceptions from Glib::build_filename().
+ 	save_backup(): Use --format=c with pg_dump, because the default one can't be
+ 	used with pg_restore.
+ 	Implement convert_backup(), using pg_restore.
+ 	Added get_self_hosting_config_path(), get_self_hosting_data_path() and
+ 	get_self_hosting_backup_path() to avoid copy/pasting magic paths.
+ 	* glom/libglom/connectionpool_backends/postgres_self.[h|cc]:
+ 	Adapted.
+ 	* glom/application.[h|cc]:
+ 	* tests/test_selfhosting_new_empty.cc: Adapted to check the enum result from
+ 	startup().
+ 
+ 2010-07-02  Murray Cumming  <murrayc murrayc com>
+ 
+ 	Document: Avoid a crash when creating the parent directory.
+ 
+ 	* glom/libglom/docment/bakery/document.cc: write_to_disk(): Check the
+ 	result of Gio::File::get_parent() for null, because that happens if we
+ 	provide a path instead of a URI.
+ 
+ 2010-07-02  Murray Cumming  <murrayc murrayc com>
+ 
+ 	Save as Example: Reset the old file URI and allow auto-saving again.
+ 
+ 	* glom/application.cc: on_menu_file_save_as_example(): reset the old file
+ 	URI and turn auto-saving back on again, because it makes no sense to leave
+ 	the user editing an example document. This is really an export anyway.
+ 	This allows the user to close the window again after saving as an example.
+ 
+ 2010-07-01  Murray Cumming  <murrayc murrayc com>
+ 
+ 	Add Save Backup menu item.
+ 
+ 	* glom/libglom/connectionpool_backends/backend.[h|cc]:
+ 	* glom/libglom/connectionpool_backends/posgres.[h|cc]:
+ 	* glom/libglom/connectionpool_backends/sqlite.[h|cc]: Added save_backup()
+ 	virtual method, using pg_dump for PostgreSQL.
+ 	* glom/libglom/connectionpool.[h|cc]: Add save_backup() here, calling the
+ 	backend.
+ 	* glom/application.cc: Add a Developer/Export Backup menu item, to use
+ 	this feature. This also saves the .glom file.
+ 
+ 2010-07-01  Murray Cumming  <murrayc murrayc com>
+ 
+ 	Spawn functions: Catch some exceptions.
+ 
+ 	* glom/libglom/spawn_with_feedback.cc():
+ 	execute_command_line(), execute_command_line_and_wait(): Catch exceptions
+ 	so that these functions don't throw, simplifying caller code. For instance,
+ 	a command may be malformed and rejected by the shell.
+ 
+ 2010-06-29  Murray Cumming  <murrayc murrayc com>
+ 
+ 	* glom/application.[h|cc]: Developer menu: Added an Export Backup menu item.
+ 
+ 	* glom/libglom/connectionpool_backends/postgres_central.[h|cc]:
+ 	* glom/libglom/connectionpool_backends/postgres_self.[h|cc]: Moved
+     m_host and m_port into the base class:
+ 	* glom/libglom/connectionpool_backends/postgres.[h|cc]:
+     because they are used in both derived classes. Therefore remove port
+     parameter from attempt_connect().
+     Also move get_path_to_postgres_executable() and port_as_string() there
+     so they can be used in the base class.
+ 
+ 2010-06-29  Murray Cumming  <murrayc murrayc com>
+ 
+ 	Improve stderr message.
+ 
+ 	* glom/libglom/spawn_with_feedback.cc:
+     execute_command_line_and_wait_until_second_command_returns_success():
+     Correct the error message when a command (such as postgres) fails. As
+     noticed in bug #617504.
+ 
+ 2010-06-21  David King  <amigadave amigadave com>
+ 
+ 	Explicitly link with libdl for Python module loading test
+ 
+ 	* Makefile_tests.am: Do not rely on libdl being a dependency of a
+ 	library in LIBGLOM_LIBS, by linking with it explicitly.
+ 
 -1.14.3:
 -
  2010-06-19  Murray Cumming  <murrayc murrayc com>
  
 -	Revert previous "Fix a crash when using find mode" commit.
 +	Use Gnome::Gda::SqlBuilder::Id
  
 -	* glom/application.cc:
 -	* glom/application.h: This was apparently only a problem due to a previous
 -	UI-changing commit in the glom-1-16 branch.
 +	* glom/base_db.cc:
 +	* glom/libglom/python_embed/py_glom_relatedrecord.cc:
 +	* glom/libglom/utils.cc:
- 	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc: Use the typedef 
++	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc: Use the typedef
 +	instead of guint. It is very lengthy, but it is correct.
  
 -2010-05-03  Daniel Borgmann  <danielb openismus com>
 +2010-06-15  Murray Cumming  <murrayc murrayc com>
  
 -	Set default icon instead of individual window icons.
 +	Use SqlBuilder::add_field_id() to avoid ambiguity.
  
 -	* glom/application.cc: Set default window icon.
 +	* glom/base_db.cc:
 +	* glom/base_db_table_data.cc:
 +	* glom/libglom/db_utils.cc:
 +	* glom/libglom/privs.cc:
 +	* glom/libglom/python_embed/py_glom_record.cc:
 +	* glom/libglom/python_embed/py_glom_relatedrecord.cc:
 +	* glom/libglom/utils.cc:
 +	* glom/mode_data/box_data.cc:
 +	* glom/mode_data/box_data_calendar_related.cc:
 +	* glom/mode_data/box_data_portal.cc:
 +	* glom/mode_design/dialog_database_preferences.cc:
 +	* glom/mode_design/fields/box_db_table_definition.cc:
- 	* glom/report_builder.cc: Replace use of add_id() with the new add_field_id(), 
++	* glom/report_builder.cc: Replace use of add_id() with the new add_field_id(),
 +	which lets us specify the table too.
  
 -	* glom/dialog_existing_or_new.cc:
 -	* glom/filechooser_export.cc:
 -	* glom/frame_glom.cc:
 -	* glom/glade_utils.h:
 -	* glom/mode_design/script_library/dialog_script_library.cc:
 -	* glom/mode_design/translation/window_translations.cc:
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/utility_widgets/filechooserdialog_saveextras.cc:
 -	* glom/utils_ui.cc:
 -	* glom/window_boxholder.cc:
 +2010-06-15  Murray Cumming  <murrayc murrayc com>
  
 -	Don't call set_icon_name() on individual windows.
 +	Adapt to latest libgdamm API.
  
 -2010-05-12 Daniel Borgmann <danielb openismus com>
 +	* glom/base_db.cc:
 +	* glom/libglom/db_utils.cc:
 +	* glom/libglom/python_embed/py_glom_relatedrecord.cc:
 +	* glom/libglom/utils.cc:
- 	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc: 
- 	SqlBuilder::add_field_id() was renamed to add_field_value_id(), though I now 
++	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
++	SqlBuilder::add_field_id() was renamed to add_field_value_id(), though I now
 +	notice that no value is involved when it is used for SELECT queries.
  
 -	Don't allow deleting placeholder rows.
 +1.15.1:
  
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: Don't allow deleting a
 -	placeholder row (which leads to broken behaviour).
 +2010-05-25  Murray Cumming  <murrayc murrayc com>
  
 -2010-05-14  Daniel Borgmann  <danielb openismus com>
 +	* glom/libglom/utils.cc: build_sql_select_with_where_clause(): Fix a crash.
  
 -	Fix position of "Records / Found" labels.
 +2010-05-25  Murray Cumming  <murrayc murrayc com>
  
 -	* glom/glom.glade: Make sure "Records: X Found: X" appears in the right
 -	order.
 +	libglom: Utils: Avoid SQL strings for extra_join for doubly-related records.
  
- 	* glom/libglom/data_structure/foundset.[h|cc]: Remove the extra_group_by 
 -2010-05-14  Daniel Borgmann  <danielb openismus com>
++	* glom/libglom/data_structure/foundset.[h|cc]: Remove the extra_group_by
 +	member variable.
- 	* glom/base_db.cc: set_found_set_where_clause_for_portal(): Do not create 
++	* glom/base_db.cc: set_found_set_where_clause_for_portal(): Do not create
 +	the SQL GROUP BY string here.
- 	* glom/libglom/utils.[h|cc]: build_sql_select_with_where_clause(): Remove 
- 	the extra_group_by parameter, instead grouping by all fields if there is 
++	* glom/libglom/utils.[h|cc]: build_sql_select_with_where_clause(): Remove
++	the extra_group_by parameter, instead grouping by all fields if there is
 +	an extra_join_by, because there is a 1-to-1 correlation.
- 	Also take extra_join as a Relationship instead of a SQL JOIN string, and 
++	Also take extra_join as a Relationship instead of a SQL JOIN string, and
 +	reuse the existing code to define a join from a relationship.
 +	* glom/frame_glom.cc:
 +	* glom/libglom/data_structure/foundset.cc:
 +	* glom/libglom/data_structure/foundset.h:
 +	* glom/libglom/utils.cc:
 +	* glom/libglom/utils.h:
 +	* glom/mode_data/box_data_calendar_related.cc:
 +	* glom/print_layout/canvas_print_layout.cc:
 +	* glom/report_builder.cc:
 +	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc: Adapt.
  
 -	Fix a crash when using find mode.
 +2010-05-25  Murray Cumming  <murrayc murrayc com>
  
 -	* glom/application.cc: Don't access m_action_mode_data.
 -	* glom/application.h: Remove m_action_mode_data.
 +	Document: get_field_used_in_relationship_to_one(): const correction.
 +
- 	* glom/libglom/document/document.[h|cc]: 
- 	get_field_used_in_relationship_to_one(): Make the relationship parameter 
++	* glom/libglom/document/document.[h|cc]:
++	get_field_used_in_relationship_to_one(): Make the relationship parameter
 +	const and adapt other code.
 +
 +2010-05-25  Murray Cumming  <murrayc murrayc com>
 +
 +	libglom: build_sql_select_add_fields_to_get(): Define joins here.
 +
 +	* glom/libglom/data_structure/layout/usesrelationship.[h|cc]:
- 	Remove add_sql_join_alias_definition(), moving its code into 
- 	Utils::build_sql_select_add_fields_to_get() because that was the only code 
++	Remove add_sql_join_alias_definition(), moving its code into
++	Utils::build_sql_select_add_fields_to_get() because that was the only code
 +	that called it.
 +	get/set_relationship(), get/set_related_relationship(): const corrections.
 +	* several files: Adapt to const corrections.
 +
 +2010-05-24  Murray Cumming  <murrayc murrayc com>
 +
 +	UsesRelationship: Correct use of SqlBuilder for related relationships.
  
  2010-06-19  Murray Cumming  <murrayc murrayc com>
  
@@@ -158,261 -361,7 +401,261 @@@
  2010-05-01  Murray Cumming  <murrayc murrayc com>
  
  	Python scripts and calculations: Test buttons now show python errors.
- 	
+ 
 +	* glom/libglom/data_structure/layout/usesrelationship.cc:
- 	add_sql_join_alias_definition(): Correct the join definition for 
++	add_sql_join_alias_definition(): Correct the join definition for
 +	related relationships.
 +
 +2010-05-21  Murray Cumming  <murrayc murrayc com>
 +
 +	UsesRelationship: Use SqlBuilder::select_add_target() with the join.
 +
 +	* glom/libglom/data_structure/layout/usesrelationship.cc:
 +    add_sql_join_alias_definition(): Use select_add_target() instead of
 +    add_id() with the join's first target, to avoid the warning about an
 +    unknown ID, though we now get a warning about unimplmented code in libgda,
 +    which I emailed the gnome-db mailing list about.
 +
 +2010-05-21  Murray Cumming  <murrayc murrayc com>
 +
 +	Really replace the last non-users string-based SQL query.
 +
 +	* glom/libglom/db_utils.cc:
 +    get_database_preferences(): Add a missing call to select_add_target().
 +    insert_example_data(): Use SqlBuilder.
 +
 +2010-05-14  Daniel Borgmann  <danielb openismus com>
 +
 +	Fix position of "Records / Found" labels.
 +
 +	* glom/glom.glade: Make sure "Records: X Found: X" appears in the right
 +	order.
 +
 +2010-05-14  Daniel Borgmann  <danielb openismus com>
 +
 +	Fix a crash when using find mode.
 +
 +	* glom/application.cc: Don't access m_action_mode_data.
 +	* glom/application.h: Remove m_action_mode_data.
 +
 +2010-05-12  Daniel Borgmann  <danielb openismus com>
 +
 +	Don't allow deleting placeholder rows.
 +
 +	* glom/utility_widgets/db_adddel/db_adddel.cc: Don't allow deleting a
 +	placeholder row (which leads to broken behaviour).
 +
 +2010-05-20  Murray Cumming  <murrayc murrayc com>
 +
 +    Correct use of SQL functions with SqlBuilder.
 +
 +	* glom/base_db.cc: count_rows_returned_by(): Use SqlBuilder::add_field_id()
 +    so the function is really used. And add a target alias. This now works.
 +	* glom/libglom/python_embed/py_glom_relatedrecord.cc: generic_aggregate()
 +	* glom/libglom/utils.cc: build_sql_select_add_fields_to_get():
 +	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc: get_record_counts():
 +    Use add_field_id() when adding a function to SqlBuilder, so it is
 +    really used.
 +
 +2010-05-19  Murray Cumming  <murrayc murrayc com>
 +
 +	More use of SqlBuilder. Almost finished.
 +
 +	* glom/base_db.cc:
 +	* glom/libglom/data_structure/layout/usesrelationship.[h|cc]:
 +    Change get_sql_join_alias_definition() to get_sql_join_alias_definition().
 +	* glom/libglom/db_utils.[h|cc]: query_execute_select(): Add an optional
 +    use_cursor bool to use the non-random database access.
 +	* glom/libglom/utils.[h|cc]: Change build_sql_select_fields_to_get() to
 +    build_sql_select_add_fields_to_get().
 +    build_sql_select_with_where_clause(): Use SqlBuilder.
 +	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 +    refresh_from_database(): Use DbUtils::query_execute_select(), to simplify
 +    the code. This is possible now that the function is not in BaseDB.
 +
 +2010-05-13  Murray Cumming  <murrayc murrayc com>
 +
 +	DbUtils: Catch SqlError exception.
 +
 +	* glom/libglom/db_utils.cc: query_execute_select(), query_execute_select():
 +	Catch SqlError too, as this seems to be thrown too.
 +
 +2010-05-13  Murray Cumming  <murrayc murrayc com>
 +
 +	DbUtils::query_execute(): Remove params parameter.
 +
 +	* glom/libglom/db_utils.[h|cc]: query_execute(): Remove the unused params
 +	parameter.
 +
 +2010-05-13  Murray Cumming  <murrayc murrayc com>
 +
 +	Use SqlBuilder in all possible remaining places.
 +
 +	* glom/libglom/db_utils.[h|cc]: Renamed query_execute(string) to
 +	query_execute_string() so we catch uses of it that could use SqlBuilder.
 +
 +	* glom/base_db.cc: Replaced some INSERT and DELETE string sql queries
 +	with SqlBuilder.
 +	* glom/base_db_table_data.cc:
 +	* glom/libglom/db_utils.cc:
 +	* glom/libglom/db_utils.h:
 +	* glom/libglom/privs.cc:
 +	* glom/mode_design/users/dialog_groups_list.cc:
 +	* glom/mode_design/users/dialog_users_list.cc:
 +	* glom/navigation/box_tables.cc: Adapt.
 +
 +2010-05-12  Murray Cumming  <murrayc murrayc com>
 +
 +	Remove redundant BaseDb::query_execute*() methods.
 +
 +	* glom/base_db.[h|cc]: Removed query_execute_select() and query_execute().
 +	The same methods in DbUtils replace them.
 +	* glom/libglom/db_utils.[h|cc]: Removed the query_execute_select(string) override.
 +	* glom/mode_data/box_data_calendar_related.cc:
 +	* glom/mode_data/box_data_details.cc:
 +	* glom/mode_data/box_data_portal.cc:
 +	* glom/mode_design/dialog_database_preferences.cc:
 +	* glom/mode_design/fields/box_db_table_definition.cc:
 +	* glom/mode_design/users/dialog_groups_list.cc:
 +	* glom/mode_design/users/dialog_users_list.cc:
 +	* glom/navigation/box_tables.cc:
 +	* glom/print_layout/canvas_print_layout.cc:
 +	* glom/report_builder.cc:
 +	* glom/base_db_table_data.cc:
 +	* glom/frame_glom.cc:
 +	* glom/libglom/db_utils.cc: Adapted.
 +
 +2010-05-11  Daniel Borgmann  <danielb openismus com>
 +
 +	Don't add a new row when cancelling a placeholder edit.
 +
 +	* glom/utility_widgets/db_adddel/db_adddel.cc: Don't add a new row
 +	if the edited row was a placeholder and no text was entered.
 +
 +2010-05-10  Daniel Elstner  <danielk openismus com>
 +
 +	Move list of libglom sources to separate file
 +
 +	* glom/libglom/filelist.am: New Automake include file, defining the
 +	lists of source and header files for building libglom.
 +	* Makefile_libglom.am: Include glom/libglom/filelist.am for the lists
 +	of header and source files, instead of listing them directly.
 +	* docs/libglom_reference/Makefile.am: Include the list of libglom
 +	source files from glom/libglom/filelist.am.
 +	(doc_input): Instead of naming a directory for Doxygen to search,
 +	explicitly define the Doxygen input to the list of all public libglom
 +	header files.
 +
 +2010-05-10  Daniel Elstner  <danielk openismus com>
 +
 +	Update Doxygen configuration for libglom reference
 +
 +	* docs/libglom_reference/Doxyfile.in: Correct strip prefixes and
 +	include paths.  Do include the mm-common stylesheet and reference
 +	the external tag files.  Also clean some cruft.
 +
 +2010-05-10  Daniel Elstner  <danielk openismus com>
 +
 +	Honor --disable-documentation configure option
 +
 +	* Makefile.am (gnome_doc_subdirs): Rename from $(doc_subdirs).
 +	(doc_subdirs): Conditionally define to the subdirectories of the
 +	reference documentation, depending on whether ENABLE_DOCUMENTATION
 +	is true.
 +	(SUBDIRS): Expand $(doc_subdirs) and $(gnome_doc_subdirs).
 +
 +2010-05-10  Daniel Borgmann  <danielb openismus com>
 +
 +	Make Find mode a toggle and move it to the Edit menu.
 +
 +	* glom/application.cc: Move Find menu item, remove Mode menu.
 +	* glom/frame_glom.cc/h: Replace on_menu_Mode_Find()/Data() with
 +	on_menu_Mode_Toggle().
 +
 +2010-05-06  Daniel Borgmann  <danielb openismus com>
 +
 +	Save extras alignment improvements.
 +
 +	* glom/utility_widgets/filechooserdialog_saveextras.cc: Adjust
 +	alignments and hide extra label if empty (thus not taking up space).
 +
 +2010-05-12  Murray Cumming  <murrayc murrayc com>
 +
 +    Use Gnome::Gda::SqlExpr for where clauses.
 +
 +	* glom/libglom/utils.[h|cc]: Added build_simple_where_expression()
 +    and build_combined_where_expression() to make it easier to work with
 +    Gnome::Gda::SqlExpr.
 +    build_sql_select_with_key(): Return a SqlExpr instead of a string.
 +	* glom/base_db.[h|cc]:
 +	* glom/base_db_table_data.cc:
 +	* glom/frame_glom.[h|cc]:
 +	* glom/libglom/data_structure/foundset.[h|cc]:
 +	* glom/mode_data/box_data.[h|cc]:
 +	* glom/mode_data/box_data_calendar_related.cc:
 +	* glom/mode_data/box_data_details.cc:
 +	* glom/mode_data/box_data_list.cc:
 +	* glom/mode_data/box_data_portal.cc:
 +	* glom/mode_data/datawidget/dialog_choose_id..[h|cc]:
 +	* glom/mode_find/notebook_find.[h|cc]:
 +	* glom/print_layout/canvas_print_layout.cc:
 +	* glom/report_builder.cc:
 +	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 +    Adapt, using SqlExpr instead of a string for where clauses.
 +
 +2010-05-06  Murray Cumming  <murrayc murrayc com>
 +
 +    Utils::get_choice_values(): Complete the use of SqlBuilder.
 +
 +	* glom/libglom/utils.cc: get_choice_values(): Use the new return value from
 +    Builder::select_add_field() for the ORDER BY, so we specify the field table
 +    too.
 +
 +2010-05-03  Daniel Borgmann  <danielb openismus com>
 +
 +	Set default icon instead of individual window icons.
 +
 +	* glom/application.cc: Set default window icon.
 +
 +	* glom/dialog_existing_or_new.cc:
 +	* glom/filechooser_export.cc:
 +	* glom/frame_glom.cc:
 +	* glom/glade_utils.h:
 +	* glom/mode_design/script_library/dialog_script_library.cc:
 +	* glom/mode_design/translation/window_translations.cc:
 +	* glom/mode_design/users/dialog_groups_list.cc:
 +	* glom/utility_widgets/filechooserdialog_saveextras.cc:
 +	* glom/utils_ui.cc:
 +	* glom/window_boxholder.cc:
 +
 +	Don't call set_icon_name() on individual windows.
 +
 +1.14.2:
 +
 +2010-05-02  Murray Cumming  <murrayc murrayc com>
 +
 +	Python calculations: Really convert to expected types.
 +
 +	* glom/libglom/data_structure/glomconversions.cc:
 +	get_double_for_gda_value_numeric(): Handle all numeric GTypes - not just
 +	G_TYPE_INT..
 +	convert_value(): Remove the special case for G_TYPE_INT (now handled in
 +	get_double_for_gda_value_numeric instead). Make sure that all numeric GTypes
 +	are converted to GDA_TYPE_NUMERIC, making it easier for callers to check.
 +
 +2010-05-01  Murray Cumming  <murrayc murrayc com>
 +
 +	Add test of type conversion after python calculations.
 +
 +	* Makefile_tests.am:
 +	* tests/test_python_execute_func_change_result_type.cc: Add a test that
 +	calls a python function that returns a number, for a text field, to
 +	check that the conversion is done.
 +
 +2010-05-01  Murray Cumming  <murrayc murrayc com>
 +
 +	Python scripts and calculations: Test buttons now show python errors.
 +
  	* glom/python_embed/glom_python.[h|cc]:
  	glom_execute_python_function_implementation(),
  	glom_evaluate_python_function_implementation(): Add an error_message output
@@@ -2364,5 -2230,17550 +2607,4 @@@ This is the master branch. See also th
  	Minor simplification.
  
  	* glom/libglom/data_structure/glomconversions.cc:
 -	get_stringstream_precision_default(): Simplify this function, for
 -	Michael to see.
 -
 -2010-01-14  Michael Hasselmann  <michaelh openismus com>
 -
 -	Make the default precision used for stringstreams available for libglom users
 -
 -	* glom/libglom/data_structure/glomconversions.[h|cc]
 -	(get_stringstream_precision_default): Wrap the constant used into a function
 -	and export it in the headers. Users of libglom need it to show the same
 -	precision for Glom's numeric type.
 -
 -
 -2010-01-12  Murray Cumming  <murrayc murrayc com>
 -
 -	Music Collection Example: Changed a layout.
 -
 -	* examples/example_music_collection.glom: Albums: List View:
 -	Add some related records to show a problem in Qlom.
 -
 -2010-01-08  Murray Cumming  <murrayc murrayc com>
 -
 -	Correct use of locales when creating text representations.
 -
 -	* glom/main.cc:  Set std::locale::global() to the user's current locale,
 -        forcing us to imbue streams to whatever we actually want.
 -	* glom/libglom/connectionpool_backends/postgres_self.cc: startup():
 -	Do not use Utils::string_from_decimal() for the port number, because it
 -	is meant to use the user's locale, but we need it in the C locale.
 -	* glom/libglom/data_structure/field.cc: to_file_format(): Use
 -	std::locale::classic() when we want the C locale, not std::locale(),
 -	which means the user's locale, which was previously the C one by chance.
 -	* glom/libglom/utils.cc: string_from_decimal(): Imbue the stream
 -	as wanted.
 -
 -2010-01-07  Michael Hasselmann  <michaelh openismus com>
 -
 -	Fix potential encoding error for currency symbols
 -
 -	* glom/libglom/data_structure/glomconversions.cc (get_text_for_gda_value):
 -	Glom's numeric type can be prefixed with a currency symbol. If the symbol
 -	cannot be represented in the user's locale it would hide all data for the
 -	column. This is fixed by using a fallback conversion for the symbol.
 -	Fixes bug #606349.
 -
 -2010-01-07  Armin Burgmeier  <armin arbur net>
 -
 -	* win32/build-installer:
 -	* win32/glom.iss.in: Install glom_1_12.pyd instead of glom.pyd. Bug
 -	#605593.
 -
 -1.12.4:
 -
 -2009-12-30  Murray Cumming  <murrayc murrayc com>
 -
 -  Dnd layout: Avoid a crash when dragging to empty space.
 -
 -	* glom/utility_widgets/flowtable_dnd.cc: on_drag_data_received():
 -	Avoid dereferencing a null group.
 -	Bug #599232
 -
 -2009-12-30  Murray Cumming  <murrayc murrayc com>
 -
 -	Dnd layout: Avoid a crash.
 -
 -	* glom/utility_widgets/flowtable_dnd.cc: on_drag_data_received():
 -	Use a dynamic_cast<> to avoid memory corruption with the MI class.
 -	Bug #599232
 -
 -2009-12-16  Armin Burgmeier  <armin arbur net>
 -
 -	* win32/build-installer:
 -	* win32/glom.iss.in: Add missing libpangoft2-1.0-0.dll. Bug #599966.
 -
 -2009-12-14  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom.desktop.in.in: Remove the Application category because
 -	krazy2 says it is deprecated.
 -
 -2009-12-10  Murray Cumming  <murrayc murrayc com>
 -
 -	FlowTableDnd: Some refactoring.
 -
 -	* glom/utility_widgets/flowtable_dnd.[h|cc],
 -	* glom/mode_data/flowtable_withfields.[h|cc]: Make FlowTableDnd less
 -	aware of LayoutItems, though it is still not yet generic enough.
 -	* glom/utility_widgets/test_flowtable_dnd.cc:
 -	* glom/Makefile_tests.am: Added test_flowtable_dnd.
 -
 -2009-12-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_film_manager.glom: Added silly example data,
 -	fixing bug #600859 (Michael Hasselmann)
 -
 -2009-12-10  Murray Cumming  <murrayc murrayc com>
 -
 -	Tests: Validate all examples against the DTD, and correct the DTD.
 -
 -	* tests/dtd/test_example_sqlite: Renamed to test_file_validation.sh.
 -	* glom/Makefile_tests.am: Adapted.
 -	* glom/libglom/document/document.cc: save_before(): Correct the saving
 -	of group privileges so they are really inside the group nodes. Avoid
 -	saving unnamed groups, as seen in the example files.
 -	* glom/glom_document.dtd: Several corrections to fix the validation of
 -	the example files, though I don't like that DTDs don't seem to give
 -	us any way to say that the sequence of child elements is irrelevant.
 -	I don't like enforcing the sequence.
 -
 -2009-12-10  Murray Cumming  <murrayc murrayc com>
 -
 -	Fix distcheck.
 -
 -	* Makefile.am:
 -	* Makefile_tests.am: Fix the distcheck by disting the DTD validation
 -	test script and the .glom file that it uses.
 -	* glom/libglom/init.cc: Redefine Python's PyDateTime_IMPORT macro,
 -	to avoid a compiler warning. See http://bugs.python.org/issue7463
 -	* glom/main.cc: Avoid including Python's datetime.h, to avoid the same
 -	compiler warning.
 -
 -2009-12-09  Murray Cumming  <murrayc murrayc-desktop>
 -
 -	Tests: Complete the test_python_execute_func_date test.
 -
 -	* glom/libglom/python_embed/pygdavalue_conversions.c
 -	(glom_pygda_value_from_pyobject): Use g_date_new_dmy() so the GDate
 -	is really completely initialized, avoiding errors about invalid dates.
 -	* tests/test_python_execute_func_date.cc: Check the return type and
 -	value, by comparing the python result with the current date.
 -	Bug is now really fixed #603686. (Andrew Ruthven)
 -
 -2009-12-09  Murray Cumming  <murrayc murrayc com>
 -
 -	Fix the crash when calling python functions that return dates.
 -
 -	* glom/libglom/python_embed/pygdavalue_conversions.c
 -	(glom_pygda_value_from_pyobject): Call the macro PyDateTime_IMPORT here,
 -	though it was already called in libglom_init(). I don't know why this
 -	fixes the crash, but it does. Bug #603686. (Andrew Ruthven)
 -
 -2009-12-08  Murray Cumming  <murrayc murrayc com>
 -
 -	Tests: Added glom_evaluate_python_function_implementation() tests.
 -
 -	* Makefile_tests.am:
 -	* tests/test_python_execute_func.cc:
 -	* tests/test_python_execute_func_date.cc: Added two unit tests for
 -	Glom::glom_evaluate_python_function_implementation(). The date one
 -	currently fails, as in bug #603686. (Andrew Ruthven)
 -
 -2009-12-07  Murray Cumming  <murrayc murrayc com>
 -
 -	Python: Trying to stop the PyDateTime_Check() crash.
 -
 -	* glom/libglom/init.cc: libglom_init(): Call the PyDateTime_IMPORT
 -	macro, which is needed to stop PyDateTime_Check() and PyDate_Check()
 -	from crashing, at least in my simple test case. It still crashes in
 -	Glom though.
 -	* glom/main.cc: Do not initialize Python here because Glom::init()
 -	already did it, though doing it twice does not seem to be a problem.
 -
 -2009-12-04  Murray Cumming  <murrayc murrayc-desktop>
 -
 -	Rename some functions to avoid fear of linking to the wrong one.
 -
 -	* glom/libglom/python_embed/pygdavalue_conversions.[h|cc]:
 -	pygda_value_from_pyobject(), pygda_value_as_pyobject(): Add a glom_
 -	prefix so we know we are not using the copy in pygda.
 -	* glom/python_embed/glom_python.cc:
 -	* glom/libglom/python_embed/py_glom_record.cc:
 -	* glom/libglom/python_embed/py_glom_relatedrecord.cc: Adapted.
 -
 -2009-12-04  Murray Cumming  <murrayc murrayc com>
 -
 -	Field Definitions: Default value: Fix crash when selecting a date.
 -
 -	* glom/utility_widgets/datawidget.cc: offer_field_list(),
 -	offer_field_layout(), offer_related_record_id_find(): Avoid crashes
 -	caused by calling set_transient_for() with a null parent window,
 -	for instance from the field definitions dialog.
 -
 -2009-12-04  Murray Cumming  <murrayc murrayc com>
 -
 -	Field Definitions: Show default value widget for date fields.
 -
 -	* glom/utility_widgets/datawidget.cc: Constructor: show the
 -	hbox_parent widget, so the widgets always show up for the default value
 -	in the field definitio dialog for date fields. The details view must
 -	be doing this via a show_all() somewhere.
 -
 -2009-12-03  Murray Cumming  <murrayc murrayc com>
 -
 -	Related Records layout: Field formatting: Choices: Fix related choices.
 -
 -	* glom/mode_design/layout/dialog_layout_details.[h|cc]
 -	* glom/mode_design/layout/dialog_layout_list_related.[h|cc]:
 -	Add virtual get_fields_table() and use this in
 -	on_button_field_formatting() so that the formatting dialog shows
 -	relationships for the to table instead of the parent table, when
 -	editing formatting for a field in a related records portal.
 -	Bug noticed by Michael Hasselmann and Andrew Ruthven.
 -	* glom/mode_design/layout/layout_item_dialogs/dialog_field_layout.c:
 -	Removed some debug output.
 -
 -2009-12-03  Murray Cumming  <murrayc murrayc com>
 -
 -	Allow use of example documents that mention an unsupported backend.
 -
 -	* glom/application.cc: check_document_hosting_mode_is_supported():
 -	Don't check the backend if it is an example document because the user
 -	will choose it when saving anyway.
 -
 -2009-11-17  Murray Cumming  <murrayc murrayc com>
 -
 -	tests: dtd: Now passes.
 -
 -	* glom/libglom/document/bakery/document_xml.cc: get_node_document():
 -	Added commented-out code to write the DOCTYPE declaration, if we ever
 -	want to specify the PUBLIC DTD idenitifier and URI in each document.
 -	Let's avoid that for now because we'd have to make sure that it's
 -	hosted properly.
 -	* tests/dtd/test_example_sqlite: Do not use --valid because that
 -	seems to always require a DTD in the document's DOCTYPE declaration.
 -	--dtdvalid seems to do the same thing already, but with the specified
 -	DTD.
 -
 -2009-11-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_document.dtd: Mention the xmlns attribute because DTD
 -	validation doesn't know about XML namespaces.
 -
 -2009-11-17  Murray Cumming  <murrayc murrayc com>
 -
 -	Document: Ensure that the xmlns ID is always in saved documents.
 -
 -	* glom/libglom/document/bakery/document_xml.cc: get_node_document():
 -	Make sure that the xmlns ID is added, even when the root node already
 -	exists, for instance when opening existing documents.
 -
 -	* examples/example_film_manager.glom:
 -	* examples/example_lesson_planner.glom:
 -	* examples/example_music_collection.glom:
 -	* examples/example_project_manager.glom:
 -	* examples/example_smallbusiness.glom:
 -	* examples/sqlite/test_sqlite_music/test_sqlite_music.glom:
 -	Add the xmnls ID, to help to identify the MIME type of these documents.
 -
 -2009-11-17  Murray Cumming  <murrayc murrayc com>
 -
 -	Document saving: Remove unncessary empty singular_title nodes.
 -
 -	* glom/libglom/document/document.cc: save_before_translations():
 -	Do not create empty singular_title nodes.
 -	* examples/example_smallbusiness.glom: Resaved.
 -
 -2009-11-17  Murray Cumming  <murrayc murrayc com>
 -
 -	Partly fix the DTD validation test.
 -
 -	* glom/glom_document.dtd: table: Correct the syntax for the child
 -	elements, to use ?, instead of | because they are all optional, instead
 -	of being alternatives for each other.
 -	Add the print_layouts element.
 -	* Makefile_tests.am: Change the order so the sometimes-hanging import
 -	tests are at the end, to make the tests more useful.
 -
 -2009-11-13  David King  <davidk openismus com>
 -
 -	* configure.ac: Fix check for SQLite and libgettextpo.
 -
 -2009-11-12  David King  <davidk openismus com>
 -
 -	* glom/glom_document.dtd: Update to more completely validate example
 -	documents.
 -	* Makefile_tests.am:
 -	* tests/dtd/test_example_sqlite: Add a test that attempts to validate
 -	an example SQLite Glom document against glom_document.dtd.
 -
 -2009-11-10  David King  <davidk openismus com>
 -
 -	* configure.ac: Fix incorrect conditional for Maemo libgettextpo check.
 -
 -2009-11-06  Murray Cumming  <murrayc murrayc com>
 -
 -	Fix a crash when specifying a static image on the layout.
 -
 -	* glom/utility_widgets/imageglom.cc: on_menupopup_activate_select_file():
 -	Check for a null parent window pointer to avoid a crash, fixing bug
 -	#600954 (Michael Hasselmann).
 -
 -2009-11-06  David King  <davidk openismus com>
 -
 -	* configure.ac:
 -	* Makefile_glom.am: Do not link to libgettextpo on Maemo, and
 -	additionally do not check for it either.
 -
 -2009-11-04  David King  <davidk openismus com>
 -
 -	* glom.xml: Add Maemo-specific category for classification of .glom
 -	files as "documents".
 -
 -2009-11-04  David King  <davidk openismus com>
 -
 -	* Makefile_glom.am: Statically link to libgettextpo on Maemo, as
 -	Gettext is available in the SDK and autobuilder but not on the device.
 -
 -1.12.3:
 -
 -2009-10-30  Murray Cumming  <murrayc murrayc com>
 -
 -	List views and related records portals: Enough space for titles.
 -
 -	* glom/utils_ui.[h|cc]: get_suitable_field_width_for_widget():
 -	Optionally calculate enough space for the title too, for TreeView
 -	columns.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: treeview_append_column():
 -	When choosing a default column width, make sure there's enough for the
 -	title too.
 -
 -2009-10-30  Murray Cumming  <murrayc murrayc com>
 -
 -	List views and related records portals: Avoid zero-width columns.
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: treeview_append_column():
 -	Except on maemo, don't try to auto-expand a non-rightmost column,
 -	because that does not seem to be possible with fixed-height-mode,
 -	which we use for performance.
 -
 -2009-10-30  David King  <davidk openismus com>
 -
 -	* configure.ac:
 -	* glom/main.cc: Initialize libossomm on Maemo, to register a DBus
 -	service.
 -
 -2009-10-28  David King  <davidk openismus com>
 -
 -	* configure.ac:
 -	* Makefile.am:
 -	* glom.desktop.in.in:
 -	* glom.service.in: Add DBus service file for Maemo 5, and install to
 -	the correct location as determined by the osso-af-settings pkg-config
 -	file. Adjust the installation location of the glom.desktop file on
 -	Maemo.
 -
 -2009-10-28  Murray Cumming  <murrayc murrayc com>
 -
 -	Do not mark an empty string for translation.
 -
 -	* glom/dialog_connection.cc: set_confirm_existing_user_note():
 -	Do not do _(""), fixing bug #599868 (André Klapper).
 -
 -2009-10-27  Murray Cumming  <murrayc murrayc com>
 -
 -	Trying to ignore unwanted column resize signals.
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.[h|cc]:
 -	Removed unused set_column_width().
 -	construct_specified_columns_cellrenderer(): Added an InnerIgnore, though
 -	we already use one in construct_specified_columns().
 -	on_treeview_column_resized(): Check if we should ignore signals.
 -	Do not cast an int size to a guint, because it could be -1.
 -
 -2009-10-27  Murray Cumming  <murrayc murrayc com>
 -
 -	Avoid runtime warnings about 0 size TreeViewColumn.
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: construct_specified_columns(),
 -	treeview_append_column(): Avoid calling TreeViewColumn::set_fixed_width()
 -	with a 0 size, avoiding a runtime assertion.
 -
 -2009-10-27  Murray Cumming  <murrayc murrayc com>
 -
 -	Fix some warnings.
 -
 -	* glom/dialog_existing_or_new.cc: get_service_info(): Replace a 0 with
 -	(void*)0 to avoid a warning after my change on 2009-10-13.
 -	* glom/libglom/data_structure/has_title_singular.cc():
 -	operator==(): Actually use the src parameter.
 -
 -2009-10-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: treeview_append_column():
 -	Don't try to put -1 in a guint for the column width.
 -
 -2009-10-25  Murray Cumming  <murrayc murrayc com>
 -
 -	BaseDb::query_execute*(): Const corrections.
 -
 -	* glom/base_db.[h|cc]: query_execute(), query_execute_select():
 -	Const corrections and indentation corrections.
 -
 -2009-10-21  Armin Burgmeier  <armin arbur net>
 -
 -	* Makefile_libglom.am: Link against winsock on Windows.
 -
 -	* glom/application.cc (constructor): ifdefed out the avahi callbacks
 -	setup on Windows.
 -
 -	* glom/dialog_existing_or_new.cc (constructor): ifdefed out the code
 -	that expands the network item on Windows (because it doesn't exist
 -	there).
 -
 -	* glom/libglom/connectionpool.h:
 -	* glom/libglom/connectionpool.cc: ifdefed out the avahi callback setup
 -	function, moved pgwin32_is_admin to main.cc.
 -
 -	* glom/main.cc: Moved pgwin32_is_admin from connectionpool.cc.
 -
 -	* glom/libglom/spawn_with_feedback.cc: Added <glibmm/fileutils.h>
 -	include, required for the Windows build.
 -
 -	* glom/mode_design/print_layouts/print_layout_toolbar_button.cc:
 -	* glom/utility_widgets/layouttoolbar.cc:
 -	* glom/utility_widgets/layouttoolbarbutton.cc:
 -	* glom/xsl_utils.cc: Fixed the construction to path files
 -	relative to the executable on Windows: Glib::build_filename does take
 -	only two arguments, not three.
 -
 -	* win32/build-installer:
 -	* win32/glom.iss.in: Updated.
 -
 -2009-10-21  Armin Burgmeier  <armin arbur net>
 -
 -	* macros/mm-python.m4: Fix the python library lookup on Windows: Avoid
 -	a python error if get_config_var('LIBS') is None and include
 -	$PREFIX/libs and $EXEC_PREFIX/libs in the search path because this is
 -	where the official Python installer puts the library in.
 -
 -2009-10-19  David King  <davidk openismus com>
 -
 -	* Makefile_libglom.am: Add missing backslash, fixing commit
 -	e38fcaab322d4774faae2ecb707cdf67f84dd6ea.
 -
 -2009-10-19  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Adapt for latest hildonmm changes.
 -
 -	* glom/utility_widgets/comboentryglom.cc:
 -	* glom/utility_widgets/comboglom.cc: get/set_active() changed to
 -	set_selected() and we now have an iter-base get/set_selected() for the
 -	PickerButton so we don't need to get the TouchSelector.
 -
 -2009-10-16  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Fix the build for the latest hildonmm.
 -
 -	* glom/navigation/maemo/pickerbutton_table.cc:
 -	* glom/utility_widgets/comboentryglom.cc:
 -	* glom/utility_widgets/comboglom.cc: Adapt to changed (simpler)
 -	TouchSelector API.
 -
 -2009-10-16  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Fix my previous commit.
 -
 -	* glom/utility_widgets/datawidget.cc: set_child_size_by_field(): Move
 -	the ifdefs around so normal fields get sensible sizes again on Maemo.
 -
 -2009-10-16  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Make TextViews small to begin with.
 -
 -	* glom/utility_widgets/datawidget.cc: set_child_size_by_field(): On
 -	Maemo, do not increase the height of the TextView, even if specified in
 -	the layout, because HildonTextViews expand automatically on Maemo when
 -	entering more text.
 -
 -2009-10-16  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: When adding related records, show the foreign key value.
 -
 -	* glom/mode_data/box_data_portal.cc: on_maemo_appmenubutton_add():
 -	Actually show the field value that links the new related record to the
 -	parent record, though this is a bit hacky and will only work for
 -	autogenerated keys.
 -
 -2009-10-16  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Actually show new related record in the list.
 -
 -	* glom/mode_data/box_data_portal.[h|cc]: on_maemo_appmenubutton_add():
 -	* glom/mode_data/notebook_data.[h|cc]: Constructor:
 -	Update the window when the maemo details window is hidden, for instance
 -	to show the new related record in the portal.
 -
 -2009-10-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document.cc: load_after(), save_before():
 -	Avoid crashes when load/saving singular_titles.
 -
 -2009-10-16  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Allow Relationships to have singular titles too. Use them.
 -
 -	* glom/libglom/data_structure/has_title_singular.[h|cc]: Added this new
 -	base class, to be inherited by any TranslatableItem that could also have
 -	a singular form.
 -	* glom/libglom/data_structure/table_info.[h|cc]:
 -	* glom/libglom/data_structure/relationship.[h|cc]: Derive
 -	from HasTitleSingular, instead of just having the methods in TableInfo.
 -	* glom/libglom/document/document.[h|cc]: Added
 -	get_table_title_singular() to match the existing get_table_title().
 -	* glom/mode_data/box_data_portal.[h|cc]: Added get_title_singular() to
 -	match the existing get_title() and use it in the details window title
 -	and AppMenu Add Related button.
 -	* glom/mode_data/notebook_data.cc: Use the singular table title for the
 -	details window title.
 -
 -2009-10-15  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Show a new Details window when adding related records.
 -
 -	* glom/mode_data/box_data_portal.[h|cc]:
 -	* glom/mode_data/box_data_calendar_related.[h|cc]:
 -	* glom/mode_data/box_data_list_related.[h|cc]:
 -	Remove the just-added do_add_record() virtual method.
 -	Instead add a Box_Data_Details and parent window to Box_Data_Portal,
 -	used to show a details window for a new related record in
 -	on_maemo_appmenubutton_add().
 -	Move some code from Box_Data_List_Related::on_adddel_record_added() to
 -	Box_Data_Portal::make_record_related() to make this easier.
 -
 -2009-10-15  Murray Cumming  <murrayc murrayc com>
 -
 -	Developer: Tables: Add singular title.
 -
 -	* glom/libglom/data_structure/tableinfo.[h|cc]: Add
 -	get/set_title_singular(), using a member TranslatableItem, to hold
 -	the singular form (such as Album instead of Albums) for use in the UI
 -	for users.
 -	* glom/libglom/document/document.cc: save_before(), load_after():
 -	Load and save the singular table titles as a new node.
 -	* glom/glom_document.dtd: Mentin the new node, though I don't think
 -	we document translation nodes properly.
 -	* glom/navigation/box_tables.[h|cc]: In developer mode, show the column
 -	so the user can enter a singular title.
 -
 -2009-10-15  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Details: Show table title in window title.
 -
 -	* glom/mode_data/notebook_data.cc: show_details(): On Maemo, mention the
 -	table title in the window title, though this again shows that we need to
 -	ask the designer for the singular form for the table's items.
 -
 -2009-10-15  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Show Add Related buttons when showing portals on details.
 -
 -	* glom/application.[h|cc]: Removed unused on_menu_add_record().
 -	* glom/mode_data/box_data_portal.[h|cc]: On Maemo, add a Hildon::Button
 -	to the application's AppMenu on realize, removing it on unrealize.
 -	Added a virtual do_add_record() that is called when the button is
 -	clicked.
 -	* glom/mode_data/box_data_calendar_related.[h|cc]:
 -	* glom/mode_data/box_data_list_related.[h|cc]: Added do_add_record()
 -	overrides, though they are empty so far.
 -
 -2009-10-13  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Add a Add Record to the App Menu and remove it from the List View.
 -
 -	* glom/application.cc: init_menus(): Add an Add Record item to the
 -	AppMenu on Maemo.
 -	* glom/frame_glom.[h|cc]: Added on_menu_add_record() on Maemo, calling
 -	Notebook_Data::do_menu_file_add_record().
 -	* glom/mode_data/box_data_details.[h|cc]: Added do_new_record().
 -	* glom/mode_data/notebook_data.[h|cc]: Added do_menu_file_add_record()
 -	to call the Box_Data_Details::do_new_record().
 -	* glom/utility_widgets/db_adddel/db_adddel.h: Made start_new_record()
 -	public and documented it.
 -	* glom/utility_widgets/db_adddel/db_adddel_withbuttons.[h|cc]: Remove
 -	the Add button on Maemo.
 -
 -2009-10-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* *.cc: Replace use of NULL with 0, because this is C++.
 -	Replace use of != NULL with nothing.
 -
 -2009-10-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/flowtable.h:
 -	* glom/utility_widgets/flowtable_dnd.cc: Correct non-maemo build
 -	problems after merging from the maemo5 branch.
 -
 -2009-10-12  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Details: Put scrollbar against the right edge, as per spec.
 -
 -	* glom/window_boxholder.[h|cc]: On Maemo, use an Alignment with no
 -	padding at the right, instead of just a window border, to match the UI
 -	spec.
 -
 -2009-10-12  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Details: More correct padding, maybe.
 -
 -	* glom/utility_widgets/flowtable.[h|cc]: Change set_padding() to
 -	set_column_padding() and set_row_padding(), allowing different padding
 -	between rows and between columns, as per Maemo's UI specifications.
 -
 -2009-10-11  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Use Hildon buttons for Open, Find and ... buttons.
 -
 -	* glom/utility_widgets/datawidget.cc: Constructor: Use Hildon::Buttons.
 -
 -2009-10-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/comboentryglom.cc: init(): On Maemo, remove the
 -	duplicate first column and do not expand the first column.
 -
 -2009-10-08  Murray Cumming  <murrayc murrayc-x61>
 -
 -	Maemo 5: List view: Subtly improve the separating lines.
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: treeview_append_column():
 -	On Maemo, use an "x-pad" of HILDON_MARGIN_DEFAULT for the cell
 -	renderers, because Mathias Hasselmann says that is required for Maemo 5.
 -
 -2009-10-08  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Use a PickerButton with TouchSelector for combo boxes on details views.
 -
 -	* glom/utility_widgets/comboentryglom.[h|cc]:
 -	* glom/utility_widgets/comboglom.[h|cc]: On Maemo, derive from
 -	Hildon::PickerButton instead of Gtk::ComboBox*, with a member
 -	TouchSelector/TouchSelector. However, the ID field seems to be shown
 -	twice.
 -
 -2009-10-08  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Actually show new list views and related records portals.
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	construct_specified_columns(): Use while(TouchSelector::remove_column())
 -	to actually remove old view columns, so we actually see an effect when
 -	navigating to a new table, and so we don't see old data in related
 -	records tables.
 -
 -2009-10-07  Murray Cumming  <murrayc murrayc com>
 -
 -	Tests: Import: Fixed the no-exceptions build.
 -
 -	* tests/import/utils.cc: Fixed the no-exceptions build.
 -
 -2009-10-06  Daniel Elstner  <daniel kitta gmail com>
 -
 -	Support Automake silent rules
 -
 -	* configure.ac: Call the AM_SILENT_RULES macro if it is defined.
 -	* Makefile.am (.rc.res): Prefix command with $(AM_V_GEN) to suppress
 -	the echoing of the command line if silent rules are enabled.
 -	* Makefile_libegg.am (eggmarshalers.h), (eggmarshalers.c): ditto.
 -
 -1.12.2:
 -
 -2009-10-05  Murray Cumming  <murrayc murrayc com>
 -
 -	Import: Handle large unquoted text (binary image data).
 -
 -	* glom/import_csv/csv_parser.cc: on_idle_parse(): When we reach the
 -	end of the buffer without finding a newline, store all of the remaining
 -	text instead of just since the last quote, so we don't discard parts
 -	of large unquoted text, such as parts of binary image data.
 -	This seems to break the test_fail_on_non_matching_quotes test, but
 -	the tests are too hard to run until we have removed the idle handling
 -	(and its timing problems) from CSvParser.
 -
 -	* glom/libglom/data_structure/field.cc: to_file_format(): Also
 -	escape carriage-returns, just in case.
 -	* tests/import/test_parsing.cc: Comment out the
 -	test_skip_on_no_ending_newline test, because I see no reason why we
 -	would want to ignore last lines with no newline.
 -
 -2009-10-06  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: List: Click to view details.
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.[h|cc]: Connect to
 -	TouchSelector::signal_changed to respond to clicks on the list. Note that
 -	a drag to pan (scroll) does not cause that signal to be emitted.
 -	* glom/utility_widgets/db_adddel/db_adddel_withbuttons.[h|cc]: On Mameo,
 -	remove the Delete and Edit buttons because deleting can be done via the
 -	details window (viewable on Maemo). The Add button is still there and is ugly.
 -
 -2009-10-06  Murray Cumming  <murrayc murrayc com>
 -
 -	DbAddDel: Expand an appropriate column.
 -
 -	* glom/libglom/data_structure/layout/layoutitem.[h|cc]: get_display_width():
 -	Remove the bool return and just return the value, because 0 already means no
 -	specified width.
 -	* glom/libglom/document/document.cc:
 -	* glom/mode_design/layout/dialog_layout_details.cc:
 -	* glom/print_layout/canvas_layout_item.cc: Adapt.
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.[h|cc]:
 -	Added get_column_to_expand() to choose the last expandable (text, no specified
 -	width) column.
 -	treeview_append_column(): Add a bool expand property and use it.
 -	construct_specified_columns(): Expand the expandable column, to avoid
 -	wasting space or expanding an inappropriate column.
 -
 -2009-10-05  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Allow editing of hidden tables (only) via its details window.
 -
 -	* glom/mode_data/box_data_list_related.cc: enable_buttons(): Add a maemo
 -	ifdef around m_AddDel.set_allow_view_details().
 -
 -2009-10-05  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: List: Use only 2 columns by default, so some have enough space.
 -
 -	* glom/libglom/document/document.cc: get_data_layout_groups_plus_new_fields():
 -	Restrict maemo to 2 list columns by default.
 -
 -2009-10-05  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Related Records / AddDel: Use icon-only Hildon buttons.
 -
 -	* glom/utility_widgets/db_adddel/db_adddel_withbuttons.[h|cc]: Use Hildon
 -	Buttons, with only icons.
 -
 -2009-10-05  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Hide group titles by default.
 -
 -	* glom/libglom/data_structure/translatable_item.[h|cc]:
 -	Added clear_title_in_all_locales().
 -	* glom/libglom/document/document.cc:
 -	maemo_restrict_layouts_to_single_column_group(): Also clear the group titles
 -	to make the default maemo layout more compact.
 -
 -2009-10-05  Murray Cumming  <murrayc murrayc-desktop>
 -
 -	Export: Correct problems in the binary data for images: Escape newlines.
 -
 -	* glom/libglom/data_structure/field.cc: to_file_format(): Escape
 -	newlines as \012 instead of removing them, because this is probably
 -	what gda_binary_to_string() intends.
 -
 -2009-10-05  Murray Cumming  <murrayc murrayc com>
 -
 -	Export: Correct problems in the binary data for images.
 -
 -	* glom/libglom/data_structure/field.cc: to_file_format(): Escape
 -	newlines and quotes in binary data text, to workaround libgda bug
 -	https://bugzilla.gnome.org/show_bug.cgi?id=597390
 -	* glom/frame_glom.cc: export_data_to_stream(): Double check that
 -	image data contains no newlines or quotes.
 -	* glom/libglom/utils.cc: string_replace(): Avoid an endless loop
 -	when the search_for input parameter is empty.
 -	This fixes bug #593304 (Michael Hasselmann)
 -
 -2009-10-04  Murray Cumming  <murrayc murrayc com>
 -
 -	Fix regression: Actually show field choices again in combo boxes.
 -
 -	* glom/libglom/utils.cc: get_choice_values(): Move the list_values.push_back()
 -	out of the ifdef block so we actually show field choices again in the combo
 -	boxes. This was broken by the commit from Johannes on 2009-07-30.
 -	Hopefully ldtp tests will avoid this in future.
 -
 -2009-10-02  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Really fall back to the standard layout if there is no maemo layout.
 -
 -	* glom/libglom/document/document.cc: get_data_layout_groups_plus_new_fields():
 -	Really fall back to the standard layout if there is no maemo layout.
 -	When creating a default layout, restrict the column count to 1.
 -
 -2009-10-02  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Avoid multi-column details layouts.
 -
 -	* glom/libglom/document/document.[h|cc]:
 -	Added maemo_restrict_layouts_to_single_column_group().
 -	* glom/application.cc: on_document_load(): On maemo, call it to make the
 -	layout more suitable by default, if no custom maemo layout is defined.
 -
 -2009-10-02  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Fix the build.
 -
 -	* glom/frame_glom.cc:
 -	* glom/import_csv/dialog_import_csv.cc:
 -	* glom/import_csv/dialog_import_csv_progress.cc: Added no-exceptions ifdefs,
 -	and corrected the hildonmm code.
 -
 -1.12.1:
 -
 -2009-10-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/utils.h|cc]: build_sql_select_fields_to_get():
 -	Removed the unused extra_join parameter.
 -	* glom/base_db.cc: Adapted.
 -
 -2009-10-02  Murray Cumming  <murrayc murrayc com>
 -
 -	Related Records: Fix doubly-related records portals, such as a list of
 -	an Artist's publishers (via their albums).
 -
 -	* glom/libglom/utils.[h|cc]: build_sql_select_with_where_clause():
 -	Move some code into build_sql_select_fields_to_get(), so we can get the
 -	list of fields to get without the rest of the SQL.
 -	* glom/base_db.cc: set_found_set_where_clause_for_portal():
 -	Use build_sql_select_fields_to_get() to GROUP BY the full field list
 -	instead of just the primary key, as required by recent PostgreSQL,
 -	and probably by the SQL specification.
 -	We should investigate SELECT DISTINCT again to simplify this.
 -
 -2009-10-02  Michael Hasselmann  <michaelh openismus com>
 -
 -	Import: Cleanup, added comments.
 -
 -2009-10-01  Michael Hasselmann  <michaelh openismus com>
 -
 -	Import: Made import working again, changed import logic
 -
 -	* glom/import_csv/csv_parser.[h|cc] (fetch_next_row): This method allows
 -	iterating over the parser's cache without the need for a max row/column
 -	count. Potential issue with valid empty rows during import needs to be fixed.
 -
 -	* glom/import_csv/dialog_import_csv.[h|cc]: Removed logic based on row counts.
 -	It turned out that most places didn't need access to get_row_count() anyway.
 -
 -	* glom/import_csv/dialog_import_csv_progess.cc: Switched import to use the
 -	parser's new fetch_next_row() API. Not tested for large files yet.
 -
 -2009-09-29  Murray Cumming  <murrayc murrayc com>
 -
 -	Doubly-related Records: Correct the SQL.
 -
 -	* glom/base_db.cc: set_found_set_where_clause_for_portal():
 -	For doubly-related records, use the correct relationship for the GROUP BY to
 -	avoid a SQL error about a non-existant field. We must have been lucky before.
 -
 -	However, we now need to fix the SQL error (maybe new in a recent PostgreSQL
 -	version) about not mentioning all viewed fields in the GROUP BY.
 -
 -2009-09-29  Murray Cumming  <murrayc murrayc com>
 -
 -	Design: Related Records Portal: Prevent use of inappropriate relationships.
 -
 -	* glom/mode_design/layout/dialog_layout_list_related.cc:
 -	on_combo_relationship_changed(): Do not allow the related record to show
 -	relationships that would require duplicate values in unique fields to show
 -	multiple records. Noticed by Alessio C.
 -
 -2009-09-29  Murray Cumming  <murrayc murrayc com>
 -
 -	LayoutGroup: Added accessors for columns count, hiding the member variable.
 -
 -	* glom/libglom/data_structure/layout/layoutgroup.[h|cc]: Made m_columns_count
 -	private and added get/set_columns_count() so I can see when this is changing.
 -	* glom/libglom/data_structure/layout/layoutgroup.h:
 -	* glom/libglom/document/document.cc:
 -	* glom/mode_data/flowtablewithfields.cc:
 -	* glom/utility_widgets/dialog_flowtable.cc: Adapted.
 -
 -2009-09-29  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Actually allow details to be opened.
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: get_item_selected():
 -	Use Hildon::TouchSelector::get_selected() instead of get_active() so it
 -	actually works for rows other than the first one.
 -	See hildon bug https://bugs.maemo.org/show_bug.cgi?id=4640,
 -	though the error might be in our maemomm C++ code to work around that.
 -
 -2009-09-28  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Find: Show the quickfind.
 -
 -	* glom/frame_glom.cc: Constructor: On Maemo, put the quickfind widgets in
 -	the separate find window.
 -
 -2009-09-28  Murray Cumming  <murrayc murrayc com>
 -
 -	Create QuickFind buttons in code, instead of Glade.
 -
 -	* glom/frame_glom.cc:
 -	* glom/glom.glade: Create the QuickFind widgets in code instead of in
 -	Glade so we can adapt them for Maemo and put them in the separate Find
 -	window.
 -
 -2009-09-28  Murray Cumming  <murrayc murrayc com>
 -
 -	Initial dialog: Expand the network item.
 -
 -	* glom/dialog_existing_or_new.cc: Constructor: Expand the Network
 -	item, because it helps to explain what it is, particularly on Maemo
 -	where there are no treeview row arrows.
 -
 -2009-09-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.[h|cc]: Maemo: Show the Find UI in a separate window.
 -
 -2009-09-28  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Find: Use only the details view.
 -
 -	* glom/mode_find/notebook_find.[h|cc]: Hide the list view (and tabs) on Maemo.
 -	This needs to be a separate window too.
 -
 -2009-09-28  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Show the table name in the AppMenu. Added a Find Button.
 -
 -	* glom/application.cc: update_window_title(): Update the picker button here
 -	too.
 -	init_menus(): Add a Find button for the AppMenu.
 -	* glom/navigation/maemo/pickerbutton_table.cc: set_table_name(): Actually
 -	set the row as active.
 -	* glom/dialog_existing_or_new.cc: Make sure the first row is visible,
 -	even on Maemo. Otherwise it looks strange.
 -
 -2009-09-28  Murray Cumming  <murrayc murrayc com>
 -
 -	Initial dialog: Expand the network item.
 -
 -	* glom/dialog_existing_or_new.cc: Constructor: Expand the Network
 -	item, because it helps to explain what it is, particularly on Maemo
 -	where there are no treeview row arrows.
 -
 -2009-09-28  Murray Cumming  <murrayc murrayc com>
 -
 -	Fix a crash.
 -
 -	* glom/dialog_existing_or_new.cc: Move some assertions so this works
 -	again in non-client-only mode.
 -
 -2009-09-28  Murray Cumming  <murrayc murrayc com>
 -
 -	client-only mode: Ifdef out unused code.
 -
 -	* glom/dialog_existing_or_new.[h|cc]: Ifdef out unused code for the new
 -	document notebook tab in client-only mode.
 -
 -2009-09-28  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Removed icons from dialogs.
 -
 -	* glom/glom.glade: Comment out icons in our maemo5 branch.
 -
 -2009-09-28  Murray Cumming  <murrayc murrayc com>
 -
 -	Client-only mode: Change the initial dialog label.
 -
 -	* glom/dialog_existing_or_new.cc: Constructor: Change the label text if in
 -	client-only mode, to avoid mentioning creation of documents.
 -
 -2009-09-25  Murray Cumming  <murrayc murrayc com>
 -
 -	Fix the build with gtkmm < 2.18.
 -
 -	* glom/utility_widgets/flowtable.cc: Correct the use of
 -	GTKMM_MINOR_VERSION to fix the build with older gtkmm versions.
 -
 -2009-09-25  Michael Hasselmann  <michaelh openismus com>
 -
 -	Import: More code cleanup in tests
 -
 -	* glom/import_csv/csv_parser.cc (set_file_and_start_parsing): Fail on empty
 -	file uri.
 -
 -	* tests/import/*: Removed the ugly mainloop singleton, among other cleanups.
 -
 -2009-09-25  Murray Cumming  <murrayc murrayc-desktop>
 -
 -	Cleanup.
 -
 -	* glom/glom.glade: Really revert a bad merge from the maemo5 branch.
 -	* glom/libglom/connectionpool_backends/postgres_self.cc: Do not have
 -	actual newlines in string literals.
 -
 -2009-09-25  Murray Cumming  <murrayc murrayc com>
 -
 -	Fix the build with gtkmm < 2.18.
 -
 -	* glom/utility_widgets/flowtable.cc: Correct the use of
 -	GTKMM_MINOR_VERSION to fix the build with older gtkmm versions.
 -
 -2009-09-25  Murray Cumming  <murrayc murrayc-desktop>
 -
 -	Import tests: Fixed.
 -
 -	* tests/import/utils.[h|cc]: run_parser_from_buffer(): Added a
 -	version that takes a std::string, to make the common case more robust.
 -	* tests/import/test_parsing.cc:
 -	* tests/import/test_signals.cc: Fix the tests by not incorrectly
 -	taking the length of the raw arrays, which caused the temp files to
 -	contain garbage.
 -
 -2009-09-25  Murray Cumming  <murrayc murrayc-desktop>
 -
 -	Import tests: Handle encoding errors.
 -
 -	* tests/import/utils.cc: Handle signal_encoding_error too, because this
 -	is one way that the parser can stop.
 -	Increase the timeout because an infinite loop is unlikely (and not
 -	currently happening).
 -
 -2009-09-25  Murray Cumming  <murrayc murrayc com>
 -
 -	tests/import/: Small cleanup.
 -
 -	* tests/import/test_parsing.cc:
 -	* tests/import/utils.[h|cc]: Use a sigc::slot instead of the ugly
 -	(because not typedefed) function pointer type.
 -
 -2009-09-25  Murray Cumming  <murrayc murrayc com>
 -
 -	Removed some debug output.
 -
 -	* glom/libglom/data_structure/glomconversions.cc: parse_time():
 -	* tests/test_parsing_time.cc: Removed debug output.
 -
 -2009-09-25  Michael Hasselmann  <michaelh openismus com>
 -
 -	Import: Changed the signature of line_scanned handler
 -
 -	* glom/import_csv/dialog_import_csv.[h|cc]: Changed the signare of
 -	on_parser_line_scanned, to use CsvParser::type_row_strings. It does not
 -	change anything, as the handler didn't even use the parameters.
 -
 -	Import: Fixed tests to fit new parser API
 -
 -	* glom/import_csv/csv_parser.[h|cc]: Added a finished_parsing signal since the
 -	max_row count logic is flawed
 -	(https://bugzilla.gnome.org/show_bug.cgi?id=588233#c16). Also moved common
 -	parts of on_stream_read(.) (now on_buffer_read(.)) into
 -	copy_buffer_and_continue_reading(.), to avoid copy'n'paste bugs.
 -
 -	* tests/import/utils.[h|cc]: Added mainloop functionality to trigger the idle
 -	parse sequence of the CsvParser for the testcases.
 -
 -	* tests/import/test_[parsing,signals].cc: Fixed the tests to fit new parser
 -	API.
 -
 -1.12.0:
 -
 -2009-09-25  Murray Cumming  <murrayc murrayc com>
 -
 -	Command spawning: Really check the return value.
 -
 -	* glom/libglom/spawn_with_feedback.cc:
 -	execute_command_line_and_wait_until_second_command_returns_success():
 -	Actually check the return value of the first command, so we can fail
 -	immediately (with stderr output) when, for instance, postgresql
 -	fails to read the configuration file due to changed options, such as
 -	no longer recognizing max_fsm_pages in PostgreSQL 8.4
 -
 -2009-09-25  Murray Cumming  <murrayc murrayc com>
 -
 -	Replace some NULLs with 0 because this is C++, not C.
 -
 -	* glom/libglom/connectionpool_backends/postgres.cc:
 -	* glom/libglom/connectionpool_backends/postgres_self.cc:
 -	* glom/libglom/spawn_with_feedback.cc: Replace NULLs with 0.
 -
 -2009-09-25  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Fix the non-exceptions build again.
 -
 -	* glom/print_layout/canvas_print_layout.cc: Added ifdefs around KeyFile
 -	calls. I wonder why I only noticed this now.
 -
 -2009-09-24  Murray Cumming  <murrayc murrayc com>
 -
 -	Self-Hosting: Use the new ident configuration for PostgreSQL 8.4.
 -
 -	* glom/libglom/spawn_with_feedback.[h|cc]: Added an
 -	execute_command_line_and_wait() overload that has an output parameter
 -	for the stdout from the command.
 -	* glom/libglom/connectionpool_backends/postgres_self.[h|cc]:
 -	Added a get_postgresql_utils_version_as_number() utiltity method,
 -	and use it in set_network_shared() to use a different syntax for
 -	Postgres 8.4, hopefully fixing bug #595608 (Fryderyk Dziarmagowski)
 -
 -2009-09-24  Murray Cumming  <murrayc murrayc com>
 -
 -	Self-Hosting: Retry the connection just-long-enough.
 -
 -	* glom/libglom/connectionpool_backends/postgres.[h|cc]: attempt_connect():
 -	Add a throw() declaration because we know that this really never throws,
 -	though other similar methods do.
 -	* glom/libglom/connectionpool_backends/postgres_self.cc: connect():
 -	If not network-shared then retry every second when the connection fails,
 -	because the (default) password really must be correct. Seems to work,
 -	requiring 6 retries on my system.
 -	However, we must still wait a hard-coded time to be sure of failure
 -	if the password is not the default one, for instance when network sharing.
 -	* glom/libglom/spawn_with_feedback.cc:
 -	execute_command_line_and_wait_until_second_command_returns_success():
 -	Remove the hacked 8-second wait here.
 -
 -2009-09-23  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Details: Do not show buttons.
 -
 -	* glom/mode_data/box_data_details.[h|cc]: ifdef out the buttons for maemo.
 -	* glom/glom.glade: Hack a HildonStackableWindow into the maemo5 branch
 -	to avoid a warning with our get_widget_derived() call.
 -
 -2009-09-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc: Rename the HBox member variables
 -	to make their purposes clearer.
 -
 -2009-09-23  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Use Hildon::StackableWindow.
 -
 -	* glom/bakery/app_withdoc_gtk.h:
 -	* glom/window_boxholder.h: Use Hildon::StackableWindow instead of just
 -	Hildon::Window because this always seems to be the right thing to do.
 -
 -2009-09-23  Murray Cumming  <murrayc murrayc com>
 -
 -	Renamed Dialog_Glom to Window_BoxHolder.
 -
 -	* glom/dialog_glom.[h|cc]: Renamed to window_boxholder.[h|cc] to make
 -	its purpose clearer.
 -	* glom/frame_glom.[h|cc]:
 -	* glom/mode_data/notebook_data.[h|cc]:
 -	* Makefile_glom.am: Adapted.
 -
 -2009-09-22  Murray Cumming  <murrayc murrayc com>
 -
 -	Dialog_Glom: Make this a little less stupid, so we can ifdef for Maemo.
 -
 -	* glom/dialog_glom.[h|cc]: Derive from Window, not Dialog.
 -	Constructor: Add the provided box instead of requiring us to add it
 -	explicitly (to the Dialog's vbox).
 -	* glom/frame_glom.cc:
 -	* glom/mode_data/notebook_data.cc: Adapt.
 -
 -2009-09-22  Murray Cumming  <murrayc murrayc com>
 -
 -	On Maemo, show the details in a separate window.
 -
 -	* glom/mode_data/notebook_data.[h|cc]: On maemo, hide the tabs, and don't
 -	add the details box to the notebook. Instead add it to a window and show that
 -	window instead of switching to a details tab when details are requested.
 -
 -
 -2009-09-21  Murray Cumming  <murrayc murrayc com>
 -
 -	import tests: Fix the no-exceptions build.
 -
 -	* tests/import/test_parsing.cc:
 -	* tests/import/test_signals.cc: Fix the build without exceptions.
 -
 -2009-09-21  Johannes Schmid <jschmid openismus com>
 -
 -	* Makefile_tests.am:
 -	Fixed make dist. The sources of tests/test_python_module weren't
 -	given which broke at least with automake-1.10
 -
 -2009-09-21  Murray Cumming  <murrayc murrayc com>
 -
 -	Export: Use .csv file extension to match the filter when importing.
 -
 -	* glom/utils_ui.[h]cc]: Added get_filepath_with_extension() to add
 -	(if necessary) a specified file extension to a filepath.
 -	* glom/frame_glom.cc: on_menu_file_export(): Add a .csv file
 -	extension if not already specified, so we automatically see the
 -	export file in the file chooser when importing.
 -
 -2009-09-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_import_csv.cc: get_data(): Avoid out-of-bounds crashes
 -	when accessing the vector of vectors. Note that this check is
 -	already in the appropriate place in the import_csv_refactored branch.
 -	This makes bug #593304 slighly clearer, though it is now an endless
 -	loop with debug output.
 -
 -2009-09-21  Murray Cumming  <murrayc murrayc com>
 -
 -	Import dialog: Set the number of sample rows to 2 by default.
 -
 -	* glom/dialog_import_csv.cc: Set the number of sample rows to 2
 -	by default, not 0.
 -	* glom/frame_glom.cc: Hack around another (!) GtkBuilder warning about
 -	a secondary top-level object (textbuffer).
 -
 -2009-09-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/glom-1.0.pc.in: Rename to glom-1.12.pc.in to match
 -	the .so name and header install location. Noticed by Chris Coulson.
 -
 -2009-09-18  Michael Hasselmann  <michaelh openismus com>
 -
 -	Import tests: made them quiet
 -
 -	* Makefile_tests.am, test/import/utils.[cc|h],
 -	tests/import/test_[parsing|signals].cc: Only report on failure. Moved common
 -	parts into an utility namespace.
 -
 -2009-09-18  Murray Cumming  <murrayc murrayc com>
 -
 -	CsvParser: Make this an actual parser, with a sane API.
 -
 -	* glom/dialog_import_csv.[h|cc]:
 -	* glom/dialog_import_csv_progress.[h|cc]: Move into glom/import_csv/
 -	* glom/import_csv/: Added file_encodings.[h|cc], moving the encodings
 -	list into it. This is similar to mode_design/iso_codes.[h|cc].
 -	* glom/import_csv.[h|cc]: Rename to glom/import_csv/csv_parser.[h|cc]
 -	to match the class name.
 -	Move actual parsing (and the vector of row/column data) into
 -	CsvParser, leaving the dialogs to just respond to signals and get
 -	data via get methods.
 -
 -	However, this breaks the import tests, because they add data to
 -	the parser directly using m_raw. They must be changed to read actual
 -	files, or maybe we could add some intermediate level of API that they
 -	could test.
 -
 -2009-09-18  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Use some Hildon widgets.
 -
 -	* glom/utility_widgets/entryglom.[h|cc]:
 -	* glom/utility_widgets/textviewglom.h: Use Hildon::TextView and Hildon::Entry.
 -
 -2009-09-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.ac: Add a full configure example for maemo in a comment,
 -		to help my memory.
 -	* glom/dialog_import_csv.cc: Fix a typo to fix the build on maemo.
 -
 -2009-09-18  Murray Cumming  <murrayc murrayc-desktop>
 -
 -	CsvParser: Made some API private.
 -
 -	* glom/dialog_import_csv.[h|cc]: get_field_for_column(): Return a
 -	sharedptr<const>, not a silly const sharedptr<>&.
 -	* glom/dialog_import_csv_progress.cc:
 -	* glom/import_csv.[h|cc]: add get_state() and get_rows_count(). Make
 -	some API private to make it clearer what needs to be done to make
 -	this a real self-contained class.
 -
 -2009-09-18  Murray Cumming  <murrayc murrayc com>
 -
 -	CSV Import: Minor code style changes.
 -
 -	* glom/dialog_import_csv.cc:
 -	* glom/dialog_import_csv_progress.cc:
 -	* glom/import_csv.[h]cc]: Prefix the state enum with STATE_.
 -	Use 0 instead of NULL because this is C++. Remove some debug output.
 -	Make signal type and variable names consistent with other code.
 -	* tests/import/test_signals.cc: Add a last std::endl.
 -
 -2009-09-18  Murray Cumming  <murrayc murrayc com>
 -
 -	Tests: Stop using valgrind by default.
 -
 -	* Makefile_tests.am: Do not run all tests under valgrind. valgrind is
 -	for humans to read, and make check has no way to know if the result is
 -	appopriate or not. Run things under valgrind when you want to.
 -
 -2009-09-17  Michael Hasselmann <michaelh openismus com>
 -
 -Refactoring Dialog_Import_CSV: created testcase for the CsvParser's signal emission
 -
 -	* Makefile_tests.am: all tests now run within valgrind by default since mem
 -	leaks in testcases are potential mem leaks in the application. Parameters might
 -	need tweaking.
 -
 -	* glom/import_csv.cc (CsvParser::on_idle_parse): Fixed a missing negation in a
 -	conditional, which was wrongfully leading to signal emissions. Found by the
 -	import signals testcase.
 -
 -	* test/import/test_parsing.cc: Fixed a null byte issue when setting the raw
 -	contents of the parser.
 -
 -	* test/import/test_signals.cc: This testcase checks the CsvParser's signal
 -	emission on varying input. The basic idea was to have on testcase for each
 -	code path that leads to a signal emission in glom/import_csv.cc, even if that
 -	leads to overlapping code coverage tests with the parser testcase.
 -
 -2009-09-17  Johannes Schmid  <jschmid openismus com>
 -
 -	* Makefile_libglom.am: Don't link libglom
 -	statically on maemo. (#594355)
 -
 -2009-09-17  Johannes Schmid  <jschmid openismus com>
 -
 -	* glom/application.cc: offer_new_or_existing():
 -	Replace a TODO comment with g_assert_val_if_reached() because
 -	reaching this branch would mean that the dialog returned
 -	an unhandled response.
 -
 -2009-09-17  Johannes Schmid  <jschmid openismus com>
 -
 -	* regression_tests/test_python_module.cc:
 -	* Makefile_tests.am:
 -	Added a regression test for the loading of the python modules.
 -	Unfortunately this test doesn't trigger the crash bug that
 -	happens on exit() on the maemo platform.
 -
 -2009-09-17  Johannes Schmid  <jschmid openismus com>
 -
 -	* glom/main.cc:
 -	Really check if pygda module is available. A typo caused
 -	the check for the glom module twice while the gda module
 -	wasn't checked at all
 -
 -2009-09-14  Johannes Schmid  <jschmid openismus com>
 -
 -	* glom/dialog_import_csv.cc:
 -	Fixed maemo non-exception build of CsvParser refactoring.
 -
 -2009-09-14  Murray Cumming  <murrayc murrayc com>
 -
 -	Main Window: Correct (again) the order of Records/Found widgets.
 -
 -	* glom/glom.glade: main_window: Put the Records:/Found: widgets in
 -	sub-hboxes, and change their order by hand in the .glade file because
 -	GtkBuilder and Glade do not seem to interpret the file in the same way.
 -
 -1.11.2:
 -
 -2009-09-14  Murray Cumming  <murrayc murray com>
 -
 -	* glom/frame_glom.cc:
 -	* glom/utility_widgets/flowtable.cc: Fixed warnings-as-errors build
 -	problems with the latest gtkmm.
 -
 -2009-09-11  Michael Hasselmann <michaelh openismus com>
 -
 -	Refactoring Glom::Dialog_Import_CSV: first parser tests created
 -
 -	* Makefile_tests.am, tests/import.sh,
 -	tests/import/test_parsing.cc: The first tests for the CsvParser
 -	are ready. Basic input is tested but no real world examples yet. Run with 'make
 -	check TESTS=tests/import.sh' to run tests with valgrind.
 -
 -	Renamed regression_tests folder to tests
 -
 -	* tests, Makefile_tests.am: Changed paths accordingly.
 -
 -2009-09-09  Michael Hasselmann <michaelh openismus com>
 -
 -	Refactoring Glom::Dialog_Import_CSV
 -
 -	* ChangeLog, Makefile_glom.am, glom/dialog_import_csv.[h|cc],
 -	glom/import_csv.[h|cc], glom/dialog_import_csv_progress.cc: Moved the inlined
 -	Parser class from the Dialog_Import_CSV class to the new CsvParser class.  The
 -	CsvParser already handles the line scanning and encoding conversion but is
 -	supposed to take over the file reading responsibility as well.  In order to
 -	allow the Dialog_Import_CSV class to parse a scanned line into its tree model
 -	the parser emits a lineScanned signal, with the currently scanned line as
 -	parameter.
 -	Bug #588233.
 -
 -2009-09-08  Johannes Schmid <jschmid openismus com>
 -
 -	 Bug 594357 -  Maemo: sqlite behaves strange
 -
 -	 * glom/utility_widgets/db_addel/glom_db_treemodel.cc:
 -	 DbTreeModel::create():
 -	 Create the correct DataAccessWrapper in both codepaths and not only
 -	 in the exception code path. That makes no difference for postgres but
 -	 is needed for sqlite.
 -
 -2009-09-08  Johannes Schmid <jschmid openismus com>
 -
 -	 Bug 594357 -  Maemo: sqlite behaves strange
 -
 -	 * glom/utility_widgets/db_addel/glom_db_treemodel.cc:
 -	 DbTreeModel::create():
 -	 Create the correct DataAccessWrapper in both codepaths and not only
 -	 in the exception code path. That makes no difference for postgres but
 -	 is needed for sqlite.
 -
 -2009-09-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/box_reports.[h|cc]:
 -	* glom/navigation/box_tables.[h|cc]: Comment out some save_to_document()
 -	methods in client-only mode.
 -
 -2009-09-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/frame_glom.cc: Fix tiny typos to fix the non-maemo build.
 -
 -2009-09-05  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: ifdef out useless menu code.
 -
 -	* glom/application.[h|c]]: Ifdef out any menu-building code because
 -	it must be completely replaced by Hildon::AppMenu code on Maemo.
 -	* glom/mode_data/notebook_data.cc: Constructor: Hide the notebook
 -	tabs, in preparation for just showing the list, with the details in a
 -	separate window on Maemo.
 -
 -2009-09-05  Murray Cumming  <murrayc murrayc com>
 -
 -	connection_request_password_and_attempt(): Fix a crash in client-only mode.
 -
 -	* glom/frame_glom.[h|cc]: connection_request_password_and_attempt():
 -	Move some decision-making into handle_request_password_connection_error,
 -	to allow us to handle the no-exception API better, though this is
 -	clearer anyway, or would be without the ifdefs.
 -
 -2009-09-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: on_document_load(): Add a ! to really check
 -	for unsupported backends.
 -
 -2009-09-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: check_document_hosting_mode_is_supported():
 -	Correct and ifdef to an ifndef.
 -
 -2009-09-05  Murray Cumming  <murrayc murrayc com>
 -
 -	Maemo: Use Hildon::FileChooserDialog for opening files.
 -
 -	* glom/application.[h|cc]: Remove unused (and unnecessary since the new
 -	initial dialog) on_menu_file_open() and on_menu_file_close() overrides
 -	and ui_file_select_open_with_browse().
 -	* glom/dialog_existing_or_new.cc: on_select_clicked(): Use
 -	Hildon::FileChooserDialog on Maemo.
 -	* glom/bakery/app_withdoc_gtk.cc: Remove the uncommented undef of
 -	GLOM_ENABLE_MAEMO - no more nasty hacks please. Instead comment-out
 -	the set_menu() call with a TODO, leaving the rest of the maemo-specific
 -	code working.
 -
 -2009-09-05  Murray Cumming  <murrayc murrayc com>
 -
 -	Check for unsupported hosting modes.
 -
 -	* glom/application.[h|cc]:
 -	Added check_document_hosting_mode_is_supported() to warn the user
 -	if the build cannot use the hosting mode in the file, and call it from
 -	on_document_load().
 -	* glom/libglom/document/bakery/document.cc: load(), load_from_data():
 -	Call set_is_new(false) so we can check for this in
 -	App/View::on_document_load(), to avoid complaining about an unused
 -	default hosting mode.
 -
 -2009-09-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: offer_new_or_existing(): In the client-only build,
 -	actually handle the enum for opening an existing file in client mode.
 -
 -2009-09-05  Murray Cumming  <murrayc murrayc com>
 -
 -	offer_new_or_existing(): Add Gtk::Builder error handling .
 -
 -	* glom/application.cc: offer_new_or_existing(): Add error handling to
 -	show how GtkBuilder complains about Atk objects in .glade files on
 -	Maemo, and actually fails.
 -
 -2009-09-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/print_layout/canvas_print_layout.cc:
 -	* glom/utility_widgets/imageglom.cc: Fix the build when -fno-exceptions
 -	is used.
 -
 -2009-09-05  Murray Cumming  <murrayc murrayc com>
 -
 -	Added dlopen test of the python library.
 -
 -	* glom/libglom/test_connectionpool.cc:
 -	* glom/libglom/test_document.cc: Fixed the build without exceptions.
 -	* Makefile_tests.am: Added test_load_python_library, using dlopen()
 -	to show the numpunct linker error (bug #594142) without actually using
 -	python.
 -
 -2009-09-04  Daniel Elstner  <daniel kitta gmail com>
 -
 -	Do not try to catch non-existing MetaStructError
 -
 -	* glom/base_db.cc (Base_DB::get_fields_for_table_from_database):
 -	For now, catch Glib::Error instead of Gnome::Gda::MetaStructError,
 -	which does not exist.
 -
 -2009-09-04  Murray Cumming  <murrayc murrayc com>
 -
 -	Avoid compiler warnings.
 -
 -	* configure.ac: Add a comment about using the PYTHON environment
 -	variable to specify the python version.
 -	* glom/dialog_existing_or_new.cc:
 -	* glom/dialog_import_csv_progress.cc:
 -	* glom/utility_widgets/canvas/canvas_group_resizable.cc: Avoid some
 -	compiler warnings, mostly about missing returns in unlikely
 -	situations.
 -
 -2009-09-04  Murray Cumming  <murrayc murrayc com>
 -
 -	Mention the failed python module name on stdcerr.
 -
 -	* glom/python_embed/glom_python.cc: glom_python_module_is_available(),
 -	gda_python_module_is_available(): Output a hint to the command-line too,
 -	in case maemo crashes when showing UI as mine does at the moment,
 -	and to mention the exact python module name that failed.
 -
 -2009-09-04  Murray Cumming  <murrayc murrayc com>
 -
 -	Fix the client-only non-maemo build on maemo.
 -
 -	* configure.ac: Correct the AS_IF() calls so that we really do not
 -	need iso-codes in client-only mode.
 -	* glom/print_layout/canvas_layout_item.cc:
 -	* glom/print_layout/canvas_print_layout.cc:
 -	* glom/printoperation_printlayout.cc: Fix the build without
 -	exceptions, without properties and without default signal handlers,
 -	with ifdefs.
 -
 -	* glom/base_db.cc: get_fields_for_table_from_database(): Actually add
 -	a no-exceptions ifdef for the use of Gda::MetaStruct::complement()
 -	instead of just ifdefing it out for Maemo.
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/entryglom.cc:
 -	* glom/utility_widgets/imageglom.cc:
 -	Likewise, ifdef the use of get_accessible on GTKMM_ATKMM_ENABLED instead
 -	of GLOM_ENABLE_MAEMO, to fix the client-only non-maemo build on Maemo.
 -	Again, please stop abusing the MAEMO ifdef for hacks without even a TODO.
 -
 -2009-09-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/layout/layout_item_dialogs/dialog_buttonscript.h:
 -	Removed unnecessary GLOM_ENABLE_CLIENT_ONLY ifndef.
 -
 -2009-09-04  Murray Cumming  <murrayc murrayc com>
 -
 -	Moved more design-only classes to glom/mode_design/
 -
 -	* glom/libglom/data_structure/iso_codes.[h|cc]:
 - 	* glom/utility_widgets/comboentry_currency.cc
 -	* glom/mode_design/translation/:
 -	Moved to glom/mode_design/.
 -	* glom/Makefile_glom.am, *.[h|cc]:
 -	* po/POTFILES.in: Adapted.
 -	* configure.ac: Make use of iso-codes dependent on client-only, not
 -	maemo, because that actually makes sense.
 -
 -1.11.1:
 -
 -2009-09-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* Makefile_tests.am: Fixed a tiny typo to fix the tests build.
 -
 -2009-09-03  Murray Cumming  <murrayc murrayc com>
 -
 -	Move some non-layout print_layout code back out of mode_design
 -
 -	* glom/mode_design/print_layouts/canvas_layout_item.[h|cc]:
 -	* glom/mode_design/print_layouts/canvas_print_layout.[h|cc]:
 -	Moved to glom/print_layout/, because they are used by client-only mode
 -	too.
 -	* glom/Makefile_glom.am, *.[h|cc]: Adapted.
 -	* po/POTFILES.in: Update for moved files.
 -
 -2009-09-03  Murray Cumming  <murrayc murrayc com>
 -
 -	Moved many developer-mode files into glom/mode_design/ now that our
 -	non-recursive build allows that without linker errors.
 -
 -	* glom/combobox_fields.[h|cc]:
 -	* glom/combobox_relationship.[h|cc]:
 -	* glom/layout_item_dialogs/:
 -	* glom/mode_data/dialog_choose_field.[h|cc]:
 -	* glom/mode_data/dialog_choose_relationship.[h|cc]:
 -	* glom/mode_data/dialog_layout*.[h|cc]:
 -	* glom/mode_data/treestore_layout.[h|cc]:
 -	* glom/layout_item_dialogs/:
 -	Moved to glom/mode_design/layout/
 -	* glom/reports/report_builder.[h|cc]: Moved to glom/
 -	* glom/reports/dialog_layout_report.[h|cc]"
 -	* glom/reports/treestore_report_layout.[h|cc]:
 -	Moved to glom/mode_design/report_layout/
 -	* glom/database_preferences.[h|cc]:
 -	* glom/relationships_overview/: Moved to
 -	glom/mode_design/
 -	* glom/glom_developer.glade:
 -	* glom/dialog_new_self_hosted_connection.[h|cc]:Rename to
 -	glom/mode_design/dialog_initial_password.[h|cc], renaming the class too,
 -	because that's what this is now.
 -	* glom/utility_widgets/dialog_layoutitem_properties.[h|cc]: Removed
 -	this unused class.
 -	* glom/Makefile_glom.am, *.[h|cc]: Adapted.
 -
 -2009-09-03  Murray Cumming  <murrayc murrayc com>
 -
 -	libglom: Avoid client-only build changes: partial recommit of revert.
 -
 -	* glom/libglom/appstate.cc:
 -	* glom/libglom/connectionpool.h:
 -	* glom/libglom/connectionpool_backends/backend.h:
 -	* glom/libglom/connectionpool_backends/postgres.h:
 -	* glom/libglom/connectionpool_backends/postgres_central.h:
 -	* glom/libglom/connectionpool_backends/postgres_self.h:
 -	* glom/libglom/connectionpool_backends/sqlite.h:
 -	* glom/libglom/document/document.h: Remove mention of
 -	GLOM_ENABLE_CLIENT_ONLY from comments because we no longer use it in
 -	libglom.
 -	* glom/libglom/connectionpool_backends/postgres.cc: attempt_connect():
 -	Do not use Gda::CONNECTION_OPTIONS_READ_ONLY just because exceptions
 -	are disabled in the build. Please stop using vaguely-related ifdefs
 -	to hack changes in. In this case it would be GLOM_ENABLE_CLIENT_ONLY,
 -	but we don't want that option in libglom anymore.
 -
 -2009-09-01  David King  <davidk openismus com>
 -
 -	* glom/glom.glade: Fix an interesting warning, where the quickfind
 -	Gtk::Entry was described in the glade file as having focus, even
 -	though it was set to be not visible, and therefore not realized.
 -
 -2009-09-01  David King  <davidk openismus com>
 -
 -	* glom/dialog_existing_or_new.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: Use Gtk::StockID
 -	constructor with builtin stock items so that GTK+ warnings are not
 -	triggered.
 -
 -2009-09-01  Johannes Schmid  <jschmid openismus com>
 -
 -	* glom/base_db.cc: Fixed small build problem with disabled exceptions
 -
 -2009-09-01  Johannes Schmid  <jschmid openismus com>
 -
 -	* glom/libglom/connectionpool_backends/postgres.cc:
 -	Also use SQL_IDENTIFIERS_CASE_SENSITIVE on maemo
 -	* glom/base_db.cc:
 -	enable the use gda_meta_store_sql_identifier_quote() on maemo
 -
 -	These were hacks used before libgda 4.0.4 was available on maemo
 -
 -2009-08-31  David King  <davidk openismus com>
 -
 -	Revert "Really never use config.h in libglom."
 -
 -	This reverts commit 8d73f2051fb624e145505b3587a12d89ed3c8326.
 -
 -	The change gave no benefits, but did break any project that used libglom
 -	and autoheader.
 -
 -2009-08-31  Johannes Schmid  <jschmid openismus com>
 -
 -	* Makefile_test.am: Fixed make dist (probably automake-1.11 is more
 -	clever but it does not build with automake-1.10 because it assumes
 -	that the test programs have sources in form of xxx.c and not xxx.cc
 -
 -2009-08-27  Murray Cumming  <murrayc murrayc com>
 -
 -	Avoid GTK+ warnings.
 -
 -	* glom/glom_developer.glade: Set GtkAdjustment page_size to 0 to
 -	avoid new GTK+ warnings.
 -	* glom/layout_item_dialogs/dialog_field_layout.cc:
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	* glom/mode_design/print_layouts/dialog_text_formatting.cc:
 -	More nasty workarounds for GtkBuilder bug #575714, which is still not
 -	fixed.
 -
 -2009-08-27  Murray Cumming  <murrayc murrayc com>
 -
 -	Remove a nasty hack that would become a runtime bug.
 -
 -	* glom/libglom/connectionpool_backends/sqlite.cc: Revert the previous
 -	hack by Johannes, which misused GLIBMM_EXCEPTIONS_ENABLE to
 -	avoid use of CONNECTION_OPTIONS_SQL_IDENTIFIERS_CASE_SENSITIVE. We will
 -	just update libgdamm on Maemo Fremantle instead.
 -
 -2009-08-27  Murray Cumming  <murrayc murrayc com>
 -
 -	Really never use config.h in libglom.
 -
 -	* glom/libglom/*.cc: Remove some remaining includes of config.h
 -	instead of libglom_config.h.
 -	* glom/libglom/libglom_config.h.in: Add GETTEXT_PACKAGE,
 -	PACKAGE_TARNAME, though I suspect that libglom requires different
 -	build stuff for translations.
 -	Added POSTGRES_UTILS_PATH and EXEEXT.
 -
 -2009-08-27  Murray Cumming  <murrayc murrayc com>
 -
 -	Update NEWS and increase version.
 -
 -	* NEWS:
 -	* configure.ac: Update in anticipation of a release.
 -	* regression_tests/test_signal_reemit.cc: Avoid an unused parameter
 -	warning.
 -
 -2009-08-27  Johannes Schmid <jschmid openismus com>
 -
 -	* glom/libglom/connectionpool_backends/sqlite.c:
 -	Fixed build issues on maemo platform
 -
 -2009-08-26  Murray Cumming  <murrayc murrayc com>
 -
 -	Fix a time parsing regression.
 -
 -	* glom/libglom/libglom_config.h.in: Moved HAVE_STRPTIME here from
 -	config.h (which should maybe not be generated by autoheader),
 -	to the test_parsing_time regression.
 -	* glom/libglom/data_structure/iso_codes.cc: Include libglom_config.h
 -	instead of config.h, after moving ISO_CODES_PREFIX there.
 -
 -2009-08-26  Murray Cumming  <murrayc murrayc com>
 -
 -	Tests: Correct the return values.
 -
 -	* regression_tests/test_parsing_time.cc:
 -	* regression_tests/test_signal_reemit.cc: Return EXIT_SUCCESS or
 -	EXIT_FAILURE properly.
 -
 -2009-08-26  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: remove_quotes(): Implement this simply, just removing
 -	start and end quotes. However, I do not think this should be
 -	necessary:
 -	http://bugzilla.gnome.org/show_bug.cgi?id=593154
 -
 -2009-08-25  Murray Cumming  <murrayc murrayc com>
 -
 -	Comment out use of gda_sql_identifier_remove_quotes().
 -
 -	* glom/base_db.cc: remove_quotes(): Comment out use of
 -	gda_sql_identifier_remove_quotes() with a stdcerr warning because
 -	it is deprecated and I get a weird undefined reference error and we
 -	need to change how we use this anyway. To fix the build.
 -
 -2009-08-25  Johannes Schmid <jschmid openismus com>
 -
 -	Fixed remaing maemo build problems
 -
 -	* autogen.sh: Don't hardcode automake-1.10
 -	* glom/application.cc:
 -	* glom/base_db.cc:
 -	* glom/dialog_invalid_data.cc:
 -	* glom/filechooser_export.cc:
 -	* glom/glade_utils.cc:
 -	* glom/glade_utils.h:
 -	* glom/main.cc:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/imageglom:
 -	Fixed error handling of Gtk::Builder (change in gtkmm 2.14)
 -
 -	* glom/mode_data/flowtablewithfields.cc:
 -	* glom/mode_data/flowtablewithfields.h:
 -	Fixed vfuncs problem
 -
 -2009-08-21  Daniel Elstner  <danielk openismus com>
 -
 -	Do not use .pyd extension on non-Windows systems
 -
 -	* Makefile.am (pymod_ldflags): Set variable conditionally and use
 -	the "-shrext .pyd" option only on Windows hosts.
 -
 -2009-08-21  Michael Hasselmann  <michaelh openismus com>
 -
 -	* glom/libglom/connectionpool_backends/sqlite.cc: Fix typos to fix the build.
 -	Bug #592576
 -
 -2009-08-21  Murray Cumming  <murrayc murrayc com>
 -
 -	Document::get/set_connection_user(): Don't save this in the document.
 -
 -	* glom/libglom/document/document.[h|cc]: get/set_connection_user():
 -	Document these as not being saved in the document, because it makes no sense
 -	to save a single user there, because Glom is a multi-user system.
 -	* glom/dialog_connection.cc: load_after(), save_before(): Don't save the user
 -	in the document.
 -
 -2009-08-19  David King  <davidk openismus com>
 -
 -	* glom.am:
 -	* libegg.am:
 -	* libglom.am:
 -	* tests.am: Remove unused .am files.
 -	* glom/libglom/test_document_with_layout.cc: Remove unused file,
 -	identical to glom/libglom/test_document.cc.
 -	* ChangeLog: Fix some formatting.
 -
 -2009-08-04  Murray Cumming  <murrayc murrayc com>
 -
 -	Rename included .am files.
 -
 -	* *.am: Rename to Makefile_*.am so they are grouped together.
 -	* Makefile.am: Include the new filenames.
 -
 -2009-07-31  Johannes Schmid <jschmid openismus com>
 -
 -	* configure.ac: Add dependency on hildon-fmmm
 -
 -	* glom/application.cc:
 -	* glom/utils_ui.cc: Comment out most hildon stuff for now
 -
 -	* glom/bakery/app_withdoc.cc:
 -	* glom/bakery/app_withdoc_gtk.cc:
 -	* glom/xsl_utils.cc:
 -	Fix Gio exception handling
 -
 -	* glom/base_db.cc:
 -	* glom/base_db_table_data.cc:
 -	* glom/dialog_existing_or_new.cc:
 -	* glom/dialog_import_csv.cc:
 -	* glom/dialog_invalid_data.cc:
 -	* glom/filechooser_export:
 -	* glom/glom_privs.cc:
 -	* glom/mode_data/box_data_calendar_related.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_portal.cc:
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/reports/report_builder.cc:
 -	Fixed Gda exception handling, most notable and often get_value_at()
 -
 -	* glom/glade_utils.h
 -	* glom/glade_utils.cc: Fixed GtkBuilder usage (though this seems to be a bug
 -	in Gtkmm)
 -
 -	* glom/mode_data/flowtablewithfields.h:
 -	* glom/notebook_glom.cc:
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/entryglom.cc:
 -	* glom/utility_widgets/imageglom.cc:
 -	* glom/utility_widgets/placeholder-glom.cc:
 -	* glom/utility_widgets/placeholder-glom.h:
 -	* glom/utility_widgets/dialog_image_progress.cc:
 -	Use signals instead of virtual methods, disable accesibility on maemo
 -
 -	* glom/utility_widgets/canvas/*.cc: Use get/set_property() instead of the
 -	direct property access when properties are disabled
 -
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utiltiy_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -
 -2009-07-30  Johannes Schmid <jschmid openismus com>
 -
 -	* autogen.sh: Use automake-1.10 explicitly
 -
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool_backends/postgres.cc:
 -	* glom/libglom/data_structure/field.cc:
 -	* glom/libglom/data_structure/fieldtypes.cc:
 -	* glom/libglom/document/bakery/document.cc:
 -	* glom/libglom/python_embed/py_glom_relatedrecord.cc:
 -	* glom/libglom/spawn_with_feedback.cc:
 -	* glom/libglom/utils.cc:
 -	Fix exception and client-only related problems on maemo platform. Also
 -	fixed some TODOs that were related.
 -
 -	In sum this allows to build glom master on maemo fremantle.
 -
 -2009-07-28  Daniel Elstner  <danielk openismus com>
 -
 -	Build and run tests on make check
 -
 -	* Makefile.am (AM_DEFAULT_SOURCE_EXT): Make use of the Automake default
 -	_SOURCES feature for building single-source-file programs.
 -	(noinst_PROGRAMS): Move to tests.am.
 -	* tests.am (check_PROGRAMS): List all test executables here, so they
 -	are only built on make check.
 -	(TESTS): List unit test programs from the regression_tests/ directory.
 -
 -2009-07-28  Daniel Elstner  <danielk openismus com>
 -
 -	Use deprecated libtool macros for Maemo's sake
 -
 -	* configure.ac (LT_PREREQ), (LT_INIT): Comment-out.
 -	(AC_PROG_LIBTOOL): Use old-style and deprecated M4 macro to initialize
 -	libtool because the Maemo development environment still ships with the
 -	ancient libtool 1.4.
 -	(AC_DISABLE_STATIC), (AC_LIBTOOL_WIN32_DLL): Call old-style macros to
 -	set libtool options, instead of passing flag arguments to LT_INIT().
 -
 -2009-07-27  Murray Cumming  <murrayc murrayc com>
 -
 -	ldtp tests: Correct the English in the error messages.
 -
 -	* ldtp/common.py:
 -	* ldtp/database-creation/create-db.py:
 -	* ldtp/fields-edit/fields-edit.py: Correct the English in the error messages.
 -
 -2009-07-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/dialog_image_progress.cc: on_stream_read(): Add casts
 -	to avoid compiler warnings, to fix distcheck.
 -
 -2009-07-27  Murray Cumming  <murrayc murrayc com>
 -
 -	Add more delay so that self-hosting does not fail sometimes.
 -
 -	* glom/libglom/spawn_with_feedback.cc:
 -	execute_command_line_and_wait_until_second_command_returns_success(): Wait
 -	for extra 8 seconds instead of 3, so that postgresql startup has really
 -	finished. The delay was not enough since I removed the debug output, which
 -	was probably providing extra delay.
 -	This is unpleasant.
 -
 -2009-07-25  Daniel Elstner  <danielk openismus com>
 -
 -	List auto-generated files in MAINTAINERCLEANFILES
 -
 -	* Makefile.am (MAINTAINERCLEANFILES): Clean up the macros/*.m4 files
 -	installed by autogen.sh, as well as the eggmarshalers.[ch] files.
 -
 -2009-07-25  Daniel Elstner  <danielk openismus com>
 -
 -	Pass --automake option to gnome-doc-prepare
 -
 -	* autogen.sh: Invoke gnome-doc-prepare with the --automake option to
 -	tell it that Automake will take care of installing its macro files.
 -
 -2009-07-25  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: get_fields_for_table_from_database():
 -	Use gda_meta_store_sql_identifier_quote() as mentioned in bug #589607
 -	to maybe make this work with uppercase in the table name.
 -
 -2009-07-24  Daniel Elstner  <danielk openismus com>
 -
 -	Assign copyright of my work to Openismus GmbH
 -
 -	* configure.ac: Reassign the copyright which I had assigned to myself
 -	temporarily to Openismus GmbH instead, as I did the work in my position
 -	as an employee.
 -	* *.am: ditto,
 -	* macros/mm-python.m4: ditto.
 -
 -2009-07-24  Daniel Elstner  <danielk openismus com>
 -
 -	Split Makefile.am into logically separate parts
 -
 -	* glom.am: New file for building the glom binary itself.
 -	* libglom.am: New file for building the libglom library.
 -	* libegg.am: New file for building the libegg static library.
 -	* tests.am: New file for building the test programs.
 -	* Makefile.am: Move logical chunks into the separate files listed
 -	above, and pull them in as Automake include files.
 -
 -2009-07-24  Daniel Elstner  <danielk openismus com>
 -
 -	Invoke gnome-doc-common from autogen.sh
 -
 -	* autogen.sh: Execute "gnome-doc-common --copy" to install the files
 -	omf.make and xmldocs.make into the source tree.
 -
 -2009-07-24  Daniel Elstner  <danielk openismus com>
 -
 -	Use G_GSIZE_FORMAT instead of a cast
 -
 -	* glom/libglom/python_embed/pygdavalue_conversions.c: Change format
 -	specifier for GType to "%" G_GSIZE_FORMAT and remove the explicit cast
 -	again.  I forgot that this is C code, so GType will always be gsize --
 -	at least with recent versions of GLib.
 -
 -2009-07-24  Daniel Elstner  <danielk openismus com>
 -
 -	Use format "%lu" for GType and add cast
 -
 -	* glom/libglom/python_embed/pygdavalue_conversions.c: Change format
 -	specifier in g_warning() message back from "%u" to "%lu", and add an
 -	explicit cast to unsigned long.  Looks like GLib silently changed the
 -	type of GType from gulong to gsize, except when using a C++ compiler
 -	with a 64 bit target.  (Yes, really.)
 -
 -2009-07-24  Daniel Elstner  <danielk openismus com>
 -
 -	Suppress warning for missing field initializers
 -
 -	* configure.ac (GLOM_WXXFLAGS): Add -Wno-missing-field-initializers to
 -	the warning options at level max or higher, so that the Python module
 -	code will build with both Python 2.5 and Python 2.6 without producing
 -	warnings.
 -
 -2009-07-24  Murray Cumming  <murrayc murrayc com>
 -
 -	Catch unknown command-line options.
 -
 -	* glom/main.cc: Put try/catch around the Gtk::Main instantiation
 -	because I noticed that it throws an exception if you provide an
 -	unknown option.
 -
 -2009-07-24  Murray Cumming  <murrayc murrayc com>
 -
 -	Use CONNECTION_OPTIONS_SQL_IDENTIFIERS_CASE_SENSITIVE.
 -
 -	* glom/libglom/connectionpool_backends/postgres.cc:
 -	* glom/libglom/connectionpool_backends/sqlite.cc: When calling
 -	Gda::Connection::open_from_string(), use the new
 -	CONNECTION_OPTIONS_SQL_IDENTIFIERS_CASE_SENSITIVE option so the libgda
 -	API really does what we mean without needing any weird quoting.
 -
 -2009-07-23  Murray Cumming  <murrayc murrayc com>
 -
 -	Fix the build with Python 2.5, bringing back the warnings for others.
 -
 -	* glom/libglom/python_embed/py_glom_record.cc:
 -	* glom/libglom/python_embed/py_glom_related.cc:
 -	* glom/libglom/python_embed/py_glom_relatedrecord.cc:
 -	* glom/libglom/python_embed/pygdavalue_conversions.c: Remove the extra
 -	struct field initialization to fix the build with Python 2.5.
 -
 -2009-07-23  Daniel Elstner  <danielk openismus com>
 -
 -	Make libegg object files depend on eggmarshalers
 -
 -	* Makefile.am ($(*libegg*_a_OBJECTS)): Make all object files of
 -	libeggutil.a and libeggtoolpalette.a depend on the generated source
 -	files eggmarshalers.[ch].  This ensures that the marshaler files are
 -	generated before any of the libegg objects are compiled, but avoids
 -	having to resort to BUILT_SOURCES for that purpose.
 -	(*_libeggtoolpalette_a_LIBADD): Remove dependency on libeggutil.a
 -	again, as it is not required for linking the static library itself.
 -
 -2009-07-23  Daniel Elstner  <danielk openismus com>
 -
 -	* Makefile.am (*_libeggtoolpalette_a_LIBADD): List libeggutil.a as
 -	dependency.
 -
 -2009-07-23  Daniel Elstner  <danielk openismus com>
 -
 -	* glom/bakery/app_withdoc.cc: Fix build with -Werror.
 -	* glom/dialog_import_csv.cc: ditto,
 -	* glom/libglom/python_embed/py_glom_record.cc: ditto,
 -	* glom/libglom/python_embed/py_glom_related.cc: ditto,
 -	* glom/libglom/python_embed/py_glom_relatedrecord.cc: ditto,
 -	* glom/libglom/python_embed/pygdavalue_conversions.c: ditto,
 -	* glom/mode_design/fields/dialog_fielddefinition.cc: ditto,
 -	* glom/utility_widgets/dialog_image_progress.cc: ditto.
 -
 -2009-07-23  Daniel Elstner  <danielk openismus com>
 -
 -	Switch to non-recursive build process
 -
 -	* macros/mm-pkg.m4: New file, defining the MM_PKG_CONFIG_SUBST macro.
 -	* macros/mm-python.m4: New file, defining the MM_CHECK_MODULE_PYTHON
 -	macro to replace the old and messy AM_CHECK_PYTHON_HEADERS.
 -	* acinclude.m4: Remove file which defined AM_CHECK_PYTHON_HEADERS.
 -
 -	* Makefile.am: Merge the contents of the Makefile.am files from all
 -	subdirectories into a single top-level Makefile.am, with the exception
 -	of docs/user-guide/Makefile.am.  Add the full subdirectory prefix to
 -	all listed files and change the Automake variable names accordingly.
 -	Get rid of the intermediate static libraries previously created for
 -	each source subdirectory, and list the source files directly in the
 -	toplevel target's SOURCES variable.  Overall, refactor and modernize
 -	the build rules and organization.
 -	* **/Makefile.am: Except for docs/user-guide/Makefile.am, remove the
 -	Makefile.am files recursively from all subdirectories.
 -
 -	* config.h.in: Remove file, and use autoheader to generate it.
 -	* autogen.sh: Replace with a modern minimalistic script which lets
 -	autoreconf do the bulk of the work.
 -	* configure.ac: Massive refactoring.  Adapt to the new non-recursive
 -	build organization.  Modernize the M4 and shell code, and make use of
 -	newer Autoconf and Automake constructs to simplify many checks.  Also
 -	make minor corrections to a number of tests and definitions.
 -
 -	* glom/application.cc: Remove the need for GLOM_ICON_DIR by setting
 -	the window icon by name instead of loading the image file directly.
 -	Use PACKAGE_VERSION in place of VERSION.
 -	* glom/dialog_existing_or_new.cc: Use a subdirectory of GLOM_DOCDIR
 -	in place of GLOM_EXAMPLES_DIR.  Remove GLOM_EXAMPLES_DIR_ALTERNATIVE.
 -
 -	* glom/utils_ui.cc: Replace DATADIR by GLOM_DATADIR.
 -	* glom/libglom/connectionpool.cc: Remove GLOM_SAVE_DATADIR hack, which
 -	is not necessary anymore as DATADIR is not globally defined anymore.
 -	* glom/libglom/connectionpool_backends/postgres_self.cc: ditto,
 -	* glom/libglom/spawn_with_feedback.cc: ditto,
 -	* glom/main.cc: ditto. Also replace LOCALEDIR by GLOM_LOCALEDIR, and
 -	output PACKAGE_STRING instead of VERSION in response to the --version
 -	command-line option.  Replace PACKAGE and VERSION by their modern
 -	Automake equivalents.
 -	* glom/xsl_utils.cc: Remove GLOM_SAVE_DATADIR hack, and replace
 -	GLOM_XSLTDIR with a subdirectory of GLOM_PKGDATADIR.
 -
 -	* glom/mode_data/box_data_calendar_related.cc: Replace GLOM_GLADEDIR
 -	by a combination of GLOM_PKGDATADIR and a subdirectory name.
 -	* glom/mode_design/print_layouts/print_layout_toolbar_button.cc: Use
 -	a subdirectory of GLOM_PKGDATADIR in place of GLOM_ICON_DIR.
 -	* glom/utility_widgets/layouttoolbar.cc: ditto,
 -	* glom/utility_widgets/layouttoolbarbutton.cc: ditto.
 -
 -	* glom/python_embed/glom_python.cc: Include generated config.h for the
 -	definition of GLOM_ABI_VERSION_UNDERLINED.
 -	* glom/python_embed/python_module/py_glom_module.cc: ditto.
 -
 -2009-07-22  David King  <davidk openismus com>
 -
 -	* glom/libglom/glom-1.0.pc.in: Add libxml++ dependency, needed for
 -	Bakery headers.
 -
 -2009-07-23  David King  <davidk openismus com>
 -
 -	* glom/libglom/init.cc: Check that GThread is supported before calling
 -	Glib::thread_init(). This fixes a crash, as otherwise g_thread_init()
 -	can be called twice.
 -
 -2009-07-22  Johannes Schmid  <jschmid openismus com>
 -
 -	* configure.ac: Fixed typo with libepc
 -
 -2009-07-21  David King  <davidk openismus com>
 -
 -	* glom/libglom/glom-1.0.pc.in:
 -	* glom/libglom/*/Makefile.am: Use GLOM_ABI_VERSION in place of "1.0" so
 -	that installed headers go into the correct, ABI-specific directory.
 -
 -2009-07-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/glom-1.0.pc.in: Remove the bakery dependency, because no part
 -	of Glom now depends on the bakery shared library.
 -	I suspect that libglom should depend on python somehow, but we will see.
 -
 -2009-07-17  Murray Cumming  <murrayc murrayc com>
 -
 -	Use an xmlns ID for the MIME-type registration.
 -
 -	* glom/libglom/document/bakery/document_xml.[h|cc]: set_dtd_root_node_name():
 -	Take an optional xmlns ID and write this in the document.
 -	* glom/libglom/document/document.cc: Constructor: Specify a
 -	http://glom.org/glom_document xmlns ID. I don't think this needs to exist.
 -	This will make it easier for the MIME-type system to detect the file's MIME
 -	type.
 -	* glom.xml: (MIME-type detection rules): Add a root-XML rule, that checks
 -	for the xmlns and the root node name. We keep the string check too for
 -	legacy.
 -
 -2009-07-10  Murray Cumming  <murrayc murrayc com>
 -
 -	Export: Don't open the format dialog behind the FileChooser dialog.
 -
 -	* glom/frame_glom.cc: on_menu_file_export(): Set the FileChooser dialog as
 -	transient so that the other dialog (opened from the FileChooser) is not
 -	behind the FileChooser.
 -	Ubuntu Launchpad bug https://bugs.launchpad.net/ubuntu/+source/glom/+bug/397409
 -	(elmergato)
 -
 -2009-07-10  Murray Cumming  <murrayc murrayc com>
 -
 -	Really save field changes again.
 -
 -	* glom/libglom/document/document_glom.cc: set_table_fields():
 -	Avoid the broken attempt at optimization, so that field changes are always
 -	saved, for instance when changing them via the Field Definition dialog.
 -	Ubuntu Launchpad bug
 -	https://bugs.launchpad.net/ubuntu/+source/glom/+bug/394507
 -	(elmergato)
 -
 -2009-07-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_import_csv.cc: advance_field(): Do not skip characters after
 -	the ".
 -
 -2009-07-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_import_csv.cc: on_idle_parse(): Ignore newlines in quotes when
 -	dividing the input into "lines" to give to handle_line().
 -
 -2009-07-10  Murray Cumming  <murrayc murrayc com>
 -
 -	Import: Handle "" as ". Fix a crash.
 -
 -	* glom/dialog_import_csv.[h|cc]: Use typedefs to simplify code.
 -	advance_field(): Handle "" (escaped ") inside quotes.
 -	field_data_func(): Avoid a crash if not enough data was found.
 -
 -2009-07-09  Murray Cumming  <murrayc murrayc com>
 -
 -	Import: " is the only quote character, as per the CSV RFC.
 -
 -	* glom/dialog_import_csv.cc: advance_field(): Parse only " as
 -	start/end quotes, not ', as per the CSV RFC.
 -
 -	Part of Ubuntu bug
 -	https://bugs.launchpad.net/ubuntu/+source/glom/+bug/394894
 -	(elmergato)
 -
 -2009-07-08  Murray Cumming  <murrayc murrayc com>
 -
 -	Correct the export to use the CSV format as per the RFC "specification".
 -
 -	* glom/frame_glom.cc: export_data_to_stream(): For text fields, add
 -	" as per the CSV RFC.
 -	* glom/libglom/data_structure/field.cc: to_file_format(): Escape
 -	" as "". Note that we do not try to escape newlines. This is per the
 -	CSV RFC.
 -	* glom/libglom/utils.cc: string_replace(): In the loop, do not check
 -	what has already been processed, to avoid an infinite loop.
 -
 -	Ubuntu bug https://bugs.launchpad.net/ubuntu/+source/glom/+bug/394894
 -	(elmergato)
 -
 -2009-07-07  Murray Cumming  <murrayc murrayc com>
 -
 -	Catch libgda meta-store exceptions.
 -
 -	* glom/base_db.cc: get_table_names_from_database():
 -	* glom/libglom/connectionpool.cc: connect(): Added try/catch around
 -	calls to Gda::Connection::update_meta_store_*() because they now
 -	throw a MetaStoreError exception, though we do not know why yet.
 -
 -2009-07-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_existing_or_new.h: #include config.h to avoid a crash
 -	with the client-only build due to ABI code-size confusion.
 -
 -2009-07-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: init_menus_file(): Initialize
 -	m_toggleaction_network_shared to avoid a crash.
 -
 -2009-07-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/bakery/app_withdoc_gtk.[h|cc]: Remove the toolbar widget because
 -	we hide it anyway.
 -
 -2009-07-05  Murray Cumming  <murrayc murrayc-x61>
 -
 -	* glom/application.cc: update_network_shared_ui(): Un-ifndef this for
 -	client-only.
 -
 -2009-07-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/*.[h|cc]: Move some ifndefs around to fix the client-only build.
 -
 -2009-07-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document.cc: load_after(): Remove old code
 -	to check for developer mode in client-only builds.
 -
 -2009-07-04  Murray Cumming  <murrayc murrayc com>
 -
 -	Fix loading of the versioned python module.
 -
 -	* configure.ac:
 -	* glom/Makefile.am:
 -	* glom/python_embed/Makefile.am:
 -	* glom/python_embed/glom_python.cc:
 -	* glom/python_embed/python_module/Makefile.am:
 -	* glom/python_embed/python_module/py_glom_module.cc:
 -	* glom/python_embed/python_module/py_glom_module.h: Use glom_1_12
 -	instead of glom-1.12 because - and . are not valid in python module
 -	names. I wish I knew of any standard way to do parallel install of
 -	different versions of python modules.
 -
 -2009-07-04  Murray Cumming  <murrayc murrayc com>
 -
 -	libglom: Remove use of GLOM_ENABLE_MAEMO because it is about UI.
 -
 -	* glom/libglom/utils.cc:
 -	* glom/libglom/connectionpool.cc: Remove use of GLOM_ENABLE_MAEMO so
 -	because there should be no UI-specific login in libglom.
 -	* glom/libglom/document/document.[h|cc]: Remove
 -	get_active_layout_platform() because we no longer use GLOM_ENABLE_MAEMO.
 -	* glom/base_db.[h|cc]: Add a get_active_layout_platform(document)
 -	here instead.
 -	* glom/libglom/libglom_config.h.in: Moved GLOM_ENABLE_MAEMO to
 -	config.h.in because it is now only used in the app, not in libglom.
 -
 -	* glom/base_db_table_data.cc:
 -	* glom/frame_glom.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/relationships_overview/dialog_relationships_overview.cc:
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/dialog_choose_id.cc:
 -	* glom/utils_ui.h:
 -	* glom/xsl_utils.cc: Adapted, using config.h instead of libglom_config.h
 -
 -2009-07-04  Murray Cumming  <murrayc murrayc-x61>
 -
 -	libglom: Always enable developer-mode (!client-only) API.
 -
 -	* glom/libglom/*.[h|cc]: Remove use of ENABLE_CLIENT_ONLY ifdefs,
 -	so we can allow parallel install of full and
 -	client-only versions.
 -
 -2009-07-04  Murray Cumming  <murrayc murrayc com>
 -
 -	Remove ifdefs from libglom to allow parallel install of sqlite- and
 -	PostgreSQL-using versions of Glom.
 -
 -	* glom/libglom/connectionpool_backends/postgres.h:
 -	* glom/libglom/connectionpool_backends/postgres_central.h:
 -	* glom/libglom/connectionpool_backends/sqlite.h:
 -	* glom/libglom/document/document.[h|cc]:
 -	* glom/libglom/test_connectionpool.cc: Remove ifdefs that remove
 -	PostgreSQL or Sqlite API so that libglom always offers all features and
 -	always has the same ABI (ignoring no-exceptions/no-vfuncs
 -	alternative-glibmm-api versions). This will allow us to parallel install
 -	the full and client-only versions.
 -
 -	* glom/libglom/libglom_config.h.in: Move GLOM_ENABLE_POSTGRESQL/SQLITE
 -	config.h.in because we now only use it in the application, not in libglom.
 -	* glom/application.cc:
 -	* glom/dialog_connection.cc:
 -	* glom/frame_glom.cc:
 -	* glom/utility_widgets/filechooserdialog_saveextras.cc:
 -	* glom/utility_widgets/filechooserdialog_saveextras.h:
 -	Include config.h to get these
 -	definitions.
 -
 -2009-07-03  Murray Cumming  <murrayc murrayc com>
 -
 -	Allow parallel installs of libglom major versions.
 -
 -	* configure.ac: Define GLOM_ABI_VERSION as 1.12.
 -	* glom/Makefile.am:
 -	* glom/libglom/Makefile.am:
 -        * glom/python_embed/Makefile.am
 -	* glom/python_embed/python_module/Makefile.am:
 -	* regression_tests/Makefile.am: Add a 1.12 suffix to
 -	the libglom shared library name and the glom python module name.
 -	This must be changed in several places when the ABI version changes
 -	because we cannot use a variable in most of these places.
 -	Define it also as a macro for the .cc files, so Glom can import the
 -	correct version of the Glom python module
 -	- for instance, import glom-1.12.
 -	* glom/python_embed/glom_python.cc:
 -	* glom/python_embed/python_module/py_glom_module.cc: Import the
 -	correct version in python.
 -
 -2009-07-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.ac:
 -	* glom/Makefile.am:
 -	* glom/libglom/Makefile.am:
 -	* glom/libglom/python_embed/Makefile.am:
 -	* glom/python_embed/glom_python.cc:
 -	* glom/python_embed/python_module/Makefile.am:
 -	* glom/python_embed/python_module/py_glom_module.cc:
 -	* ldtp/database-creation/create-db.py:
 -	* regression_tests/Makefile.am:
 -
 -2009-09-30  Armin Burgmeier  <armin openismus com>
 -
 -	* ldtp/fields-edit/fields-edit.py: Added a new test which tests adding
 -	a new field to an existing table. More operations to test, such as
 -	changing and removing existing fields, can be added later.
 -
 -	* ldtp/fields-edit/postgres-central.xml:
 -	* ldtp/fields-edit/postgres-self.xml:
 -	* ldtp/fields-edit/sqlite.xml: XML Data files for the new test.
 -
 -	* ldtp/test.xml: Added it to the test suite, so that it can be run
 -	with ldtprunner.
 -
 -2009-06-28  Armin Burgmeier  <armin openismus com>
 -
 -	* ldtp/database-templates/SQLite:
 -	* ldtp/database-templates/PostgresCentral: Added database templates
 -	for two of the three backends. These can be copied and then opened to
 -	have a database available for LDTP tests to test.
 -
 -	* ldtp/common.py: Added create_test_database and delete_test_database
 -	functions which create or remove a database to test, from such a
 -	template database, respectively.
 -
 -	* ldtp/database-creation/create-db.py: Use the delete_test_database
 -	function from common on cleanup, remove own delete_database function.
 -
 -2009-06-30  Armin Burgmeier  <armin openismus com>
 -
 -	* ldtp/database-creation/create-db.py: Changed the name of the created
 -	database table (for empty databases) to TestTable, so that we test
 -	that table names with capital letters work correctly.
 -
 -2009-06-30  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/base_db.cc (get_fields_for_table_from_database): Make this work
 -	for table names which need quotation, and return unquoted field names.
 -	This fixes bug #587051.
 -
 -2009-06-30  Murray Cumming  <murrayc murrayc com>
 -
 -	get_table_names_from_database(): Remove quotes.
 -
 -	* glom/base_db.cc: get_table_names_from_database(): Remove quotes when they
 -	are (sometimes) in the meta data. I complained on the gnome-db mailing list
 -	about us having to do this.
 -
 -2009-06-29  Murray Cumming  <murrayc murrayc com>
 -
 -	Allow many fields to be added to layouts (or the export format) at once.
 -
 -	* glom/mode_data/dialog_choose_field.[h|cc]: Added get_fields_list() in
 -	addition to the existing get_field_list(), and allow multiple selection.
 -	* glom/base_db.[h|cc]: offer_field_list(): Rename to
 -	offer_field_list_select_one_field().
 -	Added offer_field_list() that returns a list of fields, allowing multiple
 -	selection.
 -
 -	* *.[h|cc]: Adapted to use the appropriate function, allowing, for instance,
 -	the export dialog to use multiple selection to add many fields at once.
 -
 -	Ubuntu Launchpad bug https://bugs.launchpad.net/ubuntu/+source/glom/+bug/393231
 -	(elmergato)
 -
 -2009-06-29  Murray Cumming  <murrayc murrayc com>
 -
 -	Export: Offer File overwrite confirmation.
 -
 -	* glom/frame_glom.cc: on_menu_file_export():
 -	* glom/translation/window_translations.cc: on_button_export():
 -	Call Gtk::FileChooser::set_do_overwrite_confirmation() so the user is
 -	warned when overwriting a file.
 -	Ubuntu Launchpad bug https://bugs.launchpad.net/ubuntu/+source/glom/+bug/393229
 -	(elmergato)
 -
 -2009-06-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/spawn_with_feedback.cc: ifdef out the debug output.
 -
 -2009-06-29  Murray Cumming  <murrayc murrayc com>
 -
 -	Reduce debug output.
 -
 -	* glom/libglom/data_structure/glomconversions.[h|cc]:
 -	sanity_check_date_text_representation_uses_4_digit_years(): Make the debug
 -	output optional.
 -	* glom/main.cc: Added a --debug-date-check option, to avoid the debug out
 -	about 4-digit dates normally.
 -
 -	* glom/dialog_existing_or_new.cc: list_examples_at_path(): Comment out debug
 -	output.
 -	* glom/libglom/connectionpool.cc: connect(): Comment out debug output that
 -	showed the (previously slow) meta update calls.
 -
 -2009-06-28  Murray Cumming  <murrayc murrayc com>
 -
 -	Print exception messages to stdout.
 -
 -	* ldtp/database-creation/create-db.py: When catching the exception,
 -	print it to stdout, because it does not seem to appear in the log file.
 -	* ldtp/common.py: Corrected the English of some exception messages.
 -
 -2009-06-28  Murray Cumming  <murrayc murrayc com>
 -
 -	Fix an error check.
 -
 -	* glom/xsl_utils.cc: transform_and_open(): Fix the check for a failed
 -	gtk_show_uri(), so we really check. Noticed while stealing this code
 -	for vidrot.
 -
 -2009-06-27  Armin Burgmeier  <armin openismus com>
 -
 -	* ldtp/database-creation/postgres-central-empty.xml:
 -	* ldtp/database-creation/postgres-self-empty.xml:
 -	* ldtp/database-creation/sqlite-empty.xml: Added missing files.
 -
 -	* ldtp/database-creation/create-db.py: Allow passing the datafilename
 -	as an argument when the script is called directly, not by ldtprunner.
 -
 -	* ldtp/README: Updated the section on how to execute a single test
 -	script.
 -
 -2009-06-26  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/document/bakery/document.h: Document that failure_code
 -	should be >= 1, so that we can detect whether the document could not
 -	be opened because it couldn't be read from disk, or a custom error
 -	code was set.
 -
 -	* glom/libglom/document/document.h: Set the value of
 -	LOAD_FAILURE_CODE_FILE_VERSION_TOO_NEW to 1, to honor the requirement
 -	explained above. This fixes showing the wrong error message when the
 -	document could not be loaded from disk.
 -
 -2009-06-26  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/application.cc (existing_or_new_new): When the new database
 -	could be created successfully, then add the document to the recent
 -	files list.
 -
 -2009-06-26  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/frame_glom.cc
 -	(connection_request_password_and_choose_new_database_name): Remember
 -	the port also for centrally hosted documents when a successful
 -	connection could be made.
 -
 -	* ldtp/database-creation/create-db.py: For empty documents, call the
 -	initial table 'test_table', not 'TestTable', because of bug #587051.
 -
 -2009-06-26  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/dialog_glom.h:
 -	* glom/dialog_glom.cc: Added an optional second parameter to the
 -	constructor, to specify a title name for the dialog.
 -
 -	* glom/frame_glom.cc: Set the title of the tables dialog to "Tables",
 -	so that it can be accessed via LDTP.
 -
 -	* glom/glom.glade: Also change the title of that dialog, even though
 -	it's not used, since only the window's child widget is loaded from the
 -	glade file.
 -
 -	* glom/utility_widgets/adddel/adddel.h:
 -	* glom/utility_widgets/adddel/adddel.cc: Added a
 -	set_treeview_accessible_name() function, to set the accessible name of
 -	the AddDel's TreeView.
 -
 -	* glom/navigation/box_tables.cc: Set an accessible name for the
 -	TreeView, to be able to access it via LDTP.
 -
 -	* glom/utility_widgets/filechooserdialog_saveextras.cc: Set an
 -	accessible name for the database title text entry.
 -
 -	* ldtp/common.py (select_backend): Added a dialog_title parameter, as
 -	the dialog has a different title when creating a new, empty document.
 -	(wait_for_database_open): Rely on the database title being 'Test', not
 -	'Small Business Example'.
 -
 -	* ldtp/database-creation/create-db.py: Change the database title of
 -	the newly created database to 'Test'. Support creating new, empty
 -	documents, and reopen the document after it has been closed, to make
 -	sure the document has been saved correctly.
 -
 -	* ldtp/database-creation/postgres-central-example.xml:
 -	* ldtp/database-creation/postgres-self-example.xml:
 -	* ldtp/database-creation/sqlite-example.xml: Moved from the files
 -	without -example, set the <example> tag to 1.
 -
 -	* ldtp/database-creation/postgres-central-example.xml:
 -	* ldtp/database-creation/postgres-self-example.xml:
 -	* ldtp/database-creation/sqlite-example.xml: Same with <example> set
 -	to 0.
 -
 -	* ldtp/test.xml: Added the three new files which create an empty
 -	document instead of creating one from the Small Business Example.
 -
 -2009-06-24  Armin Burgmeier  <armin openismus com>
 -
 -	* ldtp/common.py: Work around bug #586291, added a function to enter
 -	the connection credentials into the connection dialog if using a
 -	centrally hosted database. Added mapping of backend name to button
 -	texts in the database creation dialog.
 -
 -	* ldtp/database-creation/postgres-central.xml:
 -	* ldtp/database-creation/postgres-self.xml:
 -	* ldtp/database-creation/sqlite.xml: Removed the button texts from
 -	the data XML files.
 -
 -	* ldtp/database-creation/create-db.py: Generalized the script so that
 -	it also handles central hosting. Delete the newly created centrally
 -	hosted database at the end. This requires pygda from git for now.
 -
 -	* ldtp/database-creation/create-central-db.py: Removed, as central
 -	hosting is also handled by create-db.py now.
 -
 -2009-06-24  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/glom.glade: Added a title to the connection dialog window, and
 -	added accessible names for the entries, to be able to use them via
 -	LDTP.
 -
 -	* ldtp/README: Describe how to set the login credentials required
 -	to test creating a centrally hosted database.
 -
 -	* ldtp/common.py: Moved useful code from
 -	ldtp/database-creation/create-db.py into functions in this file, so
 -	other tests can use them, too.
 -
 -	* ldtp/database-creation/create-db.py: Adapt accordingly.
 -
 -	* ldtp/database-creation/create-central-db.py:
 -	* ldtp/database-creation/postgres-central.xml: Added a new test script
 -	and data XML which tests creating a centrally hosted database.
 -
 -	* ldtp/test.xml: Added the new script file.
 -
 -2009-06-24  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/application.cc (on_document_load): Only provide a known user
 -	name and password for self-hosted databases, and ask the user for the
 -	database password for centrally-hosted ones.
 -
 -	* glom/frame_glom.cc (connection_request_password_and_attempt): Show
 -	the connection dialog for centrally hosted connections, and fix trying
 -	to login with the same (wrong) credentials all the time without giving
 -	the user a chance to correct them. This fixes bug #586684.
 -
 -2009-06-22  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/application.cc (on_document_load): If we load an example file,
 -	set the connection port in the document to 0, and enable trying other
 -	ports, instead of using the (arbitrary) values from the example file.
 -	This allows trying out various standard ports for postgresql when
 -	centrally-hosting the document and fixed creating a centrally-hosted
 -	database from an example file.
 -
 -	* glom/dialog_connection.cc (connect_to_server_with_connection): On a
 -	successful connection, set try other ports to false in the document,
 -	as we found a working port and don't need to try all the other ports
 -	next time.
 -
 -	* glom/frame_glom.cc
 -	(connection_request_password_and_choose_new_database_name): When
 -	creating a centrally-hosted database, remember the user name in the
 -	document, to be able to connect to the database from the saved
 -	document later. Actually, we would also need to save the password to
 -	do this correctly, though I wonder whether it's a good idea to save
 -	the user's database password in the .glom file.
 -
 -2009-06-22  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/frame_glom.cc:
 -	(connection_request_password_and_choose_new_database_name): Fixed a
 -	mistyped #ifdef, so that creating a centrally-hosted database does not
 -	lead to a crash.
 -
 -2009-06-20  Armin Burgmeier  <armin openismus com>
 -
 -	* ldtp/database-creation/create-db.py: Read the data what backend to
 -	use from the a data XML file, instead of as a function's argument.
 -
 -	* ldtp/database-creation/self-hosted.py:
 -	* ldtp/database-creation/sqlite.py: So we don't need these anymore.
 -
 -	* ldtp/database-creation/postgres-self.xml:
 -	* ldtp/database-creation/sqlite.xml: Instead, the data is specified in
 -	these data XML files.
 -
 -	* ldtp/test.xml: Adapt accordingly.
 -
 -2009-06-17  Armin Burgmeier  <armin openismus com>
 -
 -	* ldtp/README: Added a README file explaining how to run the tests.
 -
 -2009-06-17  Armin Burgmeier  <armin openismus com>
 -
 -	* ldtp/common.py: Added a common function to launch glom and wait for
 -	its windows to appear into a new separate python script file.
 -
 -	* ldtp/database-creation/create_db.py: Added a function to create a
 -	new database, with the backend to use as an argument. This allows to
 -	reuse the existing code to test other backends.
 -
 -	* ldtp/database-creation/self-hosted.py: Adapted accordingly.
 -
 -	* ldtp/database-creation/sqlite.py: Added a test file to check whether
 -	SQLite database creation works.
 -
 -	* ldty/test.xml: Added the test to create an SQLite database.
 -
 -2009-06-08  Armin Burgmeier  <armin openismus com>
 -
 -	* ldtp/database-creation/self-hosted.py: Added a LDTP test script
 -	which checks creation of a new self-hosted database from the Small
 -	Business Example file.
 -
 -	* ldtp/test.xml: Added an XML file for ldtprunner. Run "ldtprunner
 -	test.xml" to execute the test.
 -
 -2009-06-08  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: Added an accessible
 -	name for the TreeView.
 -
 -	* glom/utility_widgets/imageglom.h:
 -	* glom/utility_widgets/imageglom.cc:
 -	* glom/utility_widgets/entryglom.h:
 -	* glom/utility_widgets/entryglom.cc: Set an accessible name, based on
 -	the layout item's name.
 -
 -2009-06-08  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/utility_widgets/layoutwidgetbase.cc: Initialize m_pLayoutItem
 -	in client only mode, to avoid an uninitialized pointer in that case.
 -
 -2009-06-04  Murray Cumming  <murrayc murrayc com>
 -
 -	Show a specific error message when the flie format is too new.
 -
 -	* glom/libglom/document/bakery/document.[h|cc]:
 -	* glom/libglom/document/bakery/document_xml.[h|cc]: load(),
 -	load_after(): Take a int& failure_code output parameter to allow
 -	derived document classes to report a custom failure code.
 -	* glom/libglom/document/document.[h|cc]: load_after(): Return a
 -	custom failure_code for a too-new file version.
 -	* glom/bakery/app_withdoc.[h|cc]:
 -	Add a virtual ui_warning_load_failed(int failure_code) method that
 -	derived classes can override to respond to their own failure codes,
 -	with a generic default error message.
 -	open_document(), open_document_from_data(): Use the new method instead
 -	of hard-coding the error message.
 -
 -	* glom/application.[h|cc]:
 -	open_browsed_document(), on_menu_developer_changelanguage(): Adapt.
 -	Add an override of ui_warning_load_failed() to show
 -	our custom error dialog in response to our custom failure code.
 -	* glom/libglom/test_document.cc: Apapted.
 -
 -	Exceptions might be purer and need less code changes, but they would
 -	just be a container for an int failure code and it would be easier to
 -	not catch the error.
 -	This fixed bug #567102.
 -
 -2009-06-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/layout/layoutitem_portal.cc:
 -	get_navigation_relationship_specific(): Remove unnecessary this-> to
 -	be consistent with the rest of the code.
 -
 -2009-06-04  Murray Cumming  <murrayc murrayc com>
 -
 -	Related records portal: Hide the row button when navigation is none.
 -
 -	* glom/libglom/data_structure/layout/layoutitem_portal.h:
 -	Add documentation for get/set_navigation_relationship_specific(),
 -	get/set_navigation_type() and the enum.
 -
 -	* glom/mode_data/box_data_list_related.cc: enable_buttons():
 -	Disable editing of details when the portal has NAVIGATION_NONE.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	construct_specified_columns(): Set the button column visibility
 -	according to the member variable set in set_allow_view_details(),
 -	because the button column often does not exist when that is actually
 -	called.
 -	This completes bug #574360.
 -
 -2009-06-04  Murray Cumming  <murrayc murrayc com>
 -
 -	Update the DTD for portal navigation and save space in XML.
 -
 -	* glom/glom_document.dtd: Update for the portal navigation changes,
 -	as promised in bug #574360
 -	* glom/libglom/document/document.cc: save_before_layout_group():
 -	Do not even create the portal_navigation_relationship node if it is the
 -	default ("automatic"), to save space in the XML file.
 -
 -2009-06-04  Murray Cumming  <murrayc murrayc com>
 -
 -	Clean up the code to load/save portal navigation options.
 -
 -	* glom/libglom/document/document.cc: load_after_layout_group():
 -	Loading the portal's navigation options: Use == instead of
 -	ustring::compare() because this is not C.
 -	Explicitly default to automatic, removing the comment about defaulting
 -	to the default in the Portal's class to preserve the deprecated file
 -	format. This is more obvious.
 -	save_before_layout_group(): Simplify the code.
 -	Do not write GLOM_ATTRIBUTE_PORTAL_NAVIGATIONRELATIONSHIP_MAIN because
 -	a) It is deprecated (should be read but not written) and b) It is not
 -	read or used anywhere else anyway.
 -	Use constants for the possible attribute values, instead of copy/pasting
 -	the same string constants in several places.
 -
 -2009-06-04  Murray Cumming  <murrayc murrayc com>
 -
 -	Store script module code in child text nodes.
 -
 -	* glom/libglom/document/document.cc: load_after(), save_before():
 -	Store the (importable) python script library modules in a child text
 -	node instead of an attribute, as we do elsewhere, dealing with a TODO
 -	that I found in the DTD.
 -	* glom/glom_document.dtd: Update appropriately.
 -
 -1.11.0:
 -
 -2009-06-01  Murray Cumming  <murrayc murrayc com>
 -
 -	Remove ifdefs for disabled gtkmm vfuncs.
 -
 -	* glom/mode_data/flowtablewithfields.cc:
 -	* glom/utility_widgets/db_adddel/cellrenderer_buttonimage.cc:
 -	* glom/utility_widgets/db_adddel/cellrenderer_buttonimage.h:
 -	* glom/utility_widgets/db_adddel/cellrenderer_buttontext.cc:
 -	* glom/utility_widgets/db_adddel/cellrenderer_buttontext.h:
 -	* glom/utility_widgets/db_adddel/db_adddel_withbuttons.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel_withbuttons.h:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.h:
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtable.h: Remove ifdefs for disabled gtkmm vfuncs,
 -	because they are now enabled in Maemo 5 (Fremantle).
 -
 -2009-05-29  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool.cc: After invalidating a cached
 -	connection, disconnect from the cached connection's "finished" signal,
 -	to prevent the signal handler from being called later (other code
 -	might still have a reference to the connection at the
 -	invalidate_connection point). Also added a TODO comment, because this
 -	can still happen in rare cases. This fixes initial records not being
 -	shown after creating a database from an example file.
 -
 -2009-05-27  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/mode_data/notebook_data.cc: Added an accessible name for the
 -	notebook, so that it can be accessed via LDTP.
 -
 -2009-05-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.ac: Remove the mention of the eggcolumnchooser subdirectory, to
 -	fix the build.
 -
 -2009-05-26  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/glom.glade: Added a window title to the initial dialog, and
 -	accessible names for the two tree views in it, so they are easily
 -	accessible from LDTP.
 -
 -2009-05-25  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/dialog_existing_or_new.cc (constructor): Create the top level
 -	list elements before setting the cell data func, to avoid the cell
 -	data func being called before all the list elements have been added.
 -	This happended when Glom was launched via LDTP, leading to a crash.
 -
 -2009-05-20  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool_backends/backend.h:
 -	* glom/libglom/connectionpool_backends/postgres.h:
 -	* glom/libglom/connectionpool_backends/sqlite.h: Added
 -	get_public_schema_name() virtual function and implementations for both
 -	backends.
 -
 -	* glom/libglom/connectionpool.cc: Only update the meta store tables
 -	for the public schema of the corresponding backend. This considerably
 -	speeds up the initial meta store update. This requires latest libgdamm
 -	from git.
 -
 -2009-05-10  Murray Cumming  <murrayc murrayc com>
 -
 -	Disables the Open button next to ID fields if the field is empty.
 -
 -	* glom/utility_widgets/datawidget.[h|cc]:
 -	Added private update_go_to_details_button_sensitivity() method and
 -	called it whenever the value is changed by the user or set via
 -	set_value(). Fixes bug #565023.
 -
 -2009-05-07  Murray Cumming  <murrayc murrayc com>
 -
 -	Allow non-network-shared connections when using IPv6.
 -
 -	* glom/libglom/connectionpool_backends/postgres_self.cc:
 -	DEFAULT_CONFIG_PG_HBA_LOCAL: Add an entry in IPv6 syntax, because
 -	something seems to be more IPv6-like in Ubuntu Jaunty.
 -
 -2009-05-07  Murray Cumming  <murrayc murrayc com>
 -
 -	Pass some sharedptr&s as const.
 -
 -	* glom/utility_widgets/flowtable_dnd.h: on_dnd_add_layout_item()
 -	* glom/mode_data/flowtablewithfields.[h|cc]: on_dnd_add_layout_item(),
 -	on_entry_edited(), on_entry_open_details_requested(),
 -	on_dnd_add_layout_item(): Pass the sharedptr& as const.
 -
 -2009-05-07  Murray Cumming  <murrayc murrayc com>
 -
 -	Fixed minor compiler warnings and removed some virtuals.
 -
 -	* glom/mode_data/flowtablewithfields.h: Made methods non-virtual where
 -	the virtual is unnecessary and misleading.
 -
 -	* glom/utility_widgets/adddel/eggcolumnchooser/: Removed.
 -	* several: Fixed minor compiler warnings.
 -
 -2009-05-07  Armin Burgmeier  <armin arbur net>
 -
 -	* glom/glom.glade:
 -	* glom/utility_widgets/dialog_image_progress.h:
 -	* glom/utility_widgets/dialog_image_progress.cc:
 -	* glom/utility_widgets/Makefile.am: Added a dialog which loads an
 -	image and shows progress of the operation.
 -
 -	* glom/utility_widgets/imageglom.h:
 -	* glom/utility_widgets/imageglom.cc: Use this dialog when the user
 -	selects an image to load, to indicate progress for large images.
 -
 -2009-05-05  Armin Burgmeier  <armin arbur net>
 -
 -	* glom/libglom/sharedptr.h: Added operator!=.
 -
 -	* glom/mode_data/flowtablewithfields.h:
 -	* glom/mode_data/flowtablewithfields.cc: Added set_other_field_value
 -	which is the same as set_field_value except that it does not set the
 -	value for widget that belongs to the passed layout item's widget
 -	itself. This can be used if that very widget already contains the new
 -	value to avoid setting it again. Especially when dealing with large
 -	images this brings an essential speedup.
 -
 -	* glom/mode_data/box_data_details.cc (on_flowtable_field_edited): Use
 -	set_other_field_value, so that we don't set the value for the field
 -	which the user already changed again.
 -
 -	* glom/utility_widgets/imageglom.h:
 -	* glom/utility_widgets/imageglom.cc: Store the original data of the
 -	image file, and return it in get_value(), instead of creating a PNG
 -	from the raw image data, to speed up loading a large image file.
 -
 -	* glom/utils_ui.cc (get_pixbuf_for_gda_value): When loading images
 -	from the database, allow all image types, not just PNGs.
 -
 -	* glom/xsl_utils.cc: Include gtk/gtk.h to fix the build for me.
 -
 -2009-04-24  Murray Cumming  <murrayc murrayc com>
 -
 -	Don't network share new documents from (old) examples.
 -
 -	* glom/libglom/document/document.cc: load_after(): Only assume network-sharing
 -	for older documents if it's not an example, so we don't have to resave all the
 -	examples.
 -
 -2009-04-23  Murray Cumming  <murrayc murrayc com>
 -
 -	Fix loading of old self-hosted files, broken since defaulting to no sharing.
 -
 -	* glom/libglom/document/document.cc:
 -	get_latest_known_document_format_version(): Increase the number because we
 -	have added nodes/attributes.
 -	load_after(): For older document formats, read network_sharing as on if it
 -	is false (not mentioned).
 -
 -2009-04-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: on_document_load(): Avoid false unexpected error warning.
 -
 -2009-04-22  Michael Hasselmann  <michaelh openismus com>
 -
 -	Allow to disable navigation in the related record layout.
 -
 -	* glom/libglom/data_structure/layout/layoutitem_portal.[h|cc] ctor(),
 -	[set|get]_navigation_relationship_specific(), [set|get]_navigation_type(),
 -	set_navigation_type(): Replaced the flag for whether a specific navigation
 -	relationship should be used with an enum type, since we now have an
 -	additional state (no navigation relationship) in the Glom::LayoutItem_Portal
 -	class. Additionally, this internal state no longer needs to be exported so
 -	[set|get]_navigation_relationship_specific() can now be called without
 -	supplying a boolean output parameter.
 -	* glom/libglom/document/document.cc load_after_layout_group(),
 -	save_before_layout_group(): Added load and save support for the
 -	no-navigation-relationship option.
 -	* glom/mode_data/box_data_portal.cc get_suitable_table_to_view_details():
 -	Return an empty table name if the navigation relationship type was set to
 -	none.
 -	* glom/mode_data/dialog_layout_list_related.[h,cc] ctor(), update_ui(),
 -	save_to_document(), glom/glom_developer.glade: Insert a third choice ("none")
 -	for the navigation radio buttons.
 -	* glom/mode_data/dialog_layout_calendar_related.cc update_ui(),
 -	save_to_document(): Replaced calls to
 -	LayoutItem_Portal::[set|get]_navigation_relationship_specific() that still
 -	used a boolean output parameter.
 -	Bug #574360.
 -
 -2009-04-17  Murray Cumming  <murrayc murrayc com>
 -
 -	Makes navigation work to alternate specified relationships.
 -
 -	* glom/mode_data/flowtablewithfields.cc: on_portal_user_requested_details():
 -	Don't default to navigating to just the immediate related table. Instead,
 -	always use the navigation options, by always calling
 -	LayoutItem_Portal::get_suitable_record_to_view_details().
 -	Bug #579172 (Michael Hasselmann)
 -
 -2009-04-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: add_standard_groups(): Give the developer group
 -	SUPERUSER rights, fixing a problem in another patch I am working on.
 -	I am surprised that this was not a problem before - maybe because the
 -	user (instead of the group) always had superuser rights via the
 -	command line database initialization.
 -
 -2009-04-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.[h|cc] init_menus_file(): Add a File/Share On Network
 -	toggle menu item. Added update_network_shared_ui() to ensure that it
 -	is checked when appropriate.
 -	open_browsed_document(), on_document_load():
 -	Call update_network_shared_ui().
 -	* glom/frame_glom.[h|cc]: on_menu_file_toggle_share(): Handle the
 -	new menu item, to change the configration and restart the server.
 -
 -	* glom/libglom/document/document.cc: Added set_network_shared(),
 -	get_network_shared(). load_after(), save_before(): Save it in the
 -	document. This is the default that will be used when opening a document.
 -	It defaults to not shared.
 -	* glom/glom_document.dtd: Document the new network_shared XML attribute.
 -
 -	* glom/libglom/connectionpool.[h|cc]: get_and_connect(): Only start avahi
 -	publishing if we are shared on the network.
 -	set_network_shared(): Added this private function to change the configuration.
 -	initialize(), startup(): Added network_shared parameter.
 -	cleanup(): Call invalidate_connection() to prevent use of a connection
 -	to a stopped server.,
 -	* glom/libglom/connectionpool_backends/backend.[h|cc]: initialize,
 -	  startup, set_network_shared(): Same change as for ConnectionPool.
 -	* glom/libglom/connectionpool_backends/postgres_self.[h|cc]:
 -	initialize(): set_network_share(): Move config file writing to
 -	set_network_share() and use different pg_hba.conf contents depending on
 -	whether we are shared on the network.
 -	startup(): Ensure that the configuration is correct.
 -
 -2009-04-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc: get_and_connect(): Check that
 -	m_backend is not null, to avoid a critical warning at startup.
 -
 -2009-04-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/python_embed/glom_python.[h|cc]:
 -	Added glom_python_module_is_available() and
 -	gda_python_module_is_available().
 -	* glom/main.cc: Use them to do some extra runtime sanity checking,
 -	warning the user if their install is broken.
 -
 -2009-04-09  Michael Hasselmann <michaelh openismus com>
 -
 -	Fix crash if "Connect to Server" is cancelled and then a document is opened.
 -
 -	* glom/libglom/connectionpool_backends/backend.h:
 -	Introduced new error code FAILURE_NO_BACKEND which shall be used to
 -	detect logical errors in the backend implementations.
 -	* glom/libglom/connectionpool_backends/postgres_self.cc (connect):
 -	Set error correctly if no self-hosted instance is active.
 -	* glom/libglom/connectionpool.cc (connect, cleanup):
 -	Added a g_return_val_if_fail to check whether there is a backend to
 -	connect to. Also reset m_ready_to_connect flag to false during
 -	cleanup, which stops Glom from behaving funnily if the user supplies
 -	wrong credentials (see bug #577821):
 -	- The user enters wrong credentials, gets a 'Connection failed' dialog
 -	  the first time. Then, enters wrong credentials a second time, gets no
 -	  dialog (but gets dialog for next try and so on).
 -	- Glom would crash if the user tried to open another document, then decides
 -	  to abort and only opens another document (much) later (which would
 -	  look like a random crash then).
 -	The ConnectionPool class could perhaps be made more robust concerning
 -	that flag since it currently allows inconsistent states.
 -
 -2009-04-05  Philip Withnall  <philip tecnocode co uk>
 -
 -	* glom/libglom/data_structure/glomconversions.cc: Add
 -	xgettext:no-c-format to a string used with strftime which gettext is
 -	erroneously marking as c-format. (Closes: #578013)
 -
 -2009-04-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc: connection_request_password_and_attempt():
 -	When the password fails, just loop around the while again to ask again,
 -	instead of showing a one-off extra dialog. That fixes the problem of being
 -	asked twice when the first try failed.
 -	Load the document outside of the while() instead of each time we ask for the
 -	password.
 -
 -2009-04-02  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool_backends/postgres_self.cc
 -	(discover_first_free_port): Fixed the logic in this function to allow
 -	two different glom instances to self-host a database at the same time.
 -
 -2009-03-31  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: get_fields_for_table_from_database(): Use the libgda
 -	metastore API (almost as nasty as the schema API) to get the primarykeyness,
 -	because the schema API does not give us this, for no good reason that I can
 -	see. Anyway, it works, allowing us to use pre-existing databases.
 -
 -2009-03-31  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.[h|cc]: Renamed to document.[h|cc]:
 -	* *.[h|cc]: Adapted.
 -
 -2009-03-31  Murray Cumming  <murrayc murrayc com>
 -
 -	* Renamed Document_Glom to Document, and type_vec* to type_vec_* in all
 -	lower case, to make the API more consistent.
 -
 -2009-03-31  Murray Cumming  <murrayc murrayc com>
 -
 -	* config.h.in: Remove definitions that are in
 -	glom/libglom/libglom_config_h.in
 -	* configure.ac: Depend on pygobject instead of pygtk and remove duplicate
 -	dependencies in Glom and libglom.
 -	* glom/libglom/document/document_glom.h: Remove SWIG directives because I
 -	am now using a separate SWIG .i file.
 -	* po/POTFILES.in: Updated.
 -
 -2009-03-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/Makefile.am:
 -	* glom/libglom/init.[h|cc]: Added this file with libglom_init() and
 -	libglom_deinit(), containing some code that was in main(). This allows
 -	code other than Glom to use libglom.
 -	* glom/main.cc: Call the new functions, replacing some code.
 -	* glom/libglom/test_document.cc: Call the new functions.
 -
 -2009-03-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.ac: Remove the gtkmm dependency from libglom.
 -
 -	* glom/libglom/Makefile.am:
 -	* glom/bakery/Makefile.am:
 -	* glom/libglom/busy_cursor.[h|cc]: Moved this to glom/bakery/.
 -
 -	* glom/libglom/data_structure/glomconversions.[h|cc]:
 -	Moved get_pixbuf_for_gda_value() to glom/utils_ui.[h|cc].
 -
 -	* glom/libglom/*.[h|cc]: Adapted, and removed any gtkmm or gdkmm headers.
 -
 -2009-03-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glade_utils.cc: Added missing file to fix the build.
 -
 -	* glom/Makefile.am:
 -	* glom/libglom/Makefile.am:
 -	* glom/libglom/utils.cc:
 -	* glom/libglom/utils.h: Moved some of these functions to new
 -	glom/utils_ui.[h|cc] files to avoid having the UI stuff in libglom.
 -	*.cc: Adapted.
 -
 -	* glom/libglom/connectionpool.[h|cc]:
 -	* glom/libglom/connectionpool_backends/backend.[h|cc]:
 -	* glom/libglom/connectionpool_backends/postgres.[h|cc]:
 -	* glom/libglom/connectionpool_backends/postgres_self.[h|cc]:
 -	initialize(): Return an enum instead of a bool, to report errors, instead of
 -	showing a UI warning here.
 -	Added set_avahi_publish_callbacks() to avoid showing that UI here.
 -	* glom/frame_glom.[h|cc]: Adapt to the new API, showing UI here instead of
 -	in libglom.
 -
 -	* glom/libglom/spawn_with_feedback.cc: Disconnect the progress timeout
 -		handlers.
 -
 -	* glom/libglom/data_structure/layout/layoutitem_image.[h|cc]: Removed
 -	get_image_as_pixbuf() to avoid a gtkmm dependency in libglom. Made m_image
 -	public instead, to avoid performance problems with copying lots of binary
 -	data via a get*() method.
 -	* glom/libglom/document/document_glom.cc: Adapted.
 -
 -	* glom/libglom/data_structure/print_layout.[h|cc]: Use a string instead of a
 -	Gtk::PrintLayout, using the Glib::KeyFile format, to avoid depending on gtkmm
 -	in libglom.
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc:
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc: Adapted.
 -
 -2009-03-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/bakery/app_withdoc.[h|cc]: Added on_document_close() virtual method
 -	now that we can break this ABI.
 -	* glom/application.[h|cc]: Override on_document_close().
 -	* glom/libglom/document/document_glom.cc: Destructor: Don't shutdown the
 -	database here. Do in App_Glom::on_document_close() instead.
 -
 -	* glom/libglom/Makefile.am:
 -	* glom/libglom/spawn_with_feedback.[h|cc]: execute_command_line_and_wait(),
 -	  execute_command_line_and_wait_until_second_command_returns_success():
 -	  Take a SlotProgress callback instead of a parent window, and don't take
 -	  a human-readable message string to show, allowing the caller to show UI if
 -	  it wants, removing UI code from this part of libglom.
 -	  Use a Glib::MainLoop to block instead of using the Gtk::Main in
 -	  Gtk::Dialog::run().
 -	* glom/libglom/connectionpool.[h|cc]: initialize(), startup, cleanup():
 -	* glom/libglom/connectionpool_backends/backend.[h|cc]: initialize(),
 -	  startup(), cleanup():
 -	* glom/libglom/connectionpool_backends/postgres_self.cc: initialize(),
 -	startup, cleanup(): Take a SlotProgress callback instead of a parent window,
 -	allowing the caller to show UI if it wants, removing UI code from this part of
 -	libglom.
 -
 -	* glom/Makefile.am:
 -	* glom/libglom/dialog_progress_creating.[h|cc]: moved to
 -	* glom/glom/glade_utils.[h|cc]: Moved get_and_show_pulse_dialog() here.
 -
 -	* glom/dialog_new_self_hosted_connection.[h|cc]:
 -	* glom/frame_glom.[h|cc]:
 -	connection_request_password_and_choose_new_database_name(),
 -	connection_request_password_and_attempt(): Adapted.
 -
 -2009-03-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.ac, glom/libglom/*/Makefile.am: Do two separate
 -	PKG_CONFIG_MODULE() checks for Glom and libglom to avoid unnecessary
 -	dependencies in libglom.
 -	* Moved libglom/glade_utils.h to glom/libglom/glade_utils.h.
 -	* *.[h|cc]: Some incomplete improvement of includes, to use full paths, to
 -  make search/replace refactoring easier.
 -
 -2009-03-26  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.ac: Depend on the latest goocanvasmm for the new API.
 -	* glom/libglom/document/bakery/Makefile.am:
 -	* glom/libglom/document/bakery/view/Makefile.am: Install the headers as in
 -	the other directories.
 -	* glom/libglom/document/document_glom.h: Tell SWIG to add using Glom because
 -	it gets confused about the namespace.
 -
 -2009-03-26  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.ac:
 -	* macros/macros.m4: Removed this.
 -	* macros/dk-warn.m4: Added this, which is the updated version.
 -	* glom/*/*.am
 -	* glom/*/*.cc: Fixed some warnings.
 -
 -2009-03-26  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/canvas/canvas_table_movable.[h|cc]: get_xy(),
 -	set_xy(): Use the new height property instead of faking it.
 -
 -2009-03-25  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/canvas/canvas_line_movable.cc: get_xy(),
 -	set_xy(), get_width_height(), set_width_height():
 -	* glom/utility_widgets/canvas/canvas_text_movable.cc
 -	get_width_height, set_width_height(): Use the new properties instead
 -	of our custom implementations.
 -
 -2009-03-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/main.cc: Stop the mainloop when the window is hidden, and then
 -	delete it. I think this was done by AppInstanceManager before.
 -
 -2009-03-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/bakery/:
 -	* glom/libglom/document/bakery/: Rename the files to make them lower
 -	case just because the inconsistency has always annoyed me.
 -	* glom/*.[h|cc]: Adapted.
 -
 -2009-03-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.h: Added a SWIG hint telling it how to
 -	include this header.
 -
 -2009-03-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/bakery/Document.h:
 -	* glom/libglom/document/bakery/Document_XML.h: Removed more unnecessary
 -	virtuals.
 -
 -2009-03-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.[h|cc]: Remove add_ui_from_string() because it is
 -	in App_WithDoc_Gtk too.
 -	* glom/bakery/App_WithDoc_Gtk.h: Make init_menus_file_recentfiles()
 -	non virtual because nothing overrides it.
 -
 -2009-03-24  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/bakery/Makefile.am:
 -	* glom/bakery/App_WithDoc.h:
 -	* glom/bakery/App_Gtk.[h|cc]: Remove this, merging it into:
 -	* glom/bakery/App_WithDoc_Gtk.[h|cc]: allowing us to remove some
 -	awkward virtual inheritance.
 -	* glom/bakery/Dialog_OfferSave.cc:
 -	* glom/application.cc:
 -	* glom/utility_widgets/adddel/adddel.cc: Adapted.
 -
 -2009-03-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/bakery/Makefile.am:
 -	* glom/bakery/GtkDialogs.[h|cc]: Remove this, moving the code into
 -	these functions that previously just called the same named functions
 -	in GtkDialogs, for reasons that are no longer relevant:
 -	* glom/bakery/App_WithDoc_Gtk.cc ui_warning(),
 -	ui_file_select_open(), uri_is_writable(),
 -	ui_file_select_save(), ui_offer_to_save_changes().
 -
 -2009-03-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.[h|cc]: Added a load() that just calls
 -	the base class, just to make life easier for SWIG, so it can ignore the base
 -	class for client-only API.
 -
 -2009-03-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.[h|cc]: new_instance(): Spawn a new process via a
 -	a command line command.
 -	* glom/bakery/App.[h|cc]: new_instance(): Take a uri parameter.
 -	on_menu_file_new():
 -	* glom/bakery/App_WithDoc.cc: open_document():
 -	new_instance() is now expected to start a new process instead of
 -	returning a new C++ instance.
 -
 -	This means that File/New and File/Open will start a new independent
 -	process.
 -
 -2009-03-22  Murray Cumming  <murrayc murrayc com>
 -
 -	Reverted this change because each instance is now an independent
 -	process, or soon will be when I have made some more changes:
 -
 -	* configure.ac: Depend on libunique-1.0
 -	* glom/bakery/App_WithDoc_Gtk.[h|cc]: Added set_unique_app(), to make
 -	the app handle UniqueApp messages, to start new instances or open files.
 -	* glom/main.cc: Use set_unique_app() and send messages to the existing
 -	instance instead of starting a new instance, if one is already running.
 -
 -2009-03-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/bakery/Makefile.am:
 -	* glom/bakery/AppInstanceManager.[h|cc]: Removed this class.
 -	* glom/application.cc:
 -	* glom/bakery/App.cc:
 -	* glom/bakery/App.h:
 -	* glom/bakery/App_Gtk.cc:
 -	* glom/bakery/App_Gtk.h:
 -	* glom/bakery/App_WithDoc.cc:
 -	* glom/bakery/App_WithDoc_Gtk.cc: Removed management of multiple
 -	instances. Each Glom window is now isolated. That is necessary anyway
 -	because we have been storing a global application pointer separately
 -	anyway for a while now, which broke this.
 -
 -	This would need to use some single-instance DBus thing anyway to make
 -	it work properly between processes (started from the Application menu.)
 -	That would be nice. Then we could really check if a file is already
 -	open, like gedit does.
 -
 -2009-03-21  Armin Burgmeier  <armin openismus com>
 -
 -	* autogen.sh: Don't run autoheader.
 -
 -	* configure.ac: Prevent execution of autoheader with
 -	--enable-maintainer-mode. Copied from glibmm.
 -
 -	* glom/libglom/libglom_config.h.in: Added include guards.
 -
 -	* config.h.in: Added this file which was previously generated by
 -	autoheader. Removed the prefixed definitions from it but include
 -	glom/libglom/libglom_config.h instead. This prevents warnings about
 -	redefinitions when both config.h and libglom_config.h are included in
 -	a translation unit.
 -
 -2009-03-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool_backends/postgres.cc:
 -	check_postgres_gda_client_is_available_with_warning(): Avoid a
 -	warning when libgda sometimes gives us a non-string GValue from
 -	gda_config_list_providers(), which is a silly API.
 -
 -2009-03-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/bakery/App_WithDoc_Gtk.cc: Remove checks for GTK+ 2.10. We really
 -	have it now.
 -
 -2009-03-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.ac: Depend on libunique-1.0
 -	* glom/bakery/App_WithDoc_Gtk.[h|cc]: Added set_unique_app(), to make
 -	the app handle UniqueApp messages, to start new instances or open files.
 -	* glom/main.cc: Use set_unique_app() and send messages to the existing
 -	instance instead of starting a new instance, if one is already running.
 -
 -2009-03-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/bakery/*.[h|cc]: Fixed compiler warnings. Used GLOM defines
 -	instead of BAKERY defines.
 -	* po/POTFILES.in: Added the bakery files.
 -
 -2009-03-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.ac: Correct the libgdamm and libgda versions needed.
 -
 -2009-03-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/bakery/App_Gtk.cc:
 -	* glom/bakery/App_WithDoc.cc:
 -	* glom/bakery/App_WithDoc_Gtk.cc:
 -	* glom/bakery/Dialog_OfferSave.cc:
 -	* glom/bakery/GtkDialogs.cc:
 -	* glom/libglom/connectionpool_backends/postgres_self.cc:
 -	* glom/libglom/data_structure/iso_codes.cc:
 -	* glom/libglom/document/bakery/Document.cc:
 -	* glom/libglom/document/bakery/view/View.h:
 -	* glom/main.cc:
 -	* glom/translation/window_translations.cc: Include config.h using <>
 -	instead of "", to be consistent with elsewhere.
 -
 -2009-03-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool_backends/postgres.cc:
 -	check_postgres_gda_client_is_available_with_warning(): Actually check.
 -	This was commented out because the libgda-4.0 API for it is unpleasant.
 -
 -2009-03-17  Murray Cumming  <murrayc murrayc com
 -
 -	* glom/glom_developer.glade: Remove superfluous empty TextBuffer objects,
 -	to avoid warnigns, but we still have problems with Adjustments.
 -	See GtkBuilder bug #575714.
 -
 -2009-03-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.ac: Remove the libglademm dependency.
 -	* glom/glom.glade:
 -	* glom/glom_developer.glade: Resaved as GtkBuilder format in glade-3.
 -	* glom/Makefile.am:
 -	* glom/variablesmap.[h|cc]: Copied this from libglademm and adapted it to
 -	Gtk::Builder.
 -	* glom/*.[h|cc]: Use Gtk::Builder instead of Gnome::Glade::Xml. The changes
 -	are mostly just search/replace.
 -
 -2009-03-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.ac: Remove bakery dependency.
 -	* glom/Makefile.am:
 -	* glom/bakery/: Added copies of the Bakery/App files.
 -	* glom/libglom/document/bakery/: Added copies of the Bakery Document
 -	and View files.
 -	This allows us to change the Bakery ABI when we need to. We already
 -	do unusually hacky things with Bakery so this is reasonable.
 -
 -2009-03-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/combo_textglade.[h|cc]: Remove the reimplementation
 -	of Gtk::ComboBoxText now that we can use gtkmm 2.14.
 -	* glom/frame_glom.cc:
 -	* glom/libglom/data_structure/glomconversions.cc:
 -	* glom/mode_design/dialog_add_related_table.cc:
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	* glom/mode_design/script_library/dialog_script_library.cc:
 -	* glom/mode_design/users/dialog_users_list.cc: Adapted.
 -	* glom/libglom/document/document_glom.cc: save_before: Remove another
 -	gtkmm 2.10 workaround.
 -
 -2009-03-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.ac: Depend on gtkmm 2.14 rather than gtkmm 2.10.
 -
 -	* glom/Makefile.am:
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/calendar/: Remove copy of Gtk::Calendar.
 -	* glom/mode_data/box_data_calendar_related.h: Adapted.
 -
 -	* glom/application.cc:: init_toolbars(), add_ui_from_string():
 -	* glom/dialog_existing_or_new.cc: constructor, get_uri(),
 -	existing_icon_data_func():
 -	* glom/dialog_existing_or_new.h
 -	* glom/layout_item_dialogs/box_formatting.cc: get_formatting():
 -	* glom/libglom/data_structure/print_layout.cc: Constructor, operator=():
 -
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc: set_print_layout():
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	get_icon_for_toolbar_item(), on_canvas_drag_drop(), on_canvas_drag_motion():
 -	* glom/xsl_utils.cc: transform_and_open():
 -	Remove workarounds for gtkmm 2.10 now that we can depend on gtkmm 2.14.
 -	This is not really necessary but it's nice to clean up the code.
 -
 -This is svn trunk, for Glom 1.11/12. See also the glom-1-10 branch.
 -
 -1.10.0:
 -
 -2009-03-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/calendar/glomcalendar.[h|cc]:
 -	* glom/utility_widgets/calendar/glomgtkcalendar.[h|c]: Check for GTK+ 2.14,
 -	not GTK+ 2.16, because the GtkCalendar details_func API is in 2.14.
 -	Correct a typedef to fix the build in that case.
 -
 -2009-03-16  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/gst-package.c: Converted a C++ comment to a C comment,
 -	to avoid a warning.
 -
 -	* glom/main.cc (main): Fixed the build on Linux, which was broken
 -	since my last commit.
 -
 -2009-03-13  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/dialog_existing_or_new.cc:
 -	* libglom/connectionpool_backends/postgres_self.cc:
 -	* libglom/glade_utils.h:
 -	* glom/main.cc:
 -	* glom/mode_design/print_layouts/print_layout_toolbar_button.cc:
 -	* glom/utility_widgets/layouttoolbar.cc:
 -	* glom/utility_widgets/layouttoolbarbutton.cc: Replaced
 -	g_win32_get_package_installation_subdirectory() by
 -	g_win32_get_package_installation_directory_of_module() since the
 -	former is deprecated. Bug #575021.
 -
 -2009-03-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/fields/box_db_table_definition.
 -	field_has_null_values(): Do not warn about a false failure.
 -
 -2009-03-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc: connect(): Update the meta store for
 -	just the data types and the table names, instead of everything. This is
 -	slightly faster. This needs libgdamm from svn.
 -	More about the libgda meta store speed here:
 -	http://bugzilla.gnome.org/show_bug.cgi?id=575235
 -
 -2009-03-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/fieldtypes.cc: Avoid an extra
 -	update_meta_store() when exceptions are disabled.
 -	* glom/navigation/box_tables.cc: fill_table_row(): Avoid a crash when
 -	the TableInfo is null.
 -
 -2009-03-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool_backends/postgres.cc: Fix the build when
 -	GLOM_CONNECTION_DEBUG is defined.
 -
 -2009-03-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/Makefile.am: Do not install some headers that are for
 -	API that I do not really want other people to use.
 -
 -2009-03-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/adddel/eggcolumnchooser/: Copy a newer version from
 -	libegg, which already fixed the use of deprecated GTK+ macros.
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtable.h: child_type_vfunc(): Use GType instead
 -	of deprecated GtkType.
 -	This mostly fixes bug #575021 (André Klapper).
 -
 -2009-03-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Rename to configure.ac, because configure.in is
 -	deprecated by recent autotools.
 -
 -2009-03-12  Armin Burgmeier  <armin openismus com>
 -
 -	* configure.in: Added config.h to AC_CONFIG_FILES, so that we create
 -	two config files: config.h with all definitions, and libglom_config.h
 -	which contains only definitions prefixed with GLOM_ to be installed.
 -	This means header files cannot use non-prefixed definitions.
 -
 -	* glom/libglom/libglom_config.h.in: New file containing the
 -	definitions to be installed.
 -
 -	* glom/libglom/connectionpool_backends/postgres_self.cc:
 -	* glom/libglom/data_structure/iso_codes.cc:
 -	* glom/translation/window_translations.cc:
 -	* glom/utility_widgets/calendar/glomgtkcalendar.h:
 -	* glom/utility_widgets/calendar/glomgtkcalendar.c:
 -	* glom/application.cc:
 -	* glom/main.cc: Adapt the code by including config.h instead of
 -	libglom_config.h.
 -
 -1.9.4:
 -
 -2009-03-10  Armin Burgmeier  <armin openismus com>
 -
 -	* win32/build_installer: Only install the postgres and sqlite libgda
 -	provider, and not all the others. This prevents libgda from trying to
 -	load them, and fail doing so with a user-visible message about some
 -	DLLs not being found.
 -
 -2009-03-10  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/xsl_utils.cc: Made reports work on Windows, by using
 -	Glib::get_tmp_dir() instead of "/tmp" and ShellExecute instead of
 -	g_app_info_launch_default_for_uri(), for which file:// URIs don't seem
 -	to be supported on Windows.
 -
 -	* win32/build_installer: Don't ship libdb47.dll anymore, as this is no
 -	longer required with libgda 3.99.13.
 -
 -2009-03-09  Claude Paroz  <claude 2xlibre net>
 -
 -	* glom/mode_data/dialog_layout_details.cc: Add a translator comment.
 -	Bug #574672.
 -
 -2009-03-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Require the latest (from svn, not yet in a tarball) version
 -	of libgda, needed by the images in the example files.
 -
 -2009-03-09  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool_backends/postgres_self.cc (startup): Use
 -	"postgres" executable instead of "postmaster".
 -
 -	* glom/libglom/connectionpool.cc: Fixed the Windows build.
 -
 -	* glom/main.cc: Fixed locale search path.
 -
 -	* win32/querymodules.bat: Removed, this file is no longer required.
 -
 -	* win32/build-installer:
 -	* win32/glom.iss.in:
 -	* win32/Makefile.am:
 -	* win32/README: Update for current version.
 -
 -2009-03-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.h: HostingMode: Declare all enum
 -	values regardless of what is enabled, to avoid ABI confusion and to maybe
 -	allow us to say that some are not supported at runtime.
 -
 -2009-03-08  Stéphane Raimbault  <stephane raimbault gmail com>
 -
 -	* glom/libglom/data_structure/glomconversions.cc:
 - 	sanity_check_date_text_representation_uses_4_digit_years(): Fix a typo
 - 	in the word representation of the error message.
 -
 -2009-03-08  Stéphane Raimbault  <stephane raimbault gmail com>
 -
 -	* configure.in: Changes made to reflect new po linguas setup including
 -	removing ALL_LINGUAS (now in new file LINGUAS).
 -	* po/LINGUAS: new file.
 -	Fixes #569721
 -
 -2009-03-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.cc: load_after(): Added an ifdef to
 -    fix the client-only sqlite build.
 -
 -2009-03-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc:
 -    connection_request_password_and_choose_new_database_name(): Added an ifdef
 -    to fix the client-only postgres build.
 -
 -2009-03-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_portal.cc: get_suitable_record_to_view_details():
 -	Use the correct primary key of the related table. This fixes navigation
 -	on the Small Business Example, on the invoice lines, which goes to the
 -	product record.
 -
 -2009-03-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_lesson_planner.glom:
 -	* examples/example_project_manager.glom:
 -	* examples/example_smallbusiness.glom: Resaved these, because libgda
 -	corrected the string format for binary data (images). libgda also fixed
 -	the crash when parsing that string, as used in from_file_format().
 -
 -2009-03-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/field.cc: from_file_format(): Add some
 -	checks.
 -
 -2009-03-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Generate libglom/libglom_config.h instead of config.h,
 -	so we can install it and use it in our public headers.
 -	* glom/libglom/Makefile.am: Install libglom_config.h.
 -	* glom/libglom/glom-1.0.pc.in: Correct the shared library name.
 -	* *.[h|cc]: Include libglom/libglom_config.h instead of config.h.
 -
 -2009-03-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Ran autoupdate on this so it does things as per what is
 -	currently correct.
 -
 -2009-03-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/Makefile.am: Link to the correct library name for
 -	test_document.cc
 -	* glom/libglom/test_document.cc: List the tables in the document.
 -
 -2009-03-03  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/document/document_glom.cc (load_after): Fixed another
 -	misplaced else which prevented postgresql files from being opened
 -	when support for both postgresql and sqlite was enabled.
 -
 -	* glom/libglom/document/document_glom.h: Changed DEFAULT_HOSTED to
 -	HOSTING_MODE_POSTGRES_SELF if postgresql is enabled.
 -
 -	* glom/application.cc (constructor): Use DEFAULT_HOSTED to initialize
 -	m_ui_save_extra_newdb_hosting_mode, so that we don't need an #ifdef.
 -
 -2009-03-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* *.[h|cc]: Include all libglom headers via libglom/ instead of
 -	glom/libglom so it works from outside, with the path to the installed
 -	headers, from pkg-config.
 -	* All Makefile.am files: Add -I top_srcdir@/glom to AM_CPPFLAGS.
 -	The repetition is awful. We should avoid that somehow.
 -
 -2009-03-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in:
 -	* glom/libglom/Makefile.am:
 -	* glom/libglom/glom-1.0.pc.in: Added and installed pkg-config file.
 -
 -	* glom/Makefile.am:
 -	* glom/libglom/data_structure/Makefile.am:
 -	* glom/libglom/data_structure/layout/Makefile.am:
 -	* glom/libglom/data_structure/layout/report_parts/Makefile.am:
 -	* glom/libglom/document/Makefile.am:
 -	* glom/python_embed/python_module/Makefile.am:
 -	* regression_tests/Makefile.am: Change libglom to libglom-1.0 so we can
 -	use proper API versioning. Install the headers.
 -
 -	* glom/libglom/document/document_glom.cc: Use std::auto_ptr<> to
 -	avoid instantiating Bakery::BusyCursor if no parent window was set,
 -	to avoid the need to initialize gtkmm/GTK+.
 -
 -2009-03-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.h: Add some SWIG ifdefs to
 -	improve the Java wrapping output with swig.
 -
 -2009-03-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_existing_or_new.cc: Parser::on_start_element():
 -	Call xmlStopParser() to avoid unnecessary extra parsing, fixing a TODO.
 -
 -2009-03-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/Makefile.am:
 -	* glom/libglom/document/document_glom.[h|cc]: Renamed the *_HOSTED enum values to
 -	use a prefix. Moved the View tyepdefs into a view.h file.
 -
 -	* glom/application.cc:
 -	* glom/base_db.h:
 -	* glom/dialog_connection.cc:
 -	* glom/frame_glom.cc:
 -	* glom/layout_item_dialogs/dialog_field_layout.h:
 -	* glom/mode_design/dialog_design.h:
 -	* glom/relationships_overview/dialog_relationships_overview.h:
 -	* glom/translation/dialog_identify_original.h:
 -	* glom/translation/window_translations.[h|cc]:
 -	* glom/utility_widgets/datawidget.h:
 -	* glom/utility_widgets/filechooserdialog_saveextras.cc: Adapted.
 -
 -2009-03-02  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/frame_glom.cc:
 -	(connection_request_password_and_choose_new_database_name): Call
 -	connectionpool's startup() also if SQLite is disabled. Bug #573799.
 -
 -2009-03-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* Many .h files: Changed many protected to private to make the API
 -	clearer. This is particularly important for libglom, as I start
 -	thinking of wrapping the API for Java/Web.
 -
 -2009-03-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Added an --enable-postgresql option, so we can have
 -	embedded builds that only use SQLite. Disable SQLite by default.
 -
 -	* glom/utility_widgets/filechooserdialog_saveextras.[h|cc]:
 -	Don't mention the backend names if only SQLite is disabled, to avoid
 -	confronting people with unnecessary technicalese.
 -
 -	* glom/application.cc:
 -	* glom/dialog_connection.cc:
 -	* glom/frame_glom.cc:
 -	* glom/libglom/connectionpool_backends/Makefile.am:
 -	* glom/libglom/connectionpool_backends/postgres.h:
 -	* glom/libglom/connectionpool_backends/postgres_central.[h|cc]:
 -	* glom/libglom/connectionpool_backends/sqlite.h:
 -	* glom/libglom/data_structure/glomconversions.h:
 -	* glom/libglom/document/document_glom.[h|cc]:
 -	* glom/libglom/gst-package.c:
 -	* glom/libglom/test_connectionpool.cc:
 -	* glom/main.cc:
 -	Added ifdefs to allow builds with -enable-postgresql=no.
 -
 -	* glom/dialog_import_csv.cc: Replace gettext() with _().
 -
 -1.9.3:
 -
 -2009-02-27  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/frame_glom.cc:
 -	(connection_request_password_and_choose_new_database_name): When
 -	creating a new self-hosting postgres database, then store the port it
 -	uses within the document, so that remote connections (using browse
 -	network) can connect to the newly created database. Bug #572982.
 -
 -2009-02-27  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/mode_design/fields/box_db_table_definition.cc (on_adddel_add):
 -	Add newly added field into document before refreshing m_vecFields, so
 -	that Base_DB::get_fields_for_table() has an up-to-date document. This
 -	fixes changing newly added fields with SQLite.
 -
 -	* configure.in: Fixed a typo, which caused libgda-sqlite-4.0 not being
 -	required even when SQLite support was enabled.
 -
 -1.9.2:
 -
 -2009-02-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtable.cc: on_size_allocate(): Change an
 -	accidental += to the = that it should be, to stop columns getting
 -	increasingly large amounts of extra width when there are >2 columns.
 -	Bug #539369 (maximiliano)
 -
 -2009-02-24  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool_backends/postgres_central.cc (set_host):
 -	Only reset m_port to zero if m_try_other_ports is true. Otherwise, a
 -	specific port has already been set by the user.
 -	(connect): Compare m_port to 0, not port, which is a Glib::ustring.
 -	This fixes a warning about g_utf8_collate's argument being NULL, and
 -	fixes connection to a remote postgres server advertized via networked
 -	glom.
 -
 -2009-02-24  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool_backends/backend.h:
 -	* glom/libglom/connectionpool_backends/backend.cc: Moved the
 -	ConnectionPool backend base class into a new file in the
 -	connectionpool_backends subdirectory.
 -
 -	* glom/libglom/connectionpool_backends/Makefile.am: Add it to the
 -	build.
 -
 -	* glom/libglom/connectionpool_backends/postgres.h:
 -	* glom/libglom/connectionpool_backends/sqlite.h:
 -	* glom/libglom/connectionpool_backends/sqlite.cc:
 -	* glom/libglom/connectionpool.h:
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/test_connectionpool.cc:
 -	* glom/dialog_connection.cc:
 -	* glom/frame_glom.cc: Adapt.
 -
 -2009-02-24  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool.h:
 -	* glom/libglom/connectionpool.cc: Added a get_string_find_operator()
 -	virtual method to ConnectionPoolBackend, and a similar method to
 -	ConnectionPool which simply queries its backend.
 -
 -	* glom/libglom/connectionpool_backends/sqlite.h:
 -	* glom/libglom/connectionpool_backends/postgres.h: Implement the new
 -	virtual method appropriately.
 -
 -	* glom/libglom/data_structure/field.cc (sql_find_operator): Use the
 -	get_string_find_operator() method of the connectionpool backend in
 -	case the field's type is TYPE_TEXT. This fixes Find Mode with SQLite.
 -	Bug #570401. I wonder whether libgda can generate a case-insensitive
 -	string comparison, which would make this easier for us.
 -
 -2009-02-24  Armin Burgmeier  <armin openismus com>
 -
 -	* configure.in: Added an --enable-sqlite configure option, which is
 -	enabled by default.
 -
 -	* glom/libglom/connectionpool_backends/sqlite.h: #error if this file
 -	is included with SQLite support disabled. Mostly meant as a debugging
 -	aid.
 -
 -	* glom/libglom/connectionpool_backends/Makefile.am: Don't build
 -	sqlite.cc in case SQLite support is disabled.
 -
 -	* glom/libglom/document/document_glom.h:
 -	* glom/libglom/document/document_glom.cc: Don't declare SQLITE_HOSTED
 -	hosting mode if SQLite support is disabled, and refuse to open files
 -	with unknown hosting mode instead of falling back to postgres central.
 -
 -	* glom/utility_widgets/filechooserdialog_saveextras.h:
 -	* glom/utility_widgets/filechooserdialog_saveextras.cc: Don't show the
 -	option to create a SQLite hosted file in the GUI if SQLite support is
 -	disabled.
 -
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc: Removed a
 -	superfluous <libglom/connectionpool_backends/sqlite.h> include.
 -
 -	* glom/frame_glom.cc:
 -	* glom/application.cc: #ifdef-out code to create a SQLite
 -	connectionpool backend if SQLite support is disabled, as well as a few
 -	related checks.
 -
 -2009-02-24  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool_backends/sqlite.cc: Keep non-NULL
 -	constraint of columns when recreating table.
 -
 -2009-02-23  David King  <davidk openismus com>
 -
 - 	* glom/frame_glom.cc: on_menu_file_import(): Add CSV mime-type filter
 - 	to import dialog. Bug #572702
 -
 -2009-02-23  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc
 -	(construct_specified_columns): Clear m_refListStore if in case no
 -	column types are set. This allows dropping the reference to the GDA
 -	DataModel by setting an empty table name on the AddDel.
 -
 -	* glom/frame_glom.h:
 -	* glom/frame_glom.cc: Added show_table_allow_empty() which allows the
 -	table name to be empty, in which case no table is shown, and
 -	show_no_table() as a shortcut for this case. Show an empty table
 -	before opening the fields editing dialog, so that no references to the
 -	database are used anymore. SQLite requires this to be able to drop the
 -	old table when changing fields.
 -	Bug #572847
 -
 -2009-02-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade, glom_developer.glade:
 -	* glom/base_db.cc: offer_notebook(): Move the dialog_notebook window
 -	into glom_developer.glade because it is only used in developer mode.
 -
 -2009-02-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* Various minor fixes to avoid minor compiler warnings.
 -
 -2009-02-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/glomconversions.cc:
 -	get_text_for_gda_value(): Avoid a warning about no return value.
 -
 -2009-02-22  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/mode_data/flowtablewithfields.cc (add_field_at_position): Don't
 -	leak the Gtk::EventBox.
 -
 -2009-02-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_developer.glade: Resaved with glade-3. Recent versions of
 -	glade-3 are much better at converting from glade-2. I just had to
 -	hand-add the GtkSourceView widgets back.
 -	Bug #567470
 -
 -2009-02-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/base_db.[h|cc]:
 -	* glom/dialog_connection.cc:
 -	* glom/frame_glom.cc:
 -	* glom/libglom/connectionpool.[h|cc]:
 -	* glom/libglom/connectionpool_backends/postgres_central.cc
 -	* glom/navigation/box_tables.[h|cc]:
 -	Added ifdefs to fix the build with --enable-client-only.
 -
 -2009-02-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_privs[h|cc]: get_current_privs(): Cache the priviliges
 -	for each table for 30 seconds, to avoid unnecessary repetitive groups
 -	queries to the database. This seems to avoid about 5 out of 6
 -	requests, so it should be faster.
 -	Bug #567473
 -
 -2009-02-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in:
 -	* glom/libglom/connectionpool_backends/postgres_self.cc: Use the
 -	postgres executable name instead of the deprecated postmaster
 -	executable. Everything probably has that now.
 -	Bug # 525108
 -
 -2009-02-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utlity_widgets/datawidget.cc: Constructor: Show the Open button,
 -	(but not Find) for related fields that are primary keys, so we can
 -	navigate to that record.
 -	* glom/mode_data/box_data_details.cc:
 -	on_flowtable_field_open_details_requested(): Navigate to the
 -	appropriate record in the appropriate table for this type of Open
 -	button.
 -	Bug #571975
 -
 -	* glom/base_db.cc: fill_full_field_details(): Avoid crashes.
 -
 -2009-02-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.[h|cc]:
 -	get_field_used_in_relationship_to_one(): Make this take a
 -	LayoutItem_Field instead of just a field name.
 -	* glom/utlity_widgets/datawidget.cc: Constructor: adapt, so we add
 -	Open and Find buttons for related fields too when appropriate.
 -	* glom/base_db.cc: Adapt to API change.
 -
 -2009-02-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/field.cc: from_file_format(): Adjusted
 -	for a libgda API change in gda_string_to_binary().
 -
 -2009-02-18  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/data_structure/field.cc (set_glom_type): Reset the
 -	default value if the Glom type is changed. The old default value
 -	probably doesn't make sense for the new type. This fixes a warning
 -	when changing a field's type from text to numerical.
 -	(set_default_value): Verify that the new default value is compatible
 -	with the field's glom type.
 -	(set_field_info): Verify that the default value of the new field info
 -	is compatible with the field's glom type.
 -
 -	* glom/mode_design/fields/box_db_table_definition.cc
 -	(get_field_definition): When changing the field info's GType, make
 -	sure its default value matches the new GType, or reset it if not.
 -
 -	* glom/libglom/document/document_glom.cc (load_after): Set a field's
 -	default value after having set the glom type, so that the checks
 -	introduced above don't fail.
 -
 -2009-02-18  Murray Cumming   <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/field.[h|cc]: sql(value, format):
 -	Replace this with sql(value, connection). Use
 -	Gda::DataHolder::get_sql_from_value(), using the connection to get the
 -	DataHolder. Remove the nasty Postgres escaping code, which is now
 -	unnecessary. There is now no code in Glom to do escaping or unescaping
 -	- we use libgda functions instead.
 -	sql(value): Use the active connection.
 -	* glom/libglom/connectionpool_backends/postgres.cc: change_columns():
 -	* glom/libglom/connectionpool_backends/sqlite.cc: recreate_table():
 -	Adapted, though these can probably just call sql(value), using the
 -	active connection.
 -
 -	* glom/base_db.[h|cc]: get_connection(): Make this static because it
 -	can be.
 -
 -2009-02-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/field.[h|cc]: Added static versions of
 - 	from_file_format() and to_file_format(), taking the field type, for use
 -	in document, though we can probably avoid that.
 -	* glom/libglom/data_structure/glomconversions.[h|cc]:
 -	* glom/libglom/document/document_glom.[h|cc]: Remove support for the
 -	deprecated one-big-string example_rows format. Store the example rows as
 -	a vector of vector of Values, instead of strings. This avoids extra
 -	string parsing, unescaping, etc.
 -	* glom/glom_document.dtd: Documented the change.
 -	* glom/frame_glom.[h|cc]: Added export_data_to_vector().
 -	* glom/application.cc: on_menu_file_save_as_example(): Use the vector
 -	instead of a string.
 -	* glom/base_db.cc: insert_example_data(): Handle the vector instead of
 -	doing nasty string parsing.
 -
 -	* examples/example_*.glom: Resaved in the new format.
 -
 -2009-02-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/glomconversions.cc:
 -	get_text_for_gda_value(), parse_value(): Use std::setprecision() to
 -	avoid showing the awkward scientific e notation, raising the limit
 -	from 7 digits to 15. We don't know how to avoid it always.
 -	Noticed by Arq. Maximiliano Meilán.
 -
 -2009-02-16  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool_backends/sqlite.cc: Fixed various
 -	problems with field type changes. Before, often some or all of the
 -	records have been erased after certain changes (only from the view,
 -	not from the database).
 -
 -2009-02-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/field.[h|cc]: Renamed from_sql() to
 -	from_file_format(), without the sql_format parameter, to make it
 -	clearer. Added to_file_format(), which currently just calls sql()
 -	with the postgres format.
 -	* glom/data_structure/glomconversions.cc: Removed unused
 -	unescape_binary_data_sqlite().
 -	* glom/base_db.cc: insert_example_data():
 -	* glom/dialog_import_csv.cc: field_data_func():
 -	* glom/dialog_import_csv_progress.cc: on_idle_import(): Adapt.
 -	* glom/frame_glom.cc: export_data_to_string(): Use to_file_format()
 -	instead of sql() to make it clearer.
 -
 -1.9.1:
 -
 -2009-02-15  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/data_structure/field.cc (get_gda_type_name): Use the
 -	GType from m_field_info instead of converting the glom type to a gda
 -	type, to take fallback types into account, as used by SQLite for
 -	numeric values.
 -	(get_holder): Use the passed value's type to initialize the holder
 -	type. For binary values, there can be a mismatch between the value
 -	type and the field type with SQLite. This is not optimal, but it
 -	works for now.
 -
 -2009-02-15  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/mode_data/box_data_details.cc (on_flowtable_field_edited):
 -	Revert the changed value if set_field_value_in_database() throws a
 -	glib exception.
 -
 -2009-02-15  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc (user_changed): Revert
 -	the changed value if set_field_value_in_database() throws an
 -	exception.
 -
 -2009-02-15  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool_backends/sqlite.cc: Convert existing
 -	values explicitely via the date() and time() SQLite functions when
 -	converting existing values to date or time. This fixes all rows being
 -	erased when changing a column to date or time.
 -
 -2009-02-12  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/mode_design/fields/box_db_table_definition.cc
 -	(check_field_change): Check field's glom type directly instead of
 -	guessing the glom type from its GType, which might produce a wrong
 -	result with some of the fallback types used with SQLite.
 -
 -	* glom/libglom/connectionpool_backends/sqlite.cc (recreate_table):
 -	Don't crash if transaction rollback fails without the error variable
 -	being set.
 -
 -2009-02-10  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool_backends/sqlite.h:
 -	* glom/libglom/connectionpool_backends/sqlite.cc: Support dropping and
 -	changing columns, though changing doesn't yet seem to work reliably
 -	yet.
 -
 -2009-02-10  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool_backends/sqlite.cc (recreate_table):
 -	Use get_value_type() to find out a value's not type, not get_g_type()
 -	which returns the GType the value stores if it's value type is GType.
 -
 -	* glom/mode_design/fields/box_db_table_definition.cc (on_adddel_add):
 -	Don't call on_adddel_changed() just to store the field into the
 -	document, since on_adddel_changed() does a lot of unnecessary extra
 -	stuff such as calling change_columns() on the backend, which forces a
 -	whole table recreation with SQLite.
 -
 -2009-02-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: insert_example_data(): Fixed my typo to fix the
 -	build. Sorry.
 -
 -2009-02-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/field.[h|cc]: get_gda_type():
 -	Renamed to get_gda_type_name(). Removed get_gda_g_type() because
 -	we already have a static get_g_type_for_glom_type(). This gets rids of
 -	the nasty switch block.
 -	* glom/base_db.cc: insert_example_data(), get_lookup_value(),
 -	  get_primary_key_is_in_foundset(): Adapted.
 -
 -2009-02-09  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool.h:
 -	* glom/libglom/connectionpool.cc: Added set_server_operation_value(),
 -	create_server_operation() and perform_server_operation() convenience
 -	methods to connectionpool backend base class.
 -
 -	* glom/libglom/connectionpool_backends/sqlite.h:
 -	* glom libglom/connectionpool_backends/sqlite.cc: Implemented table
 -	recreation, required for changing or dropping columns, or adding
 -	primary key columns. The glom type of newly added columns doesn't yet
 -	seem to be recognized correctly, though.
 -
 -2009-02-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.[h|cc]:
 -	constuctor/create(): Added a bool find_mode parameter and member
 -	variable.
 -	refresh_from_database(): Create a DataModelArray for find mode,
 -	with the appropriate column types.
 -	* glom/utility_widgets/db_adddel/db_adddel.[h|cc]:
 -	Remove the awkward ListStore alternative model for find mode that I
 -	recently introduced,
 -	construct_specified_columns(): Instead just specify find_mode=true
 -	when creating the tree model.
 -
 -	* glom/mode_data/box_data_list.cc: Simplify this code again
 -	accordingly.
 -
 -	* glom/utility_widgets/db_adddel/Makefile.am:
 -	* glom/utility_widgets/db_adddel/treemodel_with_addrow.[h|cc]:
 -	* glom/utility_widgets/db_adddel/liststore_with_addrow.[h|cc]:
 -	* regression_tests/Makefile.am:
 -	* regression_tests/test_treemodel_dynamic_cast.cc:
 -	Removed these because they are no longer used.
 -
 -2009-02-08  Johannes Schmid  <jschmid openismus com>
 -
 -	* glom/libglom/data_structure/Makefile.am:
 -	* glom/libglom/data_structure/parameternamegenerator.cc:
 -	* glom/libglom/data_structure/parameternamegenerator.h:
 -	New class to generate simple unique holder names
 -
 -	* glom/base_db.cc (insert_example_data):
 -	Use the new ParameterNameGenerator class
 -
 -2009-02-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: get_field_value_is_unique(): Use the
 -	Field::get_holder(value) method overload instead of get_holder(),
 -	avoiding copying the Field and using Field::get_data().
 -	* glom/libglom/data_structure/field.[h|cc]:
 -	Removed the get_holder(name) method overload because it is now not
 -	used.
 -	Removed get/set_data() and the member variable because they are now
 -	not used.
 -
 -2009-02-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: get_table_names_from_database(): Comment out the
 -	checks for internal tables, because that is now fixed in libgda.
 -	* glom/mode_data/box_data.[h|cc]:
 -	* glom/base_db_table_data.[h|cc]: Move refresh_related_fields()
 -	(which is virtual) and get_related_fields() down the hierarchy so that
 -	the override is also used by DbAddDel, so related fields are updated
 -	in the view on list views and related records.
 -	This really fixes bug #569722 (Johannes Schmid)
 -
 -2009-02-05  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc: Added a
 -	clarifying comment on why we use a DataAccessWrapper.
 -
 -2009-02-04  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc
 -	(DbTreeModelRow::fill_values_if_necessary): Use a
 -	Gnome::Gda::DataModelWrapper to wrap the resulting cursor-based data
 -	model. This avoids a special-case for SQLite. Requires libgda trunk.
 -
 -2009-02-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_document.dtd: Mention the new self_hosted <connection>
 -	attribute.
 -
 -2009-02-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: get_table_names_from_database(): Filter out some
 -	extra internal table names which may be created/reported by newer
 -	versions of libgda.
 -
 -2009-02-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db_table_data.[h|cc]: Added get_row_selected() virtual function,
 -	used in record_new() instead of an always-null TreeModel::iterator.
 -	This lets lookups, default values, and calculated values be seen when
 -	adding new list records or related records.
 -	* glom/mode_data/box_data_list.[h|cc]:
 -	* glom/utility_widgets/db_adddel/db_adddel.[h|cc]:
 -	Added get_row_selected() overrides.
 -	This should fix bug #569722 (Johannes Schmid)
 -
 -2009-02-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: query_execute_select(), query_execute():
 -	When using --debug_sql, use Statement::to_sql() to show the actual
 -	SQL with actual values, though this does not seem to work for
 -	non-SELECT queries.
 -	* glom/mode_data/box_data.cc: refresh_related_fields(): Some extra
 -	error checking.
 -
 -2009-02-02  Murray Cumming  <murrayc murrayc com>>
 -
 -	* glom/base_db.cc: :set_field_value_in_database(): Correct a
 -	copy/paste typo that was probably introduced when switching to using
 -	parameters, so we now actually specify the primary key, so we really
 -	change the data in the database.
 -
 -2009-01-31  Johannes Schmid  <jschmid openismus com>
 -
 -	* glom/application.cc (on_document_load()):
 -	Reinit cancelled state and some more cleanups.
 -	Fixes #569721 â?? Glom behaves strange when you cancel the new dialog
 -
 -2009-01-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade: Make the labels FILL and EXPAND so they really
 -	align left instead of centering. This broke when I resaved with a
 -	newer glade-2.
 -
 -2009-01-30  Murray Cumming  <murrayc murrayc com>
 -
 -	Added some TODO comments where we would like to use SQL parameters
 -	instead of Field::sql(), if we can figure out how to do that for
 -	fragments of SQL, or how to refactor the code to parse the whole
 -	SQL query at once.
 -
 -2009-01-29  Johannes Schmid  <jhs openismus com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db_table_data.cc:
 -	* glom/mode_data/box_data_calendar_related.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	Move the rest of queries from sql() to use params where this made sense.
 -	Some methods generate random sql that is executed elsewhere which means that
 -	they cannot use parameters themselves. I did not touch those.
 -
 -	* glom/libglom/data_structure/field.cc:
 -	* glom/libglom/data_structure/field.h:
 -	Added get_holder(value, name) to avoid having to use temporary field to
 -	be able to use get_holder() and get_gda_holder_string()
 -
 -2009-01-29  Johannes Schmid  <jschmid openismus com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db_table_data.cc:
 -	Converted more queries to use parameters
 -
 -2009-01-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: auto_increment_insert_first_if_necessary(),
 -	get_next_auto_increment_value(), set_database_preferences():
 -	Use the new templated Gda::Set::add_holder(), simplifying the code.
 -
 -2009-01-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool_backends/postgres.cc
 -	attempt_create_database(): Do not pass an empty Set to
 -	create_operation() because I added a method overload in libgdamm.
 -
 -2009-01-27  Johannes Schmid  <jschmid openismus com>
 -
 -	* glom/base_db.cc (set_field_value_in_database):
 -	Fix updating of fields with was broken due to a stupid mistake
 -
 -2009-01-26  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: get_fields_for_table_from_database(),
 -	auto_increment_insert_first_if_necessary(),
 -	get_next_auto_increment_value(), insert_example_data():
 -	* glom/libglom/data_structure/field.cc: get_holder(): Adapt to
 -	my set_value()/set_value_as_value() changes in libgdamm to slightly
 -	simply the code. I guess that a better add_param() method could
 -	simplify it more.
 -
 -2009-01-26  Johannes Schmid  <jschmid openismus com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	Ported more queries to use parameters. query_execute_select() now
 -	accepts parameters.
 -
 -	* glom/base_db_table_data.cc:
 -	* glom/dialog_database_preferences.cc:
 -	* glom/frame_glom.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_calendar_related.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	Removed parent_window argument from query_execute_select() call.
 -
 -	* glom/libglom/data_structure/field.cc:
 -	* glom/libglom/data_structure/field.h:
 -	Added get_holder() und get_gda_holder_string() as conveniece methods
 -
 -2009-01-25  Johannes Schmid <jschmid openismus com>
 -
 -	* glom/base_db.cc:
 -	Some cosmetic changes to error messages and removed the reference()
 -	call that is obviously caused by a bug in the postgres provider.
 -
 -2009-01-24  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/data_structure/fieldtypes.cc (constructor): Added
 -	GdaBlob as a fallback type for GdaBinary, so that
 -	Field::set_field_info() sets the correct glom type if the GType is
 -	GDA_TYPE_BLOB.
 -
 -	* glom/libglom/data_structure/glomconversions.cc
 -	(get_pixbuf_for_gda_value): Allow the value having type
 -	GDA_TYPE_BLOB, and handle this appropriately. These changes fix images
 -	in SQLite with libgda4, requiring libgda trunk.
 -
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc
 -	(refresh_from_database): Use STATEMENT_MODEL_RANDOM_ACCESS to create
 -	the data model when using SQLite, because of bug #567891.
 -
 -	* glom/mode_design/fields/box_db_table_definition.cc (fill_field): Use
 -	the field's glom type directly, instead of guessing it from the
 -	field's GType.
 -
 -2009-01-23  Johannes Schmid  <jhs openismus com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	Refactored query_execute() to be able to use additional parameters. Changed
 -	insert_example_data() to use the new method.
 -
 -	* glom/libglom/data_structure/field.cc:
 -	* glom/libglom/data_structure/field.h:
 -	Added get_gda_g_type() and made get_gda_type() should a wrapper around it
 -
 -	* glom/base_db_table_data.cc:
 -	* glom/dialog_database_preferences.cc:
 -	* glom/mode_data/box_data_calendar_related.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/mode_design/users/dialog_users_list.cc:
 -	* glom/navigation/box_tables.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	Removed the unused Gtk::Window* parameter from all query_execute() calls
 -
 -2009-01-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: insert_example_data(): Catch exceptions as const.
 -	Remove spaces before (, again.
 -
 -2009-01-22  Johannes Schmid  <jschmid openismus com>
 -
 -	* glom/base_db.cc (insert_example_data(), get_connection()):
 -	* glom/base_db.h:
 -	Fixed insertion of example data by using variables in the sql statement
 -	instead of inserting the data directly in the statement (which confuses the
 -	GdaSqlParser and is inefficient)
 -
 -	* glom/libglom/data_structure/field.cc (get_gda_type()):
 -	* glom/libglom/data_structure/field.h:
 -	Added a method to get the gda GType of the field. This is necessary to
 -	prepare the sql statement so I would rather like to reuse get_sql_type().
 -	Currntly investigating on gnome-db-list.
 -
 -2009-01-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.cc: save_changes():
 -	Revert the Johannes change here too, because it is causing infinite
 -	loops when adding fields, and probably at other times, repeatedly
 -	saving the file. The code is not equivalent.
 -
 -2009-01-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: document_history_add: Revert the previous,
 -	because I removed the new API from Bakery and just fixed the existing
 -	Bakery method instead.
 -
 -2009-01-19  Johannes Schmid  <jschmid openismus com>
 -
 -	* glom/application.cc: document_history_add():
 -	Avoid a critical warning by adding the recent data instead of
 -	letting Gtk::RecentManager query for non-existing uris which causes a
 -	Gtk-Critical. Requires new bakery trunk
 -
 -	* glom/libglom/document/document_glom.cc:
 -	Don't duplicate code from Bakery.
 -
 -1.9.0:
 -
 -2009-01-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Update the required libgda(mm) versions.
 -
 -2009-01-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade: initial dialog: Correct the button order, which
 -	seems to have been broken when re-saving with glade-2. The other
 -	dialogs seem OK.
 -	* glom/libglom/data_structure/fieldtypes.cc: Constructor:
 -	* glom/mode_design/fields/box_db_table_definition.cc: fill_fields():
 -	Comment out some debug output.
 -
 -2009-01-14  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool_backends/postgres.cc (change_columns):
 -	When changing column types, only attempt to convert data if
 -	Field::get_conversion_possible() returns TRUE, otherwise just change
 -	the column type without trying to convert the data.
 -
 -	* glom/libglom/connectionpool.cc (change_columns): Added a TODO
 -	comment about not failing when data could not be converted to the new
 -	column type.
 -
 -	* glom/mode_design/fields/box_db_table_definition.cc
 -	(get_field_definition): Set the glom type explicitely on the result
 -	field, so that we don't have to guess from the GType.
 -
 -2009-01-13  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool.cc add_column(): Don't set the
 -	autoincrement field for the newly added column since we do control
 -	this ourselves in Glom.
 -
 -2009-01-13  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool.h:
 -	* glom/libglom/connectionpool.cc: Explain that when changing a table's
 -	primary key we are changing two columns, in response to Murray's
 -	previously added TODO comment. Don't compile add_column(),
 -	drop_column(), change_columns() in client only mode.
 -
 -	* glom/libglom/connectionpool_backends/postgres.h:
 -	* glom/libglom/connectionpool_backends/postgres.cc: Added
 -	postgres-specific code for changing a column's type, to allow
 -	conversions from/to date and time fields.
 -
 -	* glom/mode_design/fields/box_db_table_definition.h:
 -	* glom/mode_design/fields/box_db_table_definition.cc: Removed
 -	commented-out code that did the same before I moved the functionality
 -	to the connectionpool backend.
 -
 -2009-01-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc: change_columns(): Added a TODO
 -	comment asking why we would ever want to change multiple columns.
 -	Changing just one columns would make the function simpler.
 -
 -2009-01-12  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool.h:
 -	* glom/libglom/connectionpool.cc: Added add_column(), change_column(),
 -	drop_column(), using a generic implementation via libgda's DDL API.
 -
 -	* glom/libglom/connectionpool_backends/postgres.h:
 -	* glom/libglom/connectionpool_backends/postgres.cc:
 -	* glom/libglom/connectionpool_backends/Makefile.am: Added a base class
 -	for the two postgres backends, implementing the common functionality.
 -
 -	* glom/libglom/connectionpool_backends/postgres_self.h:
 -	* glom/libglom/connectionpool_backends/postgres_central.h:
 -	* glom/libglom/connectionpool_backends/postgres_self.cc:
 -	* glom/libglom/connectionpool_backends/postgres_central.cc: Use the
 -	Postgres base class, instead of deriving directly from
 -	ConnectionPoolBackend.
 -
 -	* glom/mode_design/fields/box_db_table_definition.h:
 -	* glom/mode_design/fields/box_db_table_definition.cc: Use the
 -	connectionpool add_column(), drop_column() and change_column()
 -	functions instead of using postgres-specific code from
 -	glom_postgres.cc. There is maybe a drawback concerning data conversion
 -	when changing column types, but I'll re-add the relevant code to the
 -	postgres connectionpool backend in the near future.
 -
 -	* glom/glom_postgres.h:
 -	* glom/glom_postgres.cc: Removed postgres_add_column() and
 -	postgres_change_column_extras().
 -
 -	* glom/main.cc: Adapt to
 -	check_postgres_gda_client_is_available_with_warning() now being in
 -	ConnectionPoolBackends::Postgres instead of
 -	ConnectionPoolBackends::PostgresCentral.
 -
 -2009-01-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade: Allowed a recent version of glade-2 to resave this.
 -	The changes seem harmless, just adding things, but we will see.
 -
 -2009-01-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Increase version to 1.9.0, in anticiaption of a first
 -	unstable 1.9/1.10 release.
 -
 -2009-01-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade: Main window: Correct the order of the Records: and
 -	Found: labels, which became confused at some point, maybe during 1.8.
 -
 -2009-01-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_find/box_data_list_find.cc: fill_from_database():
 -	Call DbAddDel::set_columns_ready() so the treeview actually shows some
 -	columns.
 -	* glom/utility_widgets/db_adddel/Makefile.am:
 -	* glom/utility_widgets/db_adddel/treemodel_with_addrow.[h|cc]: A new
 -	common MI abstract base class for treemodels that have the extra empty
 -	row for adding rows.
 -	* glom/utility_widgets/db_adddel/liststore_with_addrow.[h|cc]: A new
 -	treemodel derived from ListStore and the new base class, for use with
 -	find mode.
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.h: Derive from
 -	the new base class.
 -	* glom/utility_widgets/db_adddel/db_adddel.[h|cc]:
 -	construct_specified_columns(): Create the ListStore model for find mode.
 -	Use the model via the base class where possible, so we can use the
 -	find mode model too.
 -	Avoid changing the data in the database when in find mode.
 -
 -	This makes find mode work again in the list view, fixing bug #565579.
 -
 -2009-01-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.[h|cc]: Added update_gda_metastore_for_table().
 -	* glom/mode_design/fields/box_db_table_definition.cc
 -	  on_adddel_add(), on_adddel_delete(), postgres_change_column():
 -	Call it, but it does not seem to work.
 -	New fields are immedietaly reported as not found (on the command line)
 -	and field type changes are reverted when reopening the dialog.
 -
 -2009-01-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom.desktop.in.in: Removed the encoding line because it is deprecated
 -	according to http://standards.freedesktop.org/desktop-entry-spec/1.0/apc.html
 -	and lintian (debian) complains about it.
 -
 -2008-12-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.h: show_tool_pallete(): Make this
 -	non-virtual because there are no overrides.
 -	* glom/mode_find/box_data_details_find.cc: constructor,
 -	fill_from_database(): Hide the tool palette, because it is useless in
 -	Find mode.
 -
 -2008-12-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.h: Documented two methods.
 -	* glom/mode_design/fields/box_db_table_definition.cc: on_adddel_changed():
 -	Warn on stdcerr if the newly-added field seems unknown to the database,
 -	showing that the GdaMetaStore is not being updated automatically.
 -
 -2008-12-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h: cleanup(): Clear the cached connection,
 -	to stop Glom from using a connection that has been disconnected.
 -
 -2008-12-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: get_primary_key_is_in_foundset(): Avoid a crash
 -	when (unusually) the primary key is not known.
 -
 -2008-12-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/layout/layoutitem_text.cc:
 -	Copy constructor and operator=: Copy the underlying text, not just
 -	the smartpointer to it. This stops us from accidentally changing the
 -	empty available template parts in reports.
 -	Ubuntu bug https://bugs.launchpad.net/ubuntu/+source/glom/+bug/309417
 -	(elmergato)
 -
 -2008-12-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/users/dialog_groups_list.cc
 -	on_button_group_delete():
 -	* glom/mode_design/users/dialog_users_list.cc
 -	on_button_user_delete(), on_button_user_add(),
 -	on_button_user_new(), on_button_user_edit():
 -	Add missing quotes around user and group names in SQL queries.
 -
 -2008-12-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.[h|cc]: Split query_execute() into query_execute() and
 -	query_execute_select(), returning just a bool for query_execute(),
 -	as suggested by a TODO because of the changed API in libgda 4.0.
 -	* Many files: Call the correct method.
 -
 -2008-12-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: query_execute(): Catch ServerProviderError
 -	exceptions too. This needs the latest libgdamm.
 -
 -2008-12-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	get_field_definition(): Actually store the primary-key and unique
 -	details. This was a regression since the port to libgda 4.0.
 -
 -2008-12-17  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/base_db.cc (create_table_with_default_fields): Reverted the
 -	previous change. People can choose not to show the "comments" or
 -	"description" columns in their layouts. We'll later support removing
 -	columns by recreating the whole table.
 -
 -2008-12-17  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/base_db.cc (create_table_with_default_fields): Don't create the
 -	"comments" and "description" columns if the database system does not
 -	support removing columns.
 -
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc
 -	(fill_values_if_necessary): Adapt to libgdamm API change.
 -	Gda::DataModelIter::move_at_row has been renamed to move_to_row.
 -
 -2008-12-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc: connect(): Store a cache of the
 -	connection for 30 seconds, to avoid unnecessary reconnects. Clear the
 -	cache when setting the username/password/database, to force a reconnect.
 -
 -2008-12-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	refresh_from_database(): Use STATEMENT_MODEL_CURSOR instead of
 -	ITER_MODEL_ONLY, as needed by libgda-4.0.
 -
 -2008-12-15  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/document/document_glom.cc (set_table_fields): Fixed
 -	logic so that the document is set to be modified when the new fields
 -	differ from the old fields, not when they compare equal.
 -
 -	* glom/libglom/document/document_glom.h: Also copy the m_info member
 -	in DocumentTableInfo's copy constructor and assignment operator.
 -
 -	* glom/base_db.cc: Update the libgda meta store after having created a
 -	new table, so that get_fields_for_table_from_database works correctly
 -	for the new table. These changes fix creating new tables.
 -
 -2008-12-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h:
 -	* glom/libglom/connectionpool_backends/postgres_self.cc:
 -	* glom/libglom/connectionpool_backends/sqlite.cc:
 -	* glom/libglom/data_structure/glomconversions.cc:
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/mode_data/box_data_calendar_related.cc:
 -	* glom/mode_data/box_data_portal.cc:
 -	* glom/mode_data/flowtablewithfields.cc:
 -	* glom/relationships_overview/dialog_relationships_overview.cc:
 -	* glom/relationships_overview/dialog_relationships_overview.h:
 -	* glom/relationships_overview/printoperation_relationshipsoverview.cc:
 -	* glom/translation/window_translations.cc:
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	* glom/utility_widgets/calendar/glomcalendar.cc:
 -	* glom/utility_widgets/calendar/glomcalendar.h:
 -	* glom/utility_widgets/calendar/glomgtkcalendar.h:
 -	* glom/utility_widgets/canvas/canvas_group_resizable.cc:
 -	* glom/utility_widgets/canvas/canvas_item_movable.cc:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/egg/toolpalette/eggtoolpalette.h:
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtable_dnd.cc:
 -	* glom/utility_widgets/sidebar.cc: Avoided compiler warnings, mostly
 -	commenting out unused parameters.
 -
 -2008-12-15  Johannes Schmid  <jhs Obelix>
 -
 -	* glom/frame_glom.cc:
 -	Fixed a warning (actually avoided a sprintf completely...)
 -
 -	* glom/libglom/connectionpool_backends/postgres_central.cc:
 -	* glom/libglom/connectionpool_backends/postgres_central.h:
 -	* glom/libglom/connectionpool_backends/postgres_self.cc:
 -	Fixed creating of databases. Database is no created though things break
 -	at a latter stage.
 -
 -2008-12-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* Many files: Remove tabs, and spaces before ( and generally fix some
 -	old Johannes-esque formatting.
 -
 -2008-12-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/field.[h|cc]: Store the primary_key and
 -	unique_key details as bools in the C++ class, because we cannot
 -	easily get that from libgda-4.0, so we at least remember that
 -	information from the document. If we can get it from the database
 -	somehow then we can do that later.
 -	* glom/mode_design/fields/dialog_fielddefinition.cc: get_field():
 -	Store the primary_key and unique_key details in the C++ class.
 -	We previously stored them info Gda::Column but that code was commented
 -	out during the port to libgda-4.0.
 -
 -	There is also a crash workaround in Gda::Holder and a refcount fix
 -	in DataModelIter in libgdamm. With this we can now actually view data.
 -
 -2008-12-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc: connect(): Call update_meta_store()
 -	here.
 -	* glom/libglom/data_structure/fieldtypes.cc: Constructor,
 -	* glom/base_db.cc: get_fields_for_table_from_database(): Do not call
 -	update_meta_store() here, because ConnectionPool::connect() has
 -	already called it. This makes things faster but there is still some
 -	slowness.
 -
 -2008-12-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/fieldtypes.cc: Constructor,
 -	* glom/base_db.cc: get_fields_for_table_from_database():
 -	Use the new get_meta_store_data() method overload with no filter
 -	parameter to simplify the code slightly.
 -	Add debug output to show how often we call update_meta_store() and
 -	how awfully slow it is.
 -
 -2008-12-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Makefile.am:
 -	* glom/dialog_existing_or_new.[h|cc]: Also check an alternative
 -	directory path for the examples because an (unofficial) Ubuntu package
 -	installs them in an unexpected location. I would rather find out
 -	how/why that is happening though.
 -
 -2008-12-10  Johannes  <jschmid openismus com>
 -
 -	* configure.in:
 -	Depend on libgdamm-4.0, libgda-postgres-4.0 and pygda-4.0
 -
 -	* glom/main.cc: Call Gnome::Gda::Init() without arguments
 -
 -	* glom/base_db.cc:
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h:
 -	* glom/libglom/connectionpool_backends/postgres_central.cc:
 -	* glom/libglom/connectionpool_backends/postgres_central.h:
 -	* glom/libglom/connectionpool_backends/postgres_self.cc:
 -	* glom/libglom/connectionpool_backends/postgres_self.h:
 -	* glom/libglom/connectionpool_backends/sqlite.cc:
 -	* glom/libglom/connectionpool_backends/sqlite.h:
 -	* glom/libglom/data_structure/field.cc:
 -	* glom/libglom/data_structure/fieldtypes.cc:
 -	* glom/libglom/python_embed/py_glom_relatedrecord.cc:
 -	* glom/libglom/test_connectionpool.cc:
 -	* glom/libglom/utils.cc:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	* regression_tests/test_parsing_time.cc:
 -
 -	Ported gda calls to libgda 4.0. This does mostly involve the removal of Gda::Client
 -	and some more API changes (Gda::ParamList => Gda::Set, Gda::Parameter => Gda::Holder).
 -	Some bits are still missing which involves creating database for Postgres (sqlite works) and
 -	several checks if postgres is installed that have been performed in the past. Also, the
 -	set_unique_key() and set_primary_key() methods of Gda::Column have no replacement in 4.0.
 -	All things that are not finished are marked with "TODO_gda:".
 -
 -2008-12-09  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/application.h:
 -	* glom/application.cc: Set "Users" menu item in "Developer" menu
 -	insensitive when the database does not support users.
 -
 -	* glom/frame_glom.cc: Don't ask for user/password for SQLite
 -	connections.
 -
 -	* glom/libglom/data_structure/glomconversions.cc
 -	(get_text_for_gda_value): Really allow TIME values to be strings.
 -
 -	* glom/libglom/connectionpool.h:
 -	* glom/libglom/connectionpool_backends/postgres_central.h:
 -	* glom/libglom/connectionpool_backends/postgres_self.h:
 -	* glom/libglom/connectionpool_backends/sqlite.h: Added a
 -	supports_remote_connection() virtual function to the ConnectionPool
 -	backends.
 -
 -	* glom/libglom/connectionpool.cc: Don't advertize the Glom document
 -	via avahi when the database does not support remote connections, such
 -	as SQLite.
 -
 -2008-12-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_import_csv.[h|cc]:
 -	validate_primary_key(): Avoid a null pointer dereference (crash) if
 -	there is no primary key, though that should never happen now.
 -	handle_line(), import(): Use a sorted tree model so the fields list is
 -	alphabetically sorted.
 -	Ubuntu bug #https://bugs.launchpad.net/ubuntu/+source/glom/+bug/306593
 -	(elmergato)
 -
 -2008-12-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/mode_design/users/dialog_users_list.cc: Constructors:
 -	Do not enable row drag and drop on the treeviews, because it is not
 -	used and it just confuses users who trigger it accidentally.
 -	This was just some left-over code from when these classes were started
 -	by copying the layout dialog.
 -	As mentioned in Ubuntu bug
 -	https://bugs.launchpad.net/ubuntu/+source/glom/+bug/299573
 -	(elmergato)
 -
 -2008-12-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_existing_or_new.cc: Constructor: When the examples
 -	directory does not exist, mention the path in the stderr message, to
 -	help us to debug the problem.
 -
 -2008-12-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc: cleanup(): Check for a null
 -	m_backend, to avoid a crash when quitting Glom without opening a file.
 -	I added some more checks elsewhere.
 -
 -2008-12-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/canvas/canvas_group_grid.cc: create_lines():
 -	Do not create a GooCanvasGrid with 0 steps, so Glom works with versions
 -	of GooCanvas without the bug fix.
 -	Ubuntu bug https://bugs.launchpad.net/ubuntu/+source/glom/+bug/303453
 -	(elmergato)
 -
 -2008-12-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/combobox_fields.cc: on_cell_data_title(): Pass a ustring to
 -	set_property() for the (None) item, so it really shows up.
 -	set_property() cannot handle a char* there, it seems.
 -	For instance, this means that the choices fields can be cleared again.
 -	This regression probably happened when we first ported Glom to Maemo.
 -	Bug found by Arq. Maximiliano Meilán.
 -
 -2008-12-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/box_reports.cc: on_adddel_Add(): Set a default title based on
 -	the name, when adding a new report, as we do for tables, relationships,
 -	print layouts, etc.
 -
 -2008-12-05  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/data_structure/glomconversions.h:
 -	* glom/libglom/data_structure/glomconversions.cc: Replaced
 -	get_escaped_binary_data by escape_binary_data_postgres() and
 -	escape_binary_data_sqlite(). SQLite uses a different format for binary
 -	data.
 -	(get_text_for_gda_value): Allow DATE and TIME values to be strings,
 -	and parse them always in ISO format. This is used for SQLite within
 -	which we store dates and times as ISO-formatted strings.
 -
 -	* glom/libglom/data_structure/field.cc (glom_unescape_text): Don't
 -	unescape double quotes, as they are not escaped in glom_escape_text
 -	either.
 -	(sql): Use the escape_binary_data_postgres or
 -	escape_binary_data_sqlite functions from glomconversions, depending on
 -	the preferred format.
 -	(from_sql): Use the unescape_binary_data_postgres or
 -	unescape_binary_data_sqlite functions from glomconversions, depending
 -	on the preferred format.
 -
 -2008-12-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/foundset.[h|cc]: Added has_no_criteria()
 -	to check if it has a sort order or where clause.
 -	* glom/libglom/document/document_glom.[h|cc]: Added
 -	set_criteria_current(), like set_layout_current(), so we can
 -	temporarily remember the sort (and find) for a table while navigating.
 -	DocumentTableInfo: Hand-wrote copy constructor and operator=() rather
 -	than depend on generated ones.
 -	* glom/utility_widgets/db_adddel/db_adddel.[h|cc]:
 -	Added signal_sort_clause_changed, emitted when the user clicks on
 -	the column header, which already caused a refresh with that sort.
 -	* glom/mode_data/box_data_list.[h|cc]: Respond to a sort change in the
 -	DbAddDel widget, saving it temporarily in the document.
 -	* glom/mode_data/frame_glom.cc: show_table(): Use the remembered
 -	criteria, from the document, where there is one.
 -
 -	Ubuntu bug https://bugs.launchpad.net/ubuntu/+source/glom/+bug/303422
 -	(elmergato)
 -
 -2008-12-02  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/data_structure/fieldtypes.[h|cc]:  Added a fallback map
 -	that specifies types that can be used when the database does not support
 -	another type natively.
 -
 -	* glom/libglom/data_structure/field.cc (set_field_info): Only set glom
 -	type of the field based on the GType of the info if it represents a
 -	different type. This prevents losing type information of the field
 -	when the type for this field used a fallback.
 -
 -	* glom/libglom/data_structure/glomconversions.cc
 -	(get_text_for_gda_value): Don't complain for numeric types when the
 -	gtype is double, because this is used when the database system does
 -	not support GdaNumeric natively.
 -
 -2008-12-01  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Depend on the latest goocanvasmm version.
 -
 -2008-11-30  Armin Burgmeier  <armin openismus com>
 -
 -	* Makefile.am: Removed the DISTCHECK_CONFIGURE_FLAGS setting, since
 -	the --disable-scrollkeeper option is already passed to configure
 -	during distcheck by other means. This allows setting custom
 -	DISTCHECK_CONFIGURE_FLAGS. Bug #562688.
 -
 -2008-11-29  Armin Burgmeier  <armin openismus com>
 -
 -	* configure.in: Fixed the description of the --with-postgres-utils
 -	option to match the default.
 -
 -2008-11-29  Armin Burgmeier  <armin openismus com>
 -
 -	* Makefile.am: Changed DISTCLEAN_FILES to DISTCLEANFILES, to fix make
 -	distcheck.
 -
 -2008-11-28  Armin Burgmeier  <armin openismus com>
 -
 -	* win32/build-installer:
 -	* win32/glom.iss.in: Update for Glom 1.8.
 -
 -2008-11-28  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/data_structure/field.h:
 -	* glom/libglom/data_structure/field.cc: Added a sql_format
 -	enumeration, and added a format paramater to sql() and from_sql().
 -	This is needed for sqlite because it does not understand the
 -	E'binarydata'::bytea representation for binary data, which is a
 -	postgres extension.
 -
 -	* glom/libglom/connectionpool.h:
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool_backends/postgres_central.h:
 -	* glom/libglom/connectionpool_backends/postgres_self.h:
 -	* glom/libglom/connectionpool_backends/sqlite.h: Added a
 -	get_sql_format() virtual method that returns the SQL format of the
 -	backend.
 -
 -	* glom/libglom/data_structure/fieldtypes.cc
 -	(get_string_name_for_gdavaluetype): Added some fallbacks for types
 -	sqlite does not support. This means we are storing numerics as
 -	doubles, and dates and times as strings in sqlite.
 -
 -	* glom/libglom/data_structure/glomconversions.cc
 -	(get_double_for_gda_value_numeric): Handle the value being a double,
 -	since we use this when the database system doesn't has a "numeric"
 -	type.
 -
 -	* glom/dialog_import_csv.cc:
 -	* glom/dialog_import_csv_progress.cc:
 -	* glom/frame_glom.cc: Export/Import data always in postgres format,
 -	because this is what we used to do.
 -
 -	* glom/base_db.cc (add_standard_groups): Make this a no-op in case the
 -	database system doesn't support users.
 -	(insert_example_data): Convert data from the example file from
 -	postgres format to the format the current database backend uses before
 -	importing.
 -	(count_rows_returned_by): For sqlite the result of the SELECT COUNT
 -	query is int, not int64, so handle that case as well.
 -
 -	* glom/glom_privs.cc (get_current_privs): Assume we have all possible
 -	privileges in case the database system doesn't support users.
 -
 -	* glom/utility_widgets/filechooserdialog_saveextras.cc
 -	(set_extra_newdb_hosting_mode): Fixed central hosting/self hosting
 -	mismatch (the default option in the dialog was wrong).
 -
 -2008-11-26  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/relationships_overview/dialog_relationships_overview.[h|cc]:
 -	Respond to changes in the scrolledwindow adjustments to increase the
 -	canvas size when the window size changes, so it is always big enough,
 -	avoiding dead areas.
 -	Bug #559157 (Iain Lane).
 -
 -2008-11-25  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/mode_data/dialog_layout_export.cc (get_layout_groups): Fixed a
 -	crash which was caused by accessing mapGroups[1] in a
 -	default-constructed vector. Bug #557052.
 -
 -2008-11-25  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/utils.[h|cc]:
 -	Added a show_ok_dialog() overload that takes the parent_window as a
 -	pointer to simplify code by avoiding the need for a null check by
 -	callers.
 -
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	check_field_change(): Refuse to leave no primary key set because
 -	the rest of Glom expects each table to have one, by refusing to
 -	directly unset a primary key.
 -	When setting a primary key, ask the user if they really want to _change_
 -	the primary key, and do the suitability checks that were previously in
 -	change_definition().
 -	change_definition(): When setting a primary key, unset the previous
 -	primary key first.
 -
 -	This prevents the table from ever having no primary key.
 -	Ubuntu bug https://bugs.launchpad.net/ubuntu/+source/glom/+bug/299549
 -	(elmergato)
 -	Glom bug #562147
 -
 -2008-11-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc:
 -	set_found_set_from_primary_key_value(): Do not crash if there is no
 -	primary key, though we should not allow tables with no primary keys.
 -
 -2008-11-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc: update_table_in_document_from_database:
 -	Ignore the default_value property from libgda/database, because we only
 -	use it from the document, because libgda returns weird values.
 -	This prevents the loss of the default value information when reloading
 -	a document.
 -	Ubuntu bug https://bugs.launchpad.net/ubuntu/+source/glom/+bug/299896
 -	(elmergato)
 -
 -2008-11-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc
 -	user_added(): Call set_value_key(), like the old code did.
 -	Otherwise, each field edit adds another record, generating a new primary
 -	key each time, resulting in duplicate records.
 -	Ubuntu bug https://bugs.launchpad.net/ubuntu/+source/glom/+bug/300819
 -	(elmergato)
 -
 -2008-11-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/users/dialog_groups_list.cc: on_button_group_new():
 -	Put quotes around the group name, to avoid a problem when it contains a
 -	space.
 -
 -2008-11-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.[h|cc]: Removed
 -	the unused signal_user_requested_delete signal.
 -	on_MenuPopup_activate_Delete() (also called when the button is pressed):
 -	Actually call user_requested_delete(), so that the user can delete a
 -	list row. I forgot to do this when moving the other stuff down into
 -	DbAddDel.
 -	Ubuntu bug https://bugs.launchpad.net/ubuntu/+source/glom/+bug/299853
 -	(elmergato)
 -
 -2008-11-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/glomconversions.cc
 -	get_text_for_gda_value: Add a more specific warning when getting a
 -	text representation for a boolean, as done by the import dialog, though
 -	it should not really. Return translated true/false strings in that case.
 -
 -2008-11-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_developer.glade: Corrected a button name to avoid a crash
 -	when editing reports.
 -	Ubuntu bug https://bugs.launchpad.net/ubuntu/+source/glom/+bug/300054
 -
 -2008-11-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade: dialog_import_csv: Added a lable for advice about
 -	the expected data format.
 -	* glom/dialog_import_csv.cc: Constructor: Generate advice text in the
 -	label, showing an example of the expected ISO date format.
 -	Ubuntu bug https://bugs.launchpad.net/ubuntu/+source/glom/+bug/299591
 -
 -2008-11-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc: on_menu_file_export(): Correct the order of
 -	parameters to Document_Glom::get_data_layout_groups_plus_new_fields()
 -	so we actually get a sensible default set of fields instead of nothing.
 -	This was only a problem since the addition of the active-layout feature
 -	on trunk.
 -
 -2008-11-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade: Mark a tooltip as translatable in the initial dialog.
 -	Ubuntu bug https://bugs.launchpad.net/ubuntu/+source/glom/+bug/299556
 -
 -2008-11-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/glomconversions.c:
 -	sanity_check_date_text_representation_uses_4_digit_years():
 -	Default to dd/mm/yyyy for dates when the translator has not provided
 -	a 4-digit-year date syntax for the locale, printing a warning that the
 -	default might not be suitable. This seems better than failing.
 -
 -2008-11-21  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool.h: Changed connect() and
 -	create_database() functions of Backend to always take an error
 -	parameter as last argument, to save ugly #ifdefs. The ConnectionPool
 -	is the only one accessing these functions anyway, so this is not part
 -	of "public" API.
 -
 -	* glom/libglom/connectionpool_backends/postgres_self.h:
 -	* glom/libglom/connectionpool_backends/postgres_self.cc:
 -	* glom/libglom/connectionpool_backends/postgres_central.h:
 -	* glom/libglom/connectionpool_backends/postgres_central.cc: Adapt.
 -
 -	* glom/libglom/connectionpool_backends/sqlite.h:
 -	* glom/libglom/connectionpool_backends/sqlite.cc:
 -	* glom/libglom/connectionpool_backends/Makefile.am: Added a sqlite for
 -	creating and connecting to SQlite databases.
 -
 -	* glom/libglom/document/document_glom.h:
 -	* glom/libglom/document/document_glom.cc: Replace self_hosted
 -	attribute by a hosting_mode one in the document XML, which can be
 -	either "postgres_central", "postgres_self" or "sqlite".
 -
 -	* glom/utility_widgets/filechooserdialog_saveextras.h:
 -	* glom/utility_widgets/filechooserdialog_saveextras.cc: Offer to store
 -	the data in a SQlite database.
 -
 -	* glom/application.h:
 -	* glom/application.cc:
 -	* glom/dialog_connection.cc:
 -	* glom/frame_glom.cc: Handle the SQlite case, create corresponding
 -	ConnectionPool backend. It is possible to create a SQlite database
 -	this way, but some initial queries still fail yet because they are
 -	specific to postgres.
 -
 -2008-11-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/glomconversions.[h|cc]:
 -	Added sanity_check_date_parsing() and
 -	sanity_check_date_text_representation_uses_4_digit_years().
 -	* glom/main.cc: Use them to show informative warnings at startup.
 -	The translators comment for %x mentions those warnings now too.
 -	* po/es.po: Add a translation for %x because the es locales do not
 -	use 4-digit years for this.
 -	Ubuntu bug https://bugs.launchpad.net/ubuntu/+source/glom/+bug/300057
 -
 -	* glom/test_pyembed.cc: Add a cast to avoid a warning.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: Initialize InnerIgnore
 -	members to avoid warnings, though these would always be initialized in
 -	real life.
 -
 -2008-11-17  Armin Burgmeier  <armin arbur net>
 -
 -	* glom/libglom/connectionpool.h: Removed postgres-specific functions,
 -	added a common "Backend" interface. Simplified the code logic in
 -	connect().
 -
 -	* glom/libglom/connectionpool_backends/postgres_self.h:
 -	* glom/libglom/connectionpool_backends/postgres_self.cc:
 -	* glom/libglom/connectionpool_backends/postgres_central.h:
 -	* glom/libglom/connectionpool_backends/postgres_central.cc:
 -	* glom/libglom/connectionpool_backends/Makefile.am: Added backends
 -	for postgres central and self hosting.
 -
 -	* glom/libglom/gst-package.c:
 -	* glom/libglom/test_connectionpool.cc:
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/main.cc:
 -	* glom/frame_glom.cc:
 -	* glom/dialog_connection.cc:
 -	* glom/application.cc:
 -	* glom/dialog_new_self_hosted_connection.cc: Adapt other glom code,
 -	instantate the backends appropiately.
 -
 -2008-11-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/canvas/canvas_group_grid.[h|cc]:
 -	Use the new Goocanvas::Grid instead of creating lots of lines ourselves.
 -	We still need this class to add the rules and do the snapping though.
 -
 -2008-11-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc:
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	* glom/utility_widgets/canvas/canvas_group_resizable.cc:
 -	Adapt to goocanvasmm enum name changes.
 -
 -2008-11-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade: dialog_import_csv: Set the GtkSpinButton page size to
 -	0 because recent GTK+ warns that no other value is allowed.
 -
 -2008-11-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade: Remove the system name label. It is in the window
 -	title and this has always been a little weird. I never found a way to
 -	make it pretty without wasting space, so it is now gone.
 -	* glom/frame_glom.[h|cc]:
 -	Removed show_system_name().
 -	set_databases_selected(),
 -	on_menu_developer_database_preferences():
 -	* glom/application.cc: Constructor: Don't call it.
 -
 -2008-11-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.[h|cc]: init_menus(): Added Developer/ActivePlatform
 -	sub menu.
 -
 -	* glom/libglom/document/document_glom.[h|cc]:
 -	Added set/get_active_layout_platform(), and
 -	set/get_default_layout_platform().
 -	get_data_layout_groups_default(), get_data_layout_groups_plus_new_fields(),
 -	set/get_data_layout_groups(), get_data_layout_groups_have_any_fields():
 -	Added a layout_platform parameters.
 -	load_after(), save_before(): Save the layout_platform for each layout.
 -	* glom/frame_glom.cc: show_table(), on_menu_file_export():
 -	* glom/mode_data/notebook_data.[h|cc]: init_db_details(),
 -	  on_switch_page_handler():
 -	* glom/mode_data/box_data.[h|cc]: init_db_details(),
 -	  get_table_fields_to_show(), get_data_layout_groups()
 -	* glom/mode_data/box_data_calendar_related.cc: init_db_details(),
 -	  prepare_layout_dialog():
 -	* glom/mode_data/box_data_details.cc: init_db_details(),
 -	  create_layout(), on_button_new(),
 -	  on_flowtable_layout_changed(), print_layout(),
 -	  prepare_layout_dialog():
 -	* glom/mode_data/box_data_list.cc: on_adddel_user_reordered_columns(),
 -	  create_layout_get_layout(), prepare_layout_dialog():
 -	* glom/mode_data/box_data_list_related.cc: init_db_details(),
 -	  prepare_layout_dialog():
 -	* glom/mode_data/box_data_portal.cc: init_db_details():
 -	* glom/mode_data/dialog_layout.[h|cc]: set_document():
 -	* glom/mode_data/dialog_layout_calendar_related.[h|cc]: set_document():
 -	* glom/mode_data/dialog_layout_details.[h|cc]: set_document(),
 -	  save_to_document():
 -	* glom/mode_data/dialog_layout_list_related.[h|cc]: set_document():
 -	* glom/mode_find/notebook_find.[h|cc]:
 -	* glom/mode_find/box_data_details_find.[h|cc]:
 -	* glom/mode_find/box_data_list_find.[h|cc]
 -	* glom/utility_widgets/datawidget.cc: offer_related_record_id_find():
 -	* glom/utility_widgets/dialog_choose_id.[h|cc]: on_box_find_criteria(),
 -	  init_db_details():
 -	* glom/utility_widgets/dialog_layoutitem_properties.[h|cc]:
 -
 -	Adapted to changed Document_Glom API, taking note of the active platform.
 -
 -	This allows people to define a different layout to be used when running
 -	on a Maemo platform.
 -
 -	* glom/libglom/python_embed/py_glom_record.cc:
 -	* glom/libglom/python_embed/py_glom_related.cc:
 -	Added some casts to avoid warnings about literal to char* conversions.
 -
 -
 -This is the trunk branch, for Glom 1.9/1.10. Among other things, we will now
 -port to libgda-4.0.
 -
 -See also the glom-1-8 branch.
 -
 -1.8.1:
 -
 -2008-10-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list_related.cc create_layout_get_layout():
 -	Return the portal as the group instead of trying to get the layout via
 -	the (not meant to be used) list_related layout name. This makes related
 -	records portals show the specified fields again, instead of all of them.
 -	* glom/mode_data/box_data_manyrecords.cc:
 -	* glom/mode_data/box_data_manyrecords.h: Remove the useless
 -	create_layout_get_layout() override.
 -
 -2008-10-21  Koop Mast  <kwm FreeBSD org>
 -
 -	* glom/mode_data/notebook_data.cc: constructor:
 -	Add an ifdef to fix the build in client-only mode.
 -	Bug #557258
 -
 -1.8.0:
 -
 -2008-10-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_database_preferences.cc:
 -	* glom/dialog_existing_or_new.cc:
 -	* glom/dialog_existing_or_new.h:
 -	* glom/dialog_import_csv.cc:
 -	* glom/libglom/connectionpool.cc:
 -	* glom/mode_data/dialog_choose_field.cc:
 -	* glom/mode_data/dialog_choose_field.h:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/reports/dialog_layout_report.cc:
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	Use Gtk::TreeModel::iterator instead of Gtk::TreeIter
 -	and Gtk::TreeModel::Path instead of Gtk::TreePath, for
 -	consistency.
 -
 -2008-10-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* docs/user-guide/C/figures/glom_import.png:
 -	* docs/user-guide/Makefile.am:
 -	* docs/website/screenshots/glom_import.png:
 -	Added new screenshot.
 -
 -	* glom/dialog_import_csv.cc: Use a more robust way of
 -	creating TreeModel::Paths, to avoid a crash.
 -
 -2008-10-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* NEWS: Updated, ready for a 1.8.0 release.
 -	* configure.in: Depend on the latest goocanvasmmm, because of
 -	my API change.
 -	* glom/dialog_import_csv.cc:
 -	* glom/dialog_import_csv.h: Some code syntax changes.
 -
 -2008-10-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	get_canvas_table_cell_child(): Adapted for my
 -	Goocanvas::Item::get_child_property() API change.
 -
 -1.7.3:
 -
 -2008-10-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/icons/16x16/glom-line-horizontal.png
 -	* glom/icons/16x16/glom-line-vertical.png: Incredibly bad initial
 -	versions of these icons, featuring actual lines.
 -
 -2008-10-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/box_print_layouts.cc:
 -	on_adddel_user_added(): Set a default title based on the name,
 -	when adding a print layout.
 -
 -2008-10-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/box_print_layouts.[h|cc]:
 -	Rename signal handler to make them clearer.
 -
 -2008-10-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_portal.cc
 -	* glom/base_db.h
 -	* glom/base_db.cc:
 -	Moved code from Box_Data_Portal::init_db_details() into
 -	set_found_set_where_clause_for_portal() so it can be reused.
 -	Added get_field_value_in_database() overload that
 -	takes a FoundSet.
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc
 -	* glom/mode_design/print_layouts/canvas_layout_item.h: moved some code into
 -	get_rows_count_for_portal() so it can be reused.
 -	* glom/frame_glom.cc
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc
 - 	* glom/mode_design/print_layouts/canvas_print_layout.h:
 -	fill_with_data(): Added and used some helper functions to fill tables
 -	(for portals) with data so that portals actually show field data when
 -	printed.
 -
 -2008-09-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_details.h:
 -	append_appropriate_row(): Make sure that this returns something even
 -	for related records portals, so we can add buttons, text, and images to
 -	them again.
 -
 -2008-09-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_developer.glade:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_details.h:
 -	* glom/mode_data/dialog_layout_export.cc:
 -	* glom/mode_data/dialog_layout_export.h:
 -	* glom/mode_data/dialog_layout_list.cc: Renamed some widgets to make the
 -	code just slightly less weird. Also hid Add Group for list layouts.
 -
 -2008-09-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc:
 -	* glom/mode_design/print_layouts/canvas_layout_item.h: set_layout_item():
 -	Moved some code into a create_canvas_item_for_layout_item() function so
 -	we can use it to create table cell items, without putting them inside
 -	groups (resizables), because goocanvas cannot handle that.
 -
 -2008-09-26  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* configure.in: Require correct version for bakery and goocanvasmm
 -
 -	* glom/mode_data/flowtablewithfields.cc:
 -	* glom/mode_data/flowtablewithfields.h:
 -	* glom/utility_widgets/flowtable_dnd.cc:
 -	* glom/utility_widgets/flowtable_dnd.h:
 -	* glom/utility_widgets/layouttoolbar.cc:
 -	Added support for dragging related records to the layout. See #358092
 -
 -1.7.2:
 -
 -2008-09-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Increase the required goocanvasmm version, so we get the
 -	grid lines.
 -
 -2008-09-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* po/POTFILES.in: Mention a new file.
 -
 -2008-09-09  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool.cc: Implemented check_user_is_not_root()
 -	for Windows, using some code from postgresql.
 -
 -2008-09-09  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/spawn_with_feedback.cc: Refactored the code, removed
 -	all blocking calls and use the CreateProcess() API on Windows to hide
 -	the console window of child processes.
 -
 -	* glom/libglom/connectionpool.cc: Always call the spawn API with
 -	double quotes for the path to the executable, because CreateProcess()
 -	does not support single quotes.
 -
 -2008-09-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_details.h:
 -	* glom/mode_data/dialog_layout_list.cc: Add a column for the column width,
 -	but only show it for the list. Also hide the columns count column for
 -	the list.
 -	* glom/libglom/document/document_glom.cc: load_after_layout_group(),
 -        save_before_layout_group(): Save the column widths for items
 -	in the document.
 -
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/mode_data/dialog_layout_list_related.h: Remove one set_document()
 -	method overload, adding the parent_table to the existing one, to simplify
 -	code and to allow us to preserve LayoutItem_Portal details such as print
 -	layout positions, even when no relationship is chosen yet.
 -	* glom/mode_data/box_data_list_related.cc: Adapted.
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc: Adapted.
 -
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc: create_item():
 -	For the portal, create a rect cell for each field in the layout. Still
 -	not very useful, but gradually becoming more sensible.
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: on_treeview_column_resized():
 -	Do not save the column width if it is the last column because that autosizes
 -	to take all remaining space.
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h: Remove the reset_column_widths
 -	stuff, because ignoring the last column is a better fix.
 -
 -2008-09-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_calendar_related.cc:
 -	* glom/mode_data/box_data_calendar_related.h:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h:
 -	* glom/mode_data/box_data_portal.cc:
 -	* glom/mode_data/box_data_portal.h: Added init_db_details()
 -	method overloads that take a parent table instead of a
 -	portal, to use when no relationship has been chosen yet.
 -	* glom/mode_data/dialog_layout_calendar_related.cc:
 -	* glom/mode_data/dialog_layout_calendar_related.h:
 -	Added set_document() that takes a table instead of a portal,
 -	as the other portal layout dialogs do already.
 -	* glom/mode_data/flowtablewithfields.cc:
 -	Specify a from table name instead of a portal when
 -	no relationship has been chosen yet.
 -	* glom/mode_data/dialog_layout_list_related.cc: Cope with a
 -	a null portal, so the user can choose the relationship on this
 -	dialog without choosing the relationship separately first.
 -	* glom/mode_data/dialog_layout_details.cc: Do not ask for the
 -	relationship whenever adding a portal.
 -
 -	* glom/libglom/utils.cc:
 -	* glom/libglom/utils.h: Added show_window_until_hide().
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	* glom/mode_design/print_layouts/canvas_print_layout.h:
 -	Block when showing the layout dialog for a portal.
 -
 -2008-09-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/layout/layoutitem_portal.cc
 -	* glom/libglom/data_structure/layout/layoutitem_portal.h: Added
 -	get/set_print_layout_row_height().
 -	* glom/mode_data/dialog_layout_list_related.cc
 -	* glom/mode_data/dialog_layout_list_related.h: Added a set_document()
 -	that takes the from_table, instead of an existing portal.
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc: set_layout_item():
 -	Slightly more sane code, though I'm still just playing.
 -	* glom/mode_design/print_layouts/canvas_print_layout.h:
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc
 -	Added offer_related_records(), used in on_context_menu_edit(). Still needs
 -	to block on the dialog show.
 -
 -2008-08-28  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/application.cc:
 -	Remeber state of layout toolbar when switching modes
 -
 -2008-08-28  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/application.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/notebook_data.cc:
 -	Correctly unset the menu item when layout toolbar is shown and don't hide
 -	layout toolbar when an item is dragged
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	(on_canvas_drag_drop, on_canvas_drag_motion)
 -	Fixed build error with gtkmm 2.12 (const_cast, see comment)
 -
 -2008-08-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc offer_field_list(), offer_field_formatting(),
 -	offer_imageobject(), offer_notebook(): Return the initial item if the user
 -	cancelled the dialog.
 -
 -2008-08-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/print_layout_toolbar_button.cc:
 -	* glom/mode_design/print_layouts/print_layout_toolbar_button.h: Added
 -	get_item_type_from_selection_data().
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc: create_empty_item():
 -	Mention unhandled items on std::cerr.
 -	on_toolbar_item_drag_data_get(): Get the item type correctly.
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc: set_layout_item(): Do
 -	not reference an empty layout item.
 -
 -2008-08-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/action_layout_item.cc:
 -	* glom/mode_design/print_layouts/action_layout_item.h: Removed this.
 -	* glom/mode_design/print_layouts/Makefile.am:
 -	* glom/mode_design/print_layouts/print_layout_toolbar.cc:
 -	* glom/mode_design/print_layouts/print_layout_toolbar.h:
 -	* glom/mode_design/print_layouts/print_layout_toolbar_button.cc:
 -	* glom/mode_design/print_layouts/print_layout_toolbar_button.h:
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	* glom/mode_design/print_layouts/window_print_layout_edit.h: Use a toolbar like
 -	the details layout toolbar, which use EggToolPallette.
 -	* glom/utility_widgets/layouttoolbar.cc:
 -	* glom/utility_widgets/layouttoolbarbutton.cc:
 -	* glom/utility_widgets/layouttoolbarbutton.h: Use std::string for filenames
 -	and parts of filenames.
 -	* icons/16x16/Makefile.am: Added placeholder images for extra items used on
 -	print layouts.
 -
 -2008-08-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/layouttoolbarbutton.cc:
 -	* glom/utility_widgets/layouttoolbarbutton.h: Change the constructor to
 -	take an icon name, to reduce some code elsewhere.
 -	* glom/utility_widgets/layouttoolbar.cc: Adapted.
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/utility_widgets/flowtable_dnd.cc:
 -	* glom/utility_widgets/flowtable_dnd.h: Correct whitespace.
 -
 -2008-08-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/layouttoolbar.cc:
 -	  Improve the tooltips text.
 -	* glom/utility_widgets/layouttoolbar.h:
 -	* po/POTFILES.in: Mention renamed files.
 -
 -2008-08-24  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/spawn_with_feedback.cc
 -	(execute_command_line_and_wait_until_second_command_returns_success):
 -	Set the encoding of the IO channel to read stderr from the child
 -	process from to "", and set it to be unbuffered. Otherwise, we
 -	sometimes receive an IO_IN event on Windows, but when trying to read
 -	any data, then the read() call blocks the whole process forever.
 -
 -2008-08-23  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/utility_widgets/layouttoolbar.cc: Locate images relative to
 -	application executable on Windows.
 -
 -	* win32/build_installer:
 -	* win32/glom.iss.in: Added pixmaps to the installer.
 -
 -2008-08-22  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/mode_data/box_data_details.h:
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/dragbar.cc: renamed):
 -	* glom/utility_widgets/dragbar.h (renamed):
 -	* glom/utility_widgets/dragbutton.cc: renamed):
 -	* glom/utility_widgets/dragbutton.h (renamed):
 -	* glom/utility_widgets/flowtable_dnd.cc:
 -	* glom/utility_widgets/layouttoolbar.cc: new):
 -	* glom/utility_widgets/layouttoolbar.h (new):
 -	* glom/utility_widgets/layouttoolbarbutton.cc: new):
 -	* glom/utility_widgets/layouttoolbarbutton.h (new):
 -	Changed names of DragBar to LayoutToolbar and DragButton to
 -	LayouttoolbarButton
 -
 -2008-08-22  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool.cc: discover_first_free_port): Print
 -	WinSock error code in case the socket() call fails, since socket
 -	errors are not reported via errno on Windows, so perror does not yield
 -	a useful error message.
 -
 -	* glom/main.cc: Initialize WinSock at startup, so that
 -	discover_first_free_port() can use the socket API.
 -
 -2008-08-22  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/application.cc:
 -	* glom/application.h:
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h:
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_data/notebook_data.h:
 -	Added menuitem to hide/show the layout toolbar (default: off)
 -
 -	* glom/utility_widgets/dragbutton.h:
 -	Added a comment
 -
 -2008-08-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/dragbar.cc:
 -	* glom/utility_widgets/dragbutton.cc:
 -	* glom/utility_widgets/dragbutton.h: Whitespace corrections.
 -	Pass strings as const&. Added a TODO asking for explanation.
 -	This needs to be renamed to something more layout-editing specific.
 -	Maybe LayoutToolbar and LayoutToolbarButton.
 -
 -2008-08-20  Johannes Schmid <jhs gnome org>
 -
 -	* glom/utility_widgets/dragbar.cc:
 -	* glom/utility_widgets/dragbutton.cc:
 -	* glom/utility_widgets/dragbutton.h:
 -	Added labels to the toolitems
 -
 -	* glom/utility_widgets/egg/toolpalette/eggtoolpalette.c
 -	(egg_tool_palette_set_style):
 -	Fixed a bug in eggtoolpalette ("toolbar-style" vs. "style). Also
 -	fixed in libegg trunk.
 -
 -	* glom/utility_widgets/sidebar.cc:
 -	Use GTK_TOOLBAR_BOTH_HORIZ as toolbar style. (Does only work with
 -	gtk+ >= 2.14)
 -
 -2008-08-20  Johannes Schmid  <jhs idefix>
 -
 -	* glom/utility_widgets/dragbar.cc:
 -	* glom/utility_widgets/dragbutton.cc:
 -	* glom/utility_widgets/dragbutton.h:
 -	Added tooltips to toolitems
 -
 -2008-08-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/egg/toolpalette/eggtoolitemgroup.c:
 -	* glom/utility_widgets/egg/toolpalette/eggtoolitemgroup.h:
 -	* glom/utility_widgets/egg/toolpalette/eggtoolpalette.c:
 -	* glom/utility_widgets/egg/toolpalette/eggtoolpalette.h:
 -	* glom/utility_widgets/egg/toolpalette/eggtoolpaletteprivate.h:
 -	* glom/utility_widgets/egg/toolpalette/testtoolpalette.c: Updated from libegg.
 -	* glom/utility_widgets/sidebar.cc:
 -	* glom/utility_widgets/sidebar.h: Fixed the whitespace.
 -	set_drag_source(): Added the extra parameter for the call to
 -	egg_tool_palette_set_drag_source().
 -
 -2008-08-15  Armin Burgmeier  <armin openismus com>
 -
 -	* win32/build_installer:
 -	* win32/glom.iss.in: We use self-built postgresql binaries again, so
 -	we don't need to ship all the libraries the official ones are built
 -	against.
 -
 -2008-08-12  Armin Burgmeier  <armin openismus com>
 -
 -	* win32/build_installer: Take a revision number as argument, producing
 -	for instance glom-setup-1.7.1-2.exe.
 -
 -	* win32/glom.iss.in: Hide the components page, since all components
 -	are fixed anyway.
 -
 -	* README: Added some general information on how the installer is
 -	built.
 -
 -2008-08-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/utils.cc:
 -	* glom/libglom/utils.h: show_help() Add a note that this is a replacement
 -	for gnome_help_display() until we have something in GTK+.
 -
 -2008-08-11  Armin Burgmeier  <armin openismus com>
 -
 -	* win32/build_installer:
 -	* win32/glom.iss.in: Added libeay32.dll and ssleay32.dll to the
 -	installer. These seem to be required for libpq.dll, which is in turn
 -	required by the libgda postgres provider.
 -
 -2008-08-05  Armin Burgmeier  <armin openismus com>
 -
 -	* win32/build-installer:
 -	* win32/glom.iss.in:
 -	* win32/querymodules.bat: Updated to fit my new build setup.
 -
 -2008-08-05  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/dialog_existing_or_new.cc: Changed the path where the example
 -	files are looked up on Windows, to keep it consistent with the path to
 -	load glade files from.
 -
 -2008-08-01  Claude Paroz  <claude 2xlibre net>
 -
 -	* glom/glom.glade: Removed translatable property from stock labels.
 -
 -2008-07-23  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/existing_or_new.h:
 -	* glom/existing_or_new.cc: Hide the network item on Windows in the
 -	initial dialog.
 -
 -2008-07-23  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/glom.glade: Removed the image from the Select button in the
 -	initial dialog.
 -
 -	* glom/dialog_existing_or_new.cc: Add the image in the Code, via
 -	Gtk::Button::set_image. This way the image is not shown when the theme
 -	doesn't show images on buttons, such as the MS-Windows theme.
 -
 -2008-07-21  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/main.cc: #ifdef out the atexit() call on Windows since
 -	__libc_freeres() is not available there.
 -
 -2008-07-20  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/application.cc: offer_new_or_existing): Fixed the
 -	non-client-only build. There was a default: marker in a switch
 -	statement with no code after it.
 -
 -2008-07-20  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool.cc: Windows build fix: winsock2.h
 -	somehow includes a file that defines a structure called DATADIR, but
 -	DATADIR is a define glom uses, which breaks the build. Fixed by
 -	#undefining DATADIR for that include.
 -
 -2008-07-20  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/Makefile.am: Added glom.rc to the distribution, which is
 -	required to build Glom on Windows.
 -
 -2008-07-19  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/dialog_existing_or_new.cc:
 -	* glom/dialog_existing_or_new.h:
 -	Don't show "Create database" tab for client only mode
 -
 -2008-07-17  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/application.cc:
 -	* glom/application.h:
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	* glom/layout_item_dialogs/dialog_buttonscript.h:
 -	* glom/mode_data/box_data_calendar_related.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/flowtablewithfields.cc:
 -	* glom/mode_data/flowtablewithfields.h:
 -	* glom/utility_widgets/buttonglom.cc:
 -	* glom/utility_widgets/buttonglom.h:
 -	* glom/utility_widgets/labelglom.cc:
 -	* glom/utility_widgets/labelglom.h:
 -	* glom/utility_widgets/layoutwidgetbase.cc:
 -	* glom/utility_widgets/layoutwidgetutils.cc:
 -	* glom/utility_widgets/layoutwidgetutils.h:
 -	* glom/utility_widgets/notebookglom.cc:
 -	Fixed build with GLOM_ENABLE_CLIENT_ONLY
 -
 -	* glom/main.cc:
 -	Allow to pass arguments to Gtk+ like --g-fatal-warnings. Glom did filter those
 -	as invalid arguments before
 -
 -1.7.1:
 -
 -2008-06-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Default to looking for postgres 8.3 instead of 8.2, to make
 -	life easier for me when distchecking.
 -
 -2008-06-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_import_csv_progress.cc: on_idle_import(): Corrected the grammar
 -	in two strings. Bug #538480 (Andre Klapper).
 -
 -2008-06-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/notebook_glom.h: Made on_switch_page_handler()
 -	virtual again, so that the list updates again when moving from the details
 -	tab. Fixes bug #532721 (Armin Burgmeier).
 -
 -2008-06-16  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/Makefile.am:
 -	* glom/utility_widgets/egg/toolpalette/Makefile.am:
 -	* glom/utility_widgets/egg/util/Makefile.am:
 -	Fixed distcheck
 -
 -2008-06-16  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/utility_widgets/egg/toolpalette/Makefile.am:
 -	Fixed distcheck
 -
 -2008-06-16  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* configure.in:
 -	* glom/Makefile.am:
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/dragbar.cc:
 -	* glom/utility_widgets/egg/Makefile.am:
 -	* glom/utility_widgets/flowtable_dnd.cc:
 -	* glom/utility_widgets/sidebar.h:
 -	* glom/utility_widgets/egg/*:
 -
 -	Included eggtoolbar instead of using svn:externals to fix distcheck (#520741)
 -
 -2008-06-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_existing_or_new.cc:
 -	* glom/glom.glade:
 -	* glom/utility_widgets/dragbar.cc: Added comments for translators.
 -	Bug #538480 (Andre Klapper).
 -
 -2008-06-07  Armin Burgmeier  <armin openismus com>
 -
 -	* configure.in:
 -	* config.h.in: Check whether the strptime function is available.
 -
 -	* glom/libglom/data_structure/glomconversions.cc: parse_time): Don't
 -	fall back to strptime if strptime is not available, such as on Windows
 -	(mingw).
 -
 -	* glom/dialog_existing_or_new.h:
 -	* glom/dialog_existing_or_new.cc:
 -	* glom/dialog_import_csv.cc: Windows build fixes, mostly
 -	#ifndef/#endif pairs around libepc stuff. We also need to #undef iconv
 -	which seems to be a define to libiconv on Windows, in order to use
 -	the Glib::Iconv::iconv function.
 -
 -	* glom/main.cc: Don include <fontconfig/fontconfig.h> on Windows since
 -	it is not available. It doesn't seem to be used anyway.
 -
 -2008-05-23  Armin Burgmeier  <armin arbur net>
 -
 -	* glom/libglom/data_structure/field.h:
 -	* glom/libglom/data_structure/field.cc: Added from_sql() to convert a
 -	SQL representation to a Gnome::Gda::Value. This is the reverse to the
 -	sql() function.
 -
 -	* glom/dialog_import_csv.cc: field_data_func): Remove own unescaping
 -	code, use Field::from_sql() for preview instead.
 -
 -	* glom/dialog_import_csv_progress.cc: on_idle_import): Use
 -	Field::from_sql() to do the actual import. This allows to correctly
 -	import files that the Export functionality produces, escpecially
 -	dates and images.
 -
 -2008-05-22  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/utility_widgets/flowtable_dnd.cc:
 -	* glom/utility_widgets/flowtable_dnd.h:
 -	Fixed some crashers when starting a drag from no item
 -
 -2008-05-22  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/libglom/data_structure/layout/layoutgroup.cc: (add_item)
 -	Add item at the end of the group instead of losing it
 -
 -	* glom/utility_widgets/flowtable_dnd.cc:
 -	(on_child_drag_motion):
 -	Fix flickering of placeholder on bigger objects like images or text boxes
 -
 -2008-05-21  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/mode_data/flowtablewithfields.cc:
 -	  (on_dnd_add_layout_item_image)
 -	* glom/mode_data/flowtablewithfields.h:
 -	* glom/utility_widgets/dragbar.cc
 -	(DragBar):
 -	* glom/utility_widgets/flowtable_dnd.cc
 -	(on_drag_data_received):
 -	* glom/utility_widgets/flowtable_dnd.h
 -	(FlowTableDnd):
 -	* glom/utility_widgets/layoutwidgetbase.h:
 -	Add images as possible drag items to the sidebar and adjust flowtable
 - 	to accept images.
 -
 -2008-05-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* docs/user-guide/C/glom.xml:
 -	* glom/dialog_import_csv.cc: Minor string corrections.
 -
 -2008-05-18  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/Makefile.am: Corrected indentation
 -
 -	* glom/mode_data/flowtablewithfields.cc:
 -	(add_field_at_position):
 -	Put labels for fields into their own EventBox
 -
 -	* glom/utility_widgets/flowtable_dnd.cc:
 -	  (start_dnd), (stop_dnd), (find_current_dnd_item), (on_child_drag_begin)
 -	  (on_child_drag_data_delete):
 -	* glom/utility_widgets/flowtable_dnd.h:
 -	Allow moving of items fields through drag and drop
 -
 -2008-05-15  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/dialog_import_csv.h:
 -	* glom/dialog_import_csv.cc: Added some more encodings, differentiate
 -	between encoding name and charset.
 -
 -	* glom/application.cc: init_menus_file), (init_menus): Moved the
 -	Import menu item from Tables to File menu.
 -
 -	* glom/frame_glom.h:
 -	* glom/frame_glom.cc: Renamed the function from
 -	on_menu_Tables_ImportIntoTable() to on_menu_file_import().
 -
 -2008-05-13  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/dialog_import_csv.h:
 -	* glom/dialog_import_csv.cc: Added missing functionality.
 -
 -	* glom/glom.glade:
 -	* glom/dialog_import_csv_progress.h:
 -	* glom/dialog_import_csv_progress.cc:
 -	* glom/Makefile.am: Dialog showing progress of the import and error
 -	messages, performing the actual import.
 -
 -	* glom/frame_glom.cc: on_menu_Tables_ImportIntoTable): Show the
 -	progress dialog after the user has finished the settings in the
 -	"Import from CSV" dialog, refresh display after import so the list and
 -	details show the imported values.
 -
 -	* docs/user-guide/C/glom.xml: Added an initial explanation for the
 -	Import Dialog.
 -
 -2008-05-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/notebook_data.cc: on_list_user_requested_details():
 -	Improve my fix from 2008-04-30:
 -	Call refresh_data_from_database_with_primary_key() again, but stop the
 -	switch-page handler from running, so that we really see the details for
 -	the row when clicking on the record in the list view.
 -
 -2008-05-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/notebook_data.cc: init_db_details():
 -	Fix an if to avoid showing the list view when we want the details view,
 -	just because the details view is already showing.
 -	* glom/mode_data/notebook_data.h
 -	* glom/mode_find/notebook_find.h
 -	* glom/notebook_glom.h: Removed some unnecessary virtuals.
 -
 -2008-05-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list_related.cc: constructor:
 -	Use add_view() to give the DbAddDel access to the document, to avoid
 -	the repeated warning about the unexpected field type.
 -
 -2008-05-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc fill_from_database():
 -	Get the primary key index (inefficiently) even if the primary key was
 -	already in the list, allowing record editing to work again.
 -	Fixes bug #530879 (Armin Burgmeier)
 -
 -2008-05-02  Johannes Schmid <jhs gnome org>
 -
 -	* glom/utility_widgets/flowtable_dnd.cc: on_child_drag_motion):
 -	Fixed a stupid bug in the dnd code that caused dropping problems all
 -	over.
 -
 -2008-04-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/notebook_data.cc: on_list_user_requested_details():
 -	Do not call Box_Data_Details::refresh_data_from_database_with_primary_key()
 -	because on_switch_page_handler() does it later. This avoids an
 -	unnecessary extra refresh of the details view.
 -
 -	* glom/libglom/data_structure/layout/layoutitem_field.h:
 -	Added predicate_LayoutItem_Field_IsSameField for use with std::find_if().
 -	* glom/mode_data/box_data_details.cc: fill_from_database(): Do not add
 -	the primary key to the list twice, to avoid setting it twice, to avoid
 -	refreshing portals twice.
 -
 -2008-04-29  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/mode_data/flowtablewithfields.cc:
 -	* glom/mode_data/flowtablewithfields.h
 -	(on_dnd_add_layout_item)
 -	Added new method to reparent items from other flowtables.
 -
 -	* glom/utility_widgets/flowtable_dnd.cc: start_dnd), (on_drag_motion),
 -	  (on_drag_data_received), (dnd_item_at_position),
 -	  (dnd_datawidget_from_item), (find_current_dnd_item),
 -	  (on_child_drag_motion), (on_child_drag_data_get),
 -	  (on_child_drag_begin), (on_child_drag_end):
 -	* glom/utility_widgets/flowtable_dnd.h
 -	Implemented drag sources for LayoutWidgets and allow dragging in and between
 -	flowtables. Only works for labels as I didn't find out yet how to set other
 -	widgets as drag sources.
 -
 -	* glom/utility_widgets/layoutwidgetbase.cc
 -	  (set_dnd_in_progress), (get_dnd_in_progress):
 -	* glom/utility_widgets/layoutwidgetbase.h:
 -	Added some need methods for drag and drop
 -
 -2008-04-29  Murray Cumming  <murrayc murrayc com>
 -
 -	Large refactoring of the Base_DB_* and Box_DB_* hierarchy to make it
 -	simpler and less hacky.
 -
 -	* docs/developer_reference/Doxyfile: Added this, so you can do
 -	doxygen Doxyfile to get some HTML to help understand the code.
 -
 -	* glom/signal_reemitter.h: Added signal_connect_for_reemit_*args(),
 -	to make it easier to just emit a signal in response to another one,
 -	for instance to emit up to a parent widget.
 -	* regression_tests/Makefile.am:
 -	* regression_tests/test_signal_reemit.cc: Added a test for this.
 -
 -	* glom/Makefile.am:
 -	* glom/base_db.[h|cc]: Split this, to create:
 -	* glom/base_db_table.[h|cc]
 -	* glom/base_db_table_data.[h|cc]: with some stuff from Box_DB_Table.
 -
 -	* glom/box_db.[h|cc]:  Renamed to
 -	* glom/box_withbuttons.[h|cc] because that's all this is now.
 -
 -	* glom/box_db_table.[h|cc]: Derive from Base_DB_Table, instead of
 -	implementing so much stuff.
 -
 -	* glom/mode_data/Makefile.am:
 -	* glom/mode_data/box_data.[h|cc]: Derive from Box_WithButtons,
 -        and Base_DB_Table_Data instead of implementing so much stuff.
 -
 -	* glom/mode_data/box_data_details.[h|cc]
 -	* glom/mode_data/box_data_manyrecords.cc[h|cc]: Added this base class
 -	for:
 -	* glom/mode_data/box_data_list.[h|cc]
 -	and Box_Data_Portal:
 -
 -	* glom/mode_data/box_data_portal.cc[h|cc]: Added this base class
 -	for
 -	* glom/mode_data/box_data_calendar_related.[h|cc]
 -	and
 -	* glom/mode_data/box_data_list_related.[h|cc]
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.[h|cc] Derive from
 -	Base_DB_Table_Data, to use its implementation, to move lots of
 -	code for record adding, changing, and deleting into this widget instead
 -	of having decisions in the parent Box_Data_List_Related and Box_Data_List.
 -	This is simpler.
 -
 -2008-04-26  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/glom.glade:
 -	* glom/dialog_import_csv.h:
 -	* glom/dialog_import_csv.cc:
 -	* glom/Makefile.am: Added yet unfinished "Import from CSV" dialog.
 -
 -	* glom/frame_glom.h:
 -	* glom/frame_glom.cc: Added Frame_Glom::on_menu_Tables_ImportIntoTable
 -	to launch the import dialog.
 -
 -	* glom/application.cc: init_menus): Added an action for the "Import
 -	Into Table" menu item.
 -
 -2008-04-25  Jeremiah Savage  <jeremiahsavage gmail com>
 -
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/data_structure/glomconversions.cc:
 -	* glom/libglom/document/document_glom.h:
 -	* glom/libglom/utils.cc:
 -	* glom/translation/window_translations.cc: Add <cstring> includes to
 -	fix the build with gcc 4.3.
 -	Bug #529530
 -
 -2008-04-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_developer.glade:
 -	* glom/utility_widgets/datawidget.cc: constructor:
 -	Added : at the end of labels, as per the GNOME HIG.
 -
 -2008-04-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/glomconversions.cc:
 -	parse_time(): Fall back to using strptime(), in various formats,
 -	so we can parse 01:00 PM and 13:00, instead of parsing these as
 -	01:00 AM.
 -
 -	* Makefile.am:
 -	* configure.in:
 -	* regression_tests/Makefile.am:
 -	* regression_tests/test_parsing_time.cc: Added a test for this time
 -	parsing.
 -
 -2008-04-22  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/mode_data/flowtablewithfields.cc:
 -	(set_design_mode): Call FlowTableDnd::set_design_mode() if appropriate
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtable.h:
 -	(forall), (container_forall_callback):
 -	Implement forall() with is not implement for Gtk::Container
 -	(setup_dnd): Remove this and do all dnd stuff in flowtable_dnd
 -
 -	* glom/utility_widgets/flowtable_dnd.cc:
 -	* glom/utility_widgets/flowtable_dnd.h:
 -	(set_design_mode), (start_dnd), (stop_dnd):
 -	Override set_design_mode() and call start_dnd() and stop_dnd() there.
 -	Preparation for moving items around and setting them as drag source.
 -
 -2008-04-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_calendar_related.h
 -	* glom/mode_data/box_data_calendar_related.cc
 -	 on_calendar_month_changed(): Update the calendar details when the user
 -	navigates to a different month.
 -
 -2008-04-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_lesson_planner.glom:
 -	* examples/Makefile.am: Added a new example, which uses a calendar.
 -
 -	* glom/mode_data/box_data_calendar_related.h
 -	* glom/mode_data/box_data_calendar_related.cc:
 -	fill_from_database(): Do one SQL query for the whole month and store
 -	the values.
 -	on_calendar_details(): Show the stored values.
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h: Removed get_fields_to_show()
 -	because it is in the base class.
 -
 -2008-04-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_calendar_related.cc
 -	  (on_calendar_details):
 -	* glom/mode_data/box_data_calendar_related.h
 -	  (Box_Data_Calendar_Related):
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h:
 -	Removed get_has_suitable_record_to_view_details(),
 -        get_suitable_table_to_view_details() and
 -	get_suitable_record_to_view_details() because they are in the base
 -	Box_Data_Portal) class.
 -
 -	* glom/mode_data/box_data_portal.cc:
 -	* glom/mode_data/box_data_portal.h: Removed unused empty
 -	create_layout_dialog() and prepare_layout_dialog
 -	* glom/mode_data/flowtablewithfields.h:
 -	* glom/mode_data/flowtablewithfields.cc: get_portals(): Get a list of
 -	Box_Data_Portal instead of Widget, to make this more self-documenting.
 -	set_field_value(): Do not dynamic_cast to just Box_Data_List_Related,
 -	so that Box_Data_Calendar_Related is updated too, to show just the
 -	related records, instead of all.
 -
 -2008-04-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Makefile.am:
 -	* glom/combobox_fields.h
 -	* glom/combobox_fields.cc: Added set_fields() that takes a field type to
 -	reduce the list.
 -	* glom/glom_developer.glade: window_data_layout(): Added a Add Related
 -	Calendar button and added a Date section, which is hidden for the
 -	existing layout dialogs.
 -	* glom/libglom/data_structure/layout/Makefile.am:
 -	Added layoutitem_calendarportal.[h|cc]
 -	* glom/libglom/document/document_glom.cc
 -	  load_after_layout_group(), save_before_layout_group(): Handle
 -	LayoutItem_CalendarPortal items.
 -
 -	* glom/mode_data/Makefile.am:
 -	* glom/mode_data/box_data_portal.cc
 -	* glom/mode_data/box_data_portal.h: Added this new base class for
 -	related records widgets, using LayoutItem_Portal as the base class for
 -	their layout data.
 -	* glom/mode_data/box_data_list_related.cc
 -	* glom/mode_data/box_data_list_related.h: Derive from Box_Data_Portal,
 -	to which some of the code has moved.
 -	* glom/mode_data/box_data_calendar_related.cc
 -	* glom/mode_data/box_data_calendar_related.h: Added this new portal,
 -	which shows the related records in a calendar.
 -
 -	* glom/mode_data/dialog_layout_calendar_related.cc
 -	* glom/mode_data/dialog_layout_calendar_related.h:
 -	* glom/mode_data/dialog_layout_details.h
 -	* glom/mode_data/dialog_layout_details.cc:
 -	Allow adding of a related calendar portal.
 -
 -	* glom/mode_data/dialog_layout_list.cc: Dialog_Layout_List):
 -	* glom/mode_data/flowtablewithfields.cc
 -	* glom/mode_data/flowtablewithfields.h: Handle Box_Data_Portal instead
 -	of just Box_Data_List_Related, and handle Box_Data_Calendar_Related
 -	specifically where necessary.
 -	* glom/utility_widgets/calendar/Makefile.am: Fixed a typo.
 -	* glom/utility_widgets/calendar/glomgtkcalendar.c
 -	  (glom_gtk_calendar_init, glom_gtk_calendar_new): Use the correct GType.
 -
 -2008-04-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade:
 -	* glom/glom_developer.glade: Moved dialog_data_invalid_format to the
 -	non-developer .glade file, where the code expects it to be, preventing
 -	a crash.
 -
 -2008-04-17  Claude Paroz  <claude 2xlibre net>
 -
 -	* glom/glom.glade:
 -	* glom/glom_developer.glade: Removed translatable properties for stock
 -	labels.
 -
 -2008-04-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* docs/user-guide/C/glom.xml: Remove sentences saying that names should
 -	not have spaces or special characters, because they can.
 -	Bug #528209 (Jean-François Fortin Tam)
 -
 -2008-04-15  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data.cc: Made the show_layout_dialog() function
 -	non-virtual and added two new (pure) virtual functions called
 -	create_layout_dialog() and prepare_layout_dialog(). Create the dialog
 -	in show_layout_dialog() if necessary, so the dialog is only created
 -	when needed.
 -
 -	* glom/mode_data/box_data_list.h:
 -	* glom/mode_data/box_data_details.h:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_details.cc: Implement the two new virtual
 -	functions.
 -
 -	* glom/mode_data/box_data_list_related.h:
 -	* glom/mode_data/box_data_calendar_related.h:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_calendar_related.cc: Removed the
 -	m_pLayoutDialogRelated variable, and implement the two new virtual
 -	functions instead. Removed the destructor which is no longer required.
 -	(on_dialog_layout_hide): Cast m_pDialogLayout to a
 -	Dialog_Layout_List_Related before usage. These changes clean up the
 -	code in Box_Data_List_Related a bit.
 -
 -2008-04-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc
 -	* glom/mode_data/box_data.h: add_related_record_for_field():
 -	Added a primary_key_value_used output parameter so that the caller nows
 -	what record was actually created.
 -	* glom/mode_data/box_data_details.cc: on_flowtable_field_edited():
 -	* glom/mode_data/box_data_list.cc: on_adddel_user_changed():
 -	Use the new output parameter instead of calling get_entered_field_data(),
 -	so that automatically-created related records are really linked from the
 -	parent record even when the ID is not on the layout.
 -	This fixes bug #526386 (Jani Monoses).
 -
 -2008-04-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc:
 -	get_related_record_exists(): Don't bother looking for a record
 -	with the key NULL, because that is not something we want to related
 -	records by.
 -	* glom/mode_data/box_data_list.cc: on_adddel_user_changed(): Get
 -	full field details for the related field, to ensure that this works
 -	properly.
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc
 -	fill_values_if_necessary(): Use Conversions::get_empty_value() instead
 -	of just creating a Gda::Value of the expected type, so we get a NULL
 -	GdaValue initially for appropriate field types.
 -
 -	This fixes the automatic creation of related records, at least when
 -	the from field is on the layout, partially fixing bug #526386
 -	(Jani Monoses).
 -
 -2008-04-15  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/mode_data/flowtablewithfields.cc
 -	  (add_layout_notebook_at_position):
 -	  Set layout item for notebook and use notebooklabelglom
 -	* glom/utility_widgets/notebookglom.cc
 -	(delete_from_layout):
 -	* glom/utility_widgets/notebookglom.h
 -	  (GLOM_UTILITY_WIDGETS_NOTEBOOK_GLOM_H):
 -	  Fixed typo in header and added delete method
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/notebooklabelglom.cc:
 -	* glom/utility_widgets/notelabelbookglom.h:
 -	Added new tab widget for notebook to be able to attach a popupmenu
 -
 -	Summary: Added popup-menu to notebook tabs to add new groups and delete
 -	the notebook.
 -
 -2008-04-14  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/adddel/adddel.h
 -	* glom/utility_widgets/adddel/adddel_withbuttons.h: Removed unnecessary
 -	virtuals on methods.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h: Removed unused
 -	signal_user_activated (though it is used in AddDel).
 -
 -2008-04-14  Murray Cumming,  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/adddel/adddel.h
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	construct_specified_columns(): Connect to the start_editing
 -	signal., on_treeview_cell_edited. Emit user_activated() on that
 -	instead of on the TreeView::button-press-event signal, so that any
 -	previous editing has already finished.
 -
 -	This fixes the relationships window, so that clicking on the To Field
 -	combo does not lose the new choice in the Table combo.
 -	Bug #526900 (Jani Monoses).
 -
 -2008-04-13  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/frame_glom.h:
 -	* glom/frame_glom.cc: create_database): Simplified the function,
 -	removed the request_password parameter. It was never set, and it
 -	seemed to be a relict from libgda-1.2.
 -	(connection_request_password_and_choose_new_database_name),
 -	(connection_request_password_and_attempt): Create the connection
 -	dialog when required, instead of loading it in the constructor, to
 -	improve startup time.
 -
 -	* glom/dialog_existing_or_new.h: Added a comment about bug #527587.
 -
 -	* glom/application.cc: recreate_database), (existing_or_new_new):
 -	Adapt to changed create_database() function in frame_glom.
 -
 -2008-04-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc fill_menu_tables(), fill_menu_reports(),
 -	fill_menu_print_layouts(): Remove the ActionGroups before recreating
 -	them to avoid warnings, and presumably to avoid the changes from
 -	being ignored. Maybe GTK+ svn trunk has become less tolerant.
 -	* glom/glom_developer.glade: Restored some GtkSourceViews, and put one
 -	in a scrolled window as it was before.
 -
 -2008-04-11  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/utils.cc: Utils::show_help): Replace gnome_help_display
 -	by constructing a path to the help file, making a ghelp: URI out of it
 -	and passing it to g_app_info_launch_default_for_uri().
 -
 -	* glom/xsl_utils.cc: GlomXslUtils::transform_and_open): Replace
 -	gnome_url_show by g_app_info_launch_default_for_uri().
 -
 -	* glom/main.cc: main): Don't call gnome_program_init().
 -
 -	* configure.in: Remove the libgnome dependency.
 -
 -2008-04-11  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/application.cc
 -	(update_userlevel_ui):
 -	* glom/application.h:
 -	* glom/mode_data/box_data_details.cc
 -	  (create_layout):
 -	* glom/mode_data/box_data_details.h
 -	Moved sidebar into "Details"-page
 -
 -	* glom/utility_widgets/sidebar.cc
 -	  (on_child_detached),(on_child_attached):
 -	* glom/utility_widgets/sidebar.h:
 -	Made sidebar detachable again and give it a correct size when detached
 -
 -2008-04-11  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/glom_developer.glade:
 -	* glom/layout_item_dialogs/dialog_buttonscript.cc
 -	  (Dialog_ButtonScript), (set_script), (get_script),
 -	  (get_script):
 -	* glom/layout_item_dialogs/dialog_buttonscript.h
 -	Added new entry for the button title to the dialog
 -
 -	* glom/mode_data/flowtablewithfields.cc
 -	(FlowTableWithFields):
 -	* glom/utility_widgets/buttonglom.cc
 -	(on_menu_properties_activate):
 -	* glom/utility_widgets/buttonglom.h:
 -	* glom/utility_widgets/labelglom.cc:
 -	* glom/utility_widgets/layoutwidgetutils.cc:
 -	* glom/utility_widgets/layoutwidgetutils.h
 -	(m_pPopupMenuUtils) (m_refUtilProperties):
 -	Removed "Details" menu item as ButtonGlom has a dialog for all properties now.
 -
 -2008-04-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* docs/user-guide/C/glom.xml: Improved the text about the initial dialog.
 -
 -	* glom/dialog_existing_or_new.cc:
 -	* glom/dialog_existing_or_new.h: Added on_existing_select_func() and
 -	on_new_select_func() select_function handlers, to prevent selection of
 -	the parent nodes, which would be meaningless.
 -
 -2008-04-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_existing_or_new.cc
 -	* glom/dialog_existing_or_new.h: Removed the second text-button column.
 -	I changed my mind about this. It doesn't feel useful - a double-click
 -	on the regular title makes more sense.
 -
 -2008-04-10  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/glom.glade: Re-set scrolledwindow shadows to IN in initial
 -	dialog since this is what other treeviews have.
 -
 -2008-04-10  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/glom.glade: Added a help button, reordered Quit/Select buttons,
 -	remove mnemonics from the tab labels as suggested by the HIG. Removed
 -	the separator and added a tooltip for the select button.
 -
 -	* glom/dialog_existing_or_new.h:
 -	* glom/dialog_existing_or_new.cc: constructor): Reordered items in
 -	existing_model, use a cell data func for the item's title so we can
 -	change the color when necessary, expand the recent items by default.
 -	Add a dummy item telling that there are no documents in this category
 -	if there are none.
 -	(on_service_found, on_service_removed): Create/Remove that dummy item
 -	accordingly.
 -	(on_stream_read): Remove the dummy item for the "New From Template"
 -	category, expand the "New From Template" category if this was the first
 -	item discovered.
 -
 -	* glom/application.cc: offer_new_or_existing): Use
 -	Utils::dialog_run_with_help() to make the Help button work.
 -
 -	* docs/user-guide/C/glom.xml: Added an initial text for the Help
 -	button of the initial dialog.
 -
 -2008-04-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc: on_linux_signal): Call the
 -	previously-set SIGSEGV handler, to hopefully make bug-buddy or apport
 -	catch (and report) crashes again.
 -
 -2008-04-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/spawn_with_feedback.h
 -	* glom/libglom/spawn_with_feedback.cc: get_and_show_pulse_dialog,
 -	  execute_command_line_and_wait,
 -	  execute_command_line_and_wait_until_second_command_returns_success):
 -	* glom/libglom/connectionpool.h
 -	* glom/libglom/connectionpool.cc:
 -	  start_self_hosting(), stop_self_hosting(), create_self_hosting():
 -	Added parent_window parameter, so that any dialogs can be transient for
 -	it.
 -
 -	* glom/application.cc on_document_load(),
 -	  stop_self_hosting_of_document_database(): Call
 -	start/stop_self_hosting() with the parent_window parameter.
 -	* glom/frame_glom.cc:
 -	  connection_request_password_and_choose_new_database_name():
 -	* glom/libglom/document/document_glom.cc:
 -	Call start/stop_self_hosting() with the parent_window parameter.
 -
 -	This should prevent these windows from being system-modal when using
 -	the xfwm4 window manager.
 -	Bug #525285 (Jani Monoses)
 -
 -2008-04-09  Johannes Schmid  <jhs gnome org>
 -
 -	* glom/glom_developer.glade:
 -	Found one more wrong change
 -
 -2008-04-09  Johannes Schmid <jhs gnome org>
 -
 -	* glom/glom_developer.glade:
 -	Fix crasher when opening GlomButton details dialog
 -
 -	* glom/utility_widgets/Makefile.am:
 - 	Move flowtable_dnd.[cch] in !GLOM_CLIENT_ONLY section
 -
 -2008-04-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc
 -	get_item_placeholder(), get_item_selected(),
 -	on_cell_layout_button_clicked(), remove_item(),
 -	on_treeview_cell_edited_bool(), on_treeview_cell_edited(),
 -	on_treeview_button_press_event(), get_last_row(),
 -	get_last_row, set_value_key(), get_is_placeholder_row,()
 -	on_cell_button_clicked(): Check that the treemodel is not null before
 -	dereferencing it.
 -	This fixes a crash when trying to add a record when there is no
 -	primary key.
 -	Bug #527007 (Jean-François Fortin Tam)
 -
 -2008-04-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtable.cc: Destructor: Remove my hack to
 -	delete child widgets, because it causes double deletes.
 -
 -2008-04-08  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/libglom/sharedptr.h
 -	(operator!): Added operator! for convenience
 -
 -	* glom/mode_data/flowtablewithfields.cc
 -	* glom/mode_data/flowtablewithfields.h:
 -	(FlowTableWithFields): Removed setup_menu()
 -	(on_menu_delete_activate): Added a confirmation dialog
 -
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/layoutwidgetmenu.cc:
 -	* glom/utility_widgets/layoutwidgetmenu.h:
 -	* glom/utility_widgets/layoutwidgetbase.cc:
 -	* glom/utility_widgets/layoutwidgetbase.h:
 -	Moved menu code from LayoutWidgetBase into it's own class
 -	(on_menupopup_activate_delete): Added a menu item to delete fields
 -
 -	* glom/utility_widgets/buttonglom.cc:
 -	* glom/utility_widgets/buttonglom.h:
 -	* glom/utility_widgets/labelglom.cc:
 -	* glom/utility_widgets/labelglom.h:
 -	Derive from LayoutWidgetUtils, removed setup_menu() call in
 -	constructors
 -
 -	* glom/utility_widgets/datawidget.h:
 -	* glom/utility_widgets/notebookglom.h:
 -	* glom/utility_widgets/layoutwidgetfield.h:
 -	Derive from LayoutWidgetMenu
 -
 -	* glom/utility_widgets/layoutwidgetutils.cc:
 -	* glom/utility_widgets/layoutwidgetutils.h:
 -	Derive from LayoutWidgetBase
 -	(on_menu_delete_activate): Added menu item to delete layout items
 -
 -	* glom/utility_widgets/placeholder-glom.cc:
 -	Removed setup_menu() call
 -
 -2008-04-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/Makefile.am:
 -	* glom/libglom/test_connectionpool.cc: Added this test.
 -
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/test_flowtable.cc: Revived this test.
 -
 -2008-04-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/fields/box_db_table_definition.cc
 -	  check_field_change(): Refuse to change a field name to one that
 -	already exists.
 -
 -2008-04-07  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/utility_widgets/flowtable.cc:
 -	Really comitted last change (was in conflict)
 -
 -2008-04-07  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/mode_data/flowtablewithfields.h:
 -	Derive from FlowTableDnd if not in CLIENT_ONLY mode
 -
 -	* glom/utility_widgets/flowtable.cc:
 -	(dnd_*) (on_dnd_*)
 -	* glom/utility_widgets/flowtable.h:
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/flowtable_dnd.cc:
 -	* glom/utility_widgets/flowtable_dnd.h:
 -	Moved drag and drop stuff into it's own class and some code cleanup
 -
 -2008-04-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/main.cc: OptionGroup, main): Use atexit(__libc_freeres)
 -	to maybe help valgrind to detect leaks.
 -	* glom/mode_data/flowtablewithfields.cc Added TODO comments about
 -	possible widget leaks.
 -	* glom/utility_widgets/adddel/adddel.cc
 -	* glom/utility_widgets/adddel/adddel.h: Use UIManager instead of
 -	MenuElems, because it seems less leaky.
 -
 -2008-04-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/adddel/adddel.cc: construct_specified_columns():
 -	Really delete the temporary TreeModelColumns to fix a leak.
 -
 -2008-04-04  Johannes Schmid  <johanens schmid openismus com>
 -
 -	* glom/glom_developer.glade:
 -	Added dialog_flowtable
 -
 -	* glom/mode_data/flowtablewithfields.cc: FlowTableWithFields,
 -	  (add_layout_group_at_position), (on_menu_properties_activate),
 -	  (on_button_press_event):
 -	* glom/mode_data/flowtablewithfields.h
 -	Added popup-menu for flowtables
 -
 -	* glom/utility_widgets/buttonglom.cc: on_button_press_event):
 -	* glom/utility_widgets/labelglom.cc: on_button_press_event):
 -	Fixed a crasher when not in developer mode
 -
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/dialog_flowtable.cc: Glom,
 -	  (set_flowtable), (get_title), (get_columns_count):
 -	* glom/utility_widgets/dialog_flowtable.h
 -	Added configuration dialog for FlowTables
 -
 -	* glom/utility_widgets/layoutwidgetutils.h (LayoutWidgetUtils):
 -	Do not derive from sigc::trackable as it's not necessary.
 -
 -2008-04-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: Fix the previous commit:
 -	treeviewcolumn_on_cell_data(): Do set the pixbuf property to NULL when
 -	it is empty, or images apear repeated on rows.
 -
 -2008-04-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	treeviewcolumn_on_cell_data(): Do not try to dereference a null pixbuf
 -	refptr. This fixes a crash when adding an image field to the list view
 -	if one of the records has no data in that field.
 -	Bug #526114 (Jani Monoses).
 -
 -2008-04-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list.cc
 -	* glom/mode_data/box_data_list.h
 -	on_dialog_layout_hide(): Override this so we can set a bool and
 -	check for this bool in create_layout_add_group(), to reset the column
 -	widths after the layout dialog has been closed. Otherwise the new
 -	columns are off the right-hand side of the scroll area, making users
 -	think that nothing has happened unless they look at the scroll bar.
 -	This is not ideal, but drag-and-drop will make this easier anyway.
 -	Bug #526046 (Jani Monoses).
 -
 -2008-04-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc
 -	* glom/libglom/connectionpool.h Added delete_instance().
 -	* glom/main.cc: main): Clean up the ConnectionPool singleton at the
 -	end, so it is not reported as a leak by valgrind.
 -
 -2008-04-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.h
 -	* glom/application.cc added a Bakery::App::add_ui_from_string() override,
 -	so we can workaround a problem with UTF8 in the UI description in
 -	gtkmm < 2.12.7.
 -	Bug #525718 (Pavel MlÄ?och)
 -
 -2008-04-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.h:
 -	Remove the GlueItem and GlueItemList classes. Store a simple int
 -	in GtkTreeIter::user_data instead of a pointer to an allocated GlueItem
 -	instance (which just stored an int now anyway).
 -	This should prevent the leak of these instances, which GtkTreeModel
 -	really really gives us no way to ever know when to free, other than
 -	when the GktTreeModel is destroyed.
 -
 -2008-04-01  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_privs.cc: Fixed the build (my previous changes did not
 -	actually compile).
 -
 -2008-04-01  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_privs.cc: get_database_users(), get_current_privs():
 -	* glom/mode_data/box_data.cc: record_new(),
 -	  get_related_record_exists): Added use of BusyCursor because these
 -	access the database.
 -
 -2008-04-01  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	on_treeview_column_clicked(): Show the busy cursor because the
 -	new SQL query can take some time.
 -
 -2008-04-01  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/Makefile.am:
 -	* glom/libglom/data_structure/foundset.cc
 -	* glom/libglom/data_structure/foundset.h: Moved FoundSet into its own
 -	file from base_db.[h|c], because I like that.
 -
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.h:
 -	* glom/base_db.cc
 -	* glom/base_db.h: Moved count_rows_returned_by() to Base_DB so we
 -	can use it elsewhere.
 -
 -	* glom/frame_glom.cc show_table(): Count the approximate number of
 -	rows expected in the list view, and do not sort them by default if
 -	it is more than 10,000. This allows Glom to show 600,000 MusicBrainz
 -	album rows now in 1 minute.
 -
 -2008-04-01  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	refresh_from_database(): Omit the ORDER BY clause when counting the
 -	number of rows from our SQL query. This is much faster.
 -
 -2008-04-01  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/notebook_glom.h
 -	* glom/notebook_glom.cc: constructor, on_show(): Delay the connection of
 -	the switch_page handler because GtkNotebook sometimes emits the signal
 -	during show().
 -	Save the sigc::connection so we can block it later.
 -	* glom/mode_data/notebook_data.cc init_db_details(),
 -	on_switch_page_handler(): Block the handling of this signal during
 -	the first initialization, to avoid an unnecessary duplicate SQL query.
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.h
 -	* glom/utility_widgets/db_adddel/db_adddel.cc
 -	 on_self_style_changed): Correct the ifndef to an ifdef so this is
 -	really only used on Maemo, preventing a third duplicate SQL query.
 -
 -2008-04-01  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_developer.glade: window_data_layout: Change window title from
 -	Details Layout to Layout because it is used for the list and the
 -	related records layout too. This string already exists elsewhere, so
 -	it should not be a problem for translators.
 -	Bug #525449 (Jani Monoses)
 -
 -2008-03-31  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/utility_widgets/flowtable.cc: on_drag_data_received):
 -	Fixed side effect of idle hack that caused that items are always
 -	inserted at the end of the flowtable when dropped.
 -
 -	* glom/utility_widgets/labelglom.cc: init):
 -	set_visible_window (false) for the eventbox to remove ugly label border.
 -
 -2008-03-31  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	constructor: Do not handle style changes, because that currently
 -	causes an extra SQL query. It is still enabled for Maemo, which needs
 -	it. We should fix this properly.
 -
 -2008-03-31  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/glom.glade:
 -	* glom/dialog_existing_or_new.h:
 -	* glom/dialog_existing_or_new.cc: Use a notebook for the two
 -	treeviews, add a Select button. Removed the signals, instead added
 -	get_action(), get_uri(), get_service_info() and get_service_name().
 -	This way, the application can hide the dialog before handling the
 -	action more easily.
 -
 -	* glom/application.h:
 -	* glom/application.cc: offer_new_or_existing(): Hide the
 -	existing_or_new dialog after having run it.
 -	existing_or_new_new(): Removed the signal handlers, but keep the
 -	action for creating a new empty document in a separate function since
 -	it is still a lot of code.
 -
 -2008-03-31  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: get_record_field_values_for_calculation():
 -	Do not show an error if the record does not exist yet. That is normal
 -	and is already dealt with by the following code. Do show an error if
 -	there is an exception.
 -	Bug #525096 (Jani Monoses)
 -
 -2008-03-31  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_developer.glade: Make return activate the default buttons
 -	when in the last entry in some dialogs, such as the initial-user/password
 -	dialog when self-hosting.
 -	Bug #525284 (Jani Monoses)
 -
 -2008-03-31  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/navigation/box_tables.cc: on_adddel_changed(): When changing the
 -	default-table column, make sure that only one row can have this checked.
 -	It should really be a radio column, but that would be more work
 -	(to work around the AddDel widget).
 -	Bug #525186 (Jani Monoses)
 -
 -2008-03-31  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/field.cc: Field::init_map():
 -	Comment out some previously-allowed conversions because postgres 8.3
 -	has become less tolerant of conversions that could not produce useful
 -	data, such as date-to-number, causing postgres errors at runtime.
 -	Bug #525188 (Jani Monoses)
 -
 -2008-03-30  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/utility_widgets/flowtable.cc
 -	(on_child_drag_motion):
 -	Fixed dragging on ComboEntryGlom and added some comments about
 -	what happens inside the widget detection.
 -
 -2008-03-30  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtable.h:
 -	dnd_remove_placeholder_idle(), dnd_remove_placeholder_real(),
 -	on_drag_leave(), on_child_drag_motion(): Allow dropping last
 -	item when mouse is over an entry or a similar HAS_WINDOW widget.
 -
 -2008-03-30  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/glom.glade:
 -	* glom/dialog_existing_or_new.h:
 -	* glom/dialog_existing_or_new.cc:
 -	* glom/Makefile.am: Redesigned initial dialog, as described in
 -	http://www.murrayc.com/blog/permalink/2007/11/29/gloms-initial-dialog.
 -
 -	* glom/application.h:
 -	* glom/application.cc: Actually use it.
 -
 -2008-03-30  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/mode_data/flowtablewithfields.cc:
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/labelglom.cc:
 -	Fixed dropping on LabelGlom which was broken due to the EventBox
 -
 -2008-03-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc
 -	create_iterator(): Always create a completely new iterator, instead of trying
 -	to return one with an existing GlueItem. A comment says that this is
 -	necessary to make operator=() work (it only compares pointers), but
 -	I do not know why a working iterator::operator=() is necessary. I guess
 -	we will find out. This was very inefficient. Glom can now show a list of
 -	60,000 records in 5 minutes instead of hours/days. There is still much
 -	room for improvement though.
 -
 -2008-03-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/navigation/box_tables.cc: fill_from_database(): Do show tables
 -	that are in the database but not in the document (hidden by default),
 -	allowing us to adapt to an existing database.
 -	on_adddel_Edit(): Do not complain about tables that are not in the
 -	document.
 -
 -2008-03-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: get_database_preferences(): Try to create the standard
 -	tables if the query fails, as a small first step in making Glom adapt to
 -	existing databases.
 -
 -2008-03-28  Johannes Schmid  <jhs idefix>
 -
 -	* glom/mode_data/flowtablewithfields.cc:
 -	Fixed expanding of LabelGlom
 -	* glom/utility_widgets/flowtable.cc:
 -	Fixed dragging on Gtk::TextView
 -
 -2008-03-27  Johannes Schmid  <jhs gnome org>
 -
 -	* glom/layout_item_dialogs/dialog_textobject.cc:
 -	* glom/layout_item_dialogs/dialog_textobject.h:
 -	Added get_textobject(reference)
 -
 -	* glom/mode_data/flowtablewithfields.cc:
 -	* glom/utility_widgets/labelglom.cc:
 -	* glom/utility_widgets/labelglom.h:
 -	Use the correct dialog for editing textobject (missed that one before...)
 -
 -2008-03-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/navigation/box_tables.cc: on_adddel_Delete(): Put quotes around
 -	the table name when doing a DROP TABLE, so we can delete tables that
 -	use upper case in their name.
 -	Bug #522233 (Pavel MlÄ?och).
 -
 -2008-03-26  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h:
 -	Remove append_newline().
 -	save_before(): Stop using append_newline() - it never worked anyway.
 -	Use add_indenting_white_space_to_node() which was just added to Bakery.
 -	This makes the .glom files have nice readable indenting again.
 -
 -2008-03-26  Johannes Schmid  <jhs gnome org>
 -
 -	* glom/mode_data/flowtablewithfields.cc:
 -	* glom/utility_widgets/dialog_layoutitem_properties.cc:
 -	* glom/utility_widgets/labelglom.cc:
 -	* glom/utility_widgets/labelglom.h:
 -	Added popup menu for LabelGlom
 -
 -	* glom/utility_widgets/dragbutton.h:
 -	Make a method const
 -
 -2008-03-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in:
 -	* docs/user-guide/C/figures: Added images from screenshots on website.
 -	* docs/user-guide/C/glom.xml: Added screenshots and some text.
 -	Added section about translations.
 -
 -2008-03-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* docs/user-guide/C/glom.xml: Added sections about defining and using
 -	reports.
 -	* glom/glom_developer.glade: Reports list: Corrected packing expanding.
 -	Added a tooltip for a checkbox.
 -
 -2008-03-22  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/glom_developer.glade:
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/buttonglom.cc:
 -	* glom/utility_widgets/buttonglom.h:
 -	* glom/utility_widgets/dialog_buttonscript.cc:
 -	* glom/utility_widgets/dialog_buttonscript.h:
 -	* glom/utility_widgets/dialog_layoutitem_properties.cc:
 -	* glom/utility_widgets/dialog_layoutitem_properties.h:
 -	* glom/utility_widgets/labelglom.h:
 -	* glom/utility_widgets/layoutwidgetutils.h:
 -
 -	Added popup-menu for buttons (and some refactoring to make it easier for other
 -	widgets)
 -
 -2008-03-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc offer_new_or_existing(): Use a URI for the
 -	examples directory instead of a filepath, sot that the examples
 -	directory is really opened in the file chooser. gnome-vfs seems to
 -	have become less tolerant of URIs without file:// at the start.
 -
 -2008-03-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/fieldtypes.cc
 -	get_string_name_for_gdavaluetype(): Hard-code the result for
 -	text fields (G_TYPE_STRING) so we always use varchar. Otherwise
 -	we mistakenly create fields of type xml because libgda reports many
 -	postgres 8.3 fields types as being of type G_TYPE_STRING.
 -
 -2008-03-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Depend on the new unstable bakery-2.6 API.
 -	* glom/application.cc:
 -	* glom/base_db.cc:
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/main.cc:
 -	* glom/xsl_utils.cc: Use giomm instead of Gnome::Vfs.
 -
 -2008-03-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/python_embed/python_module/py_glom_module.cc: initglom):
 -	Added more casts to non-const char* from static strings, to
 -	avoid warnings with Python. Python should use const char*, of course.
 -
 -2008-03-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc ui_file_select_open_with_browse():
 -	Fixed a typo in my previous commit, to fix the build.
 -
 -2008-03-13  Murray Cumming  <murrayc murrayc com>
 -
 -	Bug 521992 â?? Pressing Escape on Initial dialog does not close
 -	application properly.
 -	(Pavel MlÄ?och)
 -
 -	* glom/dialog_database_preferences.cc load_from_document():
 -	Do not crash if the Gda::DataModel is empty.
 -
 -	* glom/application.cc ui_file_select_save(), on_document_load(),
 -	  offer_new_or_existing():
 -	* glom/frame_glom.cc on_menu_file_export():
 -	* glom/utility_widgets/imageglom.cc
 -	  on_menupopup_activate_select_file(): Check for
 -	Gtk::RESPONSE_DELETE_EVENT instead of just Gtk::RESPONSE_CANCEL, so
 -	that we treat pressing Escape the same as pressing Cancel. When we
 -	just ignore this then we can leave the application in an unexpected
 -	state.
 -
 -2008-03-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc:
 -	discover_first_free_port() Reformat the code to make the use of
 -	ifdefs for various platforms clearer. Include errno.h and add a comment
 -	about how this is essential to make the code actually work.
 -	This stops Glom from starting a postgres instance on the same port that
 -	is used by an existing instance.
 -	start_self_hosting(): Set the port in the document so it is not
 -	incorrectly set again later. This fixes the problem that Glom sometimes
 -	started a server and then could not connect to it.
 -
 -2008-03-09  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool.cc: Don't try to use remembered port
 -	when m_port is 0. This broke connections to non-self-hosted database
 -	servers since the connection attempt was only performed on port 0.
 -
 -	* glom/application.cc: Set "try_other_ports" to TRUE for new documents
 -	if the document is not self-hosted. Otherwise, only port 5432 was
 -	tried, and not the other ones specefied in the ConnectionPool's
 -	constructor.
 -
 -2008-03-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/glomconversions.cc:
 -	* glom/libglom/data_structure/glomconversions.h:
 -	Added get_double_for_gda_value_numeric().
 -	* glom/base_db.cc: auto_increment_insert_first_if_necessary(),
 -	recalculate_next_auto_increment_value(),
 -	get_next_auto_increment_value():
 -	Return a GdaNumeric Gda::Value, not a string one, and
 -	do the conversion without the locale affecting it.
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	fill_values_if_necessary(): Create default values of the correct type.
 -	* glom/libglom/utils.cc:
 -	* glom/libglom/utils.h: Removed decimal_from_string() because it is
 -	no longer used.
 -	This avoids a warning about an incorrect type when adding a row in
 -	the list view.
 -
 -	* examples/example_music_collection.glom: Song table:
 -	Added Artists doubly-related fields on details and recreate this
 -	example.
 -
 -2008-03-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: offer_new_or_existing():
 -	Call connection_pool->set_get_document_func() before calling
 -	connection_request_password_and_choose_new_database_name() to
 -	avoid a (maybe harmless anyway) warning.
 -
 -2008-03-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/glomconversions.cc:
 -	get_text_for_gda_value(): Improved the warning about the unexpected
 -	value type, though I have not yet solved this (minor) problem.
 -	* glom/utility_widgets/dragbar.cc: Improve the titles in the tool
 -	pallete. And please stop using tabs in the source code.
 -
 -2008-03-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.cc:
 -	get_data_layout_groups_default(): Restored the code that creates
 -	the default layouts, which was lost somehow.
 -	Bug #517665 (Johannes Schmid).
 -
 -2008-03-04  Johannes Schmid  <jhs gnome org>
 -
 -	* glom/mode_data/box_data_details.cc:
 -	Fixed a crasher (probably related to an empty table)
 -
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/checkglom.h: (added)
 -	* glom/utility_widgets/checkglom.cc: (added)
 -	Add a popup menu to checkbutton fields
 -
 -2008-02-29  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/utility_widgets/flowtable.cc:
 -	Fixed dragging on LabelGlom
 -
 -2008-02-28  Johannes Schmid  <johannes schmid openismus com>
 -
 -	* glom/utility_widgets/dragbar.cc:
 -	* glom/utility_widgets/dragbutton.cc:
 -	* glom/utility_widgets/dragbutton.h:
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/sidebar.cc:
 -	* glom/utility_widgets/sidebar.h:
 -	Use EggToolPalette for the developer drag and drop toolbar
 -
 -  * glom/utility_widgets/eggtoolpalette: Updated to new external revision
 -
 -2008-02-25  Johannes Schmid <johannes schmid openismus com>
 -
 -	* configure.in:
 -	* glom/Makefile.am:
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/eggtoolpalette/* (external)
 -	* glom/utility_widgets/util/* (external)
 -
 -	Integrated eggtoolpalette into the build system (not used yet)
 -
 -2008-02-24  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool.cc: Pass -i instead of -h "*" to
 -	postmaster. This is equivalent, but it does not require postgres to
 -	be linked against CRT_noglob.o on Windows.
 -
 -2008-02-23  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/main.cc: Add the bin/ subdirectory to the PATH environment
 -	variable on Windows. This is where the gspawn-win32-helper.exe program
 -	required for g_spawn* is installed, and g_spawn* requires it to be in
 -	somewhere in PATH. This fixes self-hosting on machines where
 -	gspawn-win32-helper.exe is not already in the PATH.
 -
 -2008-02-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* C/glom.xml: Put the pygda appendix in its own section, instead of
 -	inside the previous appendix. Update the application version from
 -	0.8 to 1.6.
 -
 -2008-02-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.h: Moved the m_pDrag_Bar declaration to
 -	avoid a warning about initialization sequence.
 -	* glom/libglom/python_embed/py_glom_relatedrecord.cc:
 -	* glom/python_embed/glom_python.cc: Cast some static strings to
 -	gchar* because the Python C API does not use const. This avoids some
 -	warnings.
 -
 -2008-02-20  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/mode_data/box_data_details.cc:
 -	Cell set modified, when the document was modified...
 -
 -2008-02-20  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/mode_data/flowtablewithfields.cc:
 -	Use set_layout_item() on all layout element to allow to
 -	adding them at the correct place to a layout_group
 -
 -	* glom/utility_widgets/flowtable.cc:
 -	Remove some debug messages
 -
 -2008-02-20  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/utility_widgets/flowtable.cc:
 -	Allow dragging at below the last item of a group
 -
 -2008-02-19  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/mode_data/flowtablewithfields.cc:
 -	* glom/mode_data/flowtablewithfields.h:
 -	* glom/utility_widgets/flowtable.h:
 -	Added drag and drop for notebooks
 -
 -2008-02-19  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/frame_glom.cc:
 -	Fixed crasher when using Tables menu
 -
 -	* glom/glom.glade:
 -	Removed unused dialog
 -
 -2008-02-19  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/mode_data/flowtablewithfields.cc:
 -	* glom/mode_data/flowtablewithfields.h:
 -	Cleaned up dnd code in FlowTableWithFields
 -
 -2008-02-19  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/application.cc:
 -	* glom/application.h:
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	Show drag toolbar when in developer mode
 -
 -	* glom/mode_data/box_data_details.cc:
 -	Recreate layout when switching to developer mode
 -
 -2008-02-18  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/libglom/connectionpool.cc:
 -	#ifdef'd all those annoying avahi debug messages
 -
 -	* glom/libglom/data_structure/layout/layoutgroup.cc:
 -	* glom/libglom/data_structure/layout/layoutgroup.h:
 -	Added LayoutGroup::remove_item()
 -
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	Remove default layout creation as it's no longer needed when you can
 -	create your layout using drag and drop.
 -
 -	* glom/mode_data/flowtablewithfields.cc:
 -	* glom/mode_data/flowtablewithfields.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h:
 -	Fixed dragging of groups (mostly)
 -
 -	* glom/utility_widgets/dragbar.cc:
 -	* glom/utility_widgets/dragbutton.cc:
 -	* glom/utility_widgets/dragbutton.h:
 -	Use enum instead of string to determine drag type
 -
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtable.h:
 -	Set default size when in developer mode
 -
 -	* icons/16x16/Makefile.am:
 -	* icons/16x16/glom-notebook.png
 -	Added notebook icon
 -
 -2008-02-14  Armin Burgmeier  <armin openismus com>
 -
 -	* win32/querymodules.bat:
 -	* win32/build-installer:
 -	* win32/glom.iss.in: Moved most files into the bin/ subdirectory. This
 -	is because both Glom.exe and the postgres utilities need libpq.dll,
 -	but the postgres utilities need to be in the bin/ subdirectory to find
 -	their shared files. With this, the installer also works for me on a
 -	machine that does not already have Python, GTK, etc. installed.
 -
 -2008-02-11  Armin Burgmeier  <armin openismus com>
 -
 -	* win32/build-installer:
 -	* win32/glom.iss.in: Add all required python files. I would like to
 -	put them into a separate python/ directory, but did not get it to find
 -	them there. They are put into the main application directory for now.
 -
 -2008-02-09  Armin Burgmeier  <armin openismus com>
 -
 -	* win32/build-installer:
 -	* win32/glom.iss.in: Added some missing DLLs and gda and glom python
 -	modules.
 -
 -2008-02-05  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool.cc: Fixed a 'non-void function does not
 -	return a value' warning in
 -	ConnectionPool::check_postgres_is_available_with_warning().
 -
 -	* glom/layout_item_dialogs/dialog_buttonscript.cc: Use a monospace
 -	font for the python script text field. Coding is much more convenient
 -	with a monospace font.
 -
 -2008-02-04  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool.cc: Try finding postgres binaries in
 -	bin/ first. The installer installs them there because they do not find
 -	the shared data they need otherwise.
 -
 -	* icons/Makefile.am:
 -	* icons/win32/Makefile.am: Include the glom.ico in the distribution.
 -
 -	* glom/Makefile.am: Link glom.exe with the -mwindows flag on Windows
 -	so that starting glom does not start a console window additionally.
 -
 -	* win32/glom.iss.in: The script to create the Windows installer with
 -	InnoSetup (http://www.innosetup.org). It is a .in files so that
 -	configure automatically sets the correct Glom version in it.
 -
 -	* win32/querymodules.bat: Batch file the installer uses to register
 -	pango modules, gdk pixbuf loaders and GTK+ input methods.
 -
 -	* win32/build-installer: Tool I use to gather all files for the
 -	installer. It is currently verify specific to my own build setup.
 -
 -	* win32/Makefile.am: Include these files with make dist.
 -
 -	* Makefile.am: Add win32 to SUBDIRS.
 -	* configure.in: Create win32/Makefile, win32/glom.iss and
 -	icons/win32/Makfile.
 -
 -2008-02-03  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/glade_utils.h:
 -	* glom/main.cc: Adjust paths of glade files and locales to match the
 -	path the (yet to come) installer installs them.
 -
 -	* glom/libglom/connectionpool.cc: Pass the -L flag with a path
 -	relative to the glom executable (where the installer will install it)
 -	to initdb on Windows so that it finds necessary files that are
 -	normally available in /usr/share/postgresql/.
 -
 -2008-02-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/layout_item_dialogs/dialog_field_summary.cc: on_button_field():
 -	Pass the correct parameter to avoid a use of an uninitialized value.
 -	* glom/libglom/data_structure/layout/report_parts/layoutitem_fields_summary.cc:
 -	Constructor: Initialize a member variable to avoid a use of an
 -	uninitialized value.
 -	This fixed the crashes in bug #513927 (Göran)
 -
 -2008-01-31  Armin Burgmeier  <armin openismus com>
 -
 -	* icons/win32/glom.ico: Added 48x48 glom.ico to be used as icon for
 -	glom.exe.
 -	* glom/glom.rc: Added resource file containing glom.ico.
 -	* glom/Makefile.am: Link resource file into glom.exe.
 -
 -2008-01-31  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/main.cc: Load translations relative to glom.exe on Windows.
 -
 -2008-01-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc: on_flowtable_script_button_clicked():
 -	Make sure that we send the primary key value when refreshing after a button
 -	was clicked. This fixes the bug that most of the fields were blanked after
 -	clicking a button.
 -
 -2008-01-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.cc: load_after_layout_item_field():
 -	Call set_full_field_details() on the layout item, so we load the correct
 -	formatting for that field type. For instance, this means we do not lose
 -	the multiline formatting option when loading.
 -	Thanks to Göran (TEK-en) for finding this bug.
 -
 -2008-01-28  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/spawn_with_feedback.cc: Set IOChannel that reads stderr
 -	from child process to be nonblocking to make sure we don't block the
 -	whole process.
 -
 -2008-01-27  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/glade_utils.h: Added Utils::get_glade_file_path() to
 -	locate the glade file relative to the application executable on
 -	Windows.
 -
 -	* glom/dialog_invalid_data.cc:
 -	* glom/libglom/spawn_with_feedback.cc:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/frame_glom.cc:
 -	* glom/layout_item_dialogs/dialog_field_layout.cc:
 -	* glom/layout_item_dialogs/dialog_group_by.cc:
 -	* glom/reports/dialog_layout_report.cc:
 -	* glom/translation/window_translations.cc:
 -	* glom/base_db.cc:
 -	* glom/main.cc:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/flowtablewithfields.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/filechooser_export.cc:
 -	* glom/application.cc:
 -	* glom/mode_design/script_library/dialog_script_library.cc:
 -	* glom/mode_design/users/dialog_users_list.cc:
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/print_layouts/dialog_text_formatting.cc:
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc: Use
 -	Utils::get_glade_file_path() to load the glade files.
 -
 -2008-01-26  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/dialog_progress_creating.h:
 -	* glom/libglom/dialog_progress_creating.cc: Added a run() method so
 -	that we can show it without the ugly while(Gtk::Main::events_pending())
 -	Gtk::Main::iteration().
 -
 -	* glom/libglom/spawn_with_feedback.cc: Rewrote
 -	execute_command_line_and_wait_until_second_command_returns_success()
 -	so that it does not block the UI, does not run into an endless loop if
 -	the first command fails, and shows a useful error message in that
 -	case.
 -
 -	* glom/libglom/connectionpool.cc: Locate postgres executables via
 -	Glib::find_program_in_path() on Windows, because hardcoding the path
 -	to the postgres utils does not work. Use "postgres.exe" instead of
 -	"postmaster.exe" on Windows because the postgres installer does not
 -	install postmaster.exe (which is deprecated since postgresql 8.2).
 -
 -2008-01-25  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -
 -	Fixed two crasher related to working with empty layout/empty tables
 -
 -2008-01-21  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/libglom/document/document_glom.cc:
 -	Fixed crasher in case there is no default layout group
 -
 -	* glom/utility_widgets/flowtable.cc:
 -	Avoid division by zero
 -
 -2008-01-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in:
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/calendar/Makefile.am:
 -	* glom/utility_widgets/calendar/README:
 -	* glom/utility_widgets/calendar/glomcalendar.cc:
 -	* glom/utility_widgets/calendar/glomcalendar.h:
 -	* glom/utility_widgets/calendar/glomgtkcalendar.c:
 -	* glom/utility_widgets/calendar/glomgtkcalendar.h:
 -	Added copied (and renamed) versions of Gtk::Calendar and
 -	GtkCalendar with the new details callback function,
 -	instead of depending on unreleased/unstable GTK+ and gtkmm.
 -
 -2008-01-17  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/mode_data/flowtablewithfields.cc:
 -	* glom/utility_widgets/flowtable.cc:
 -
 -	Fixed some odd dragging bug and removed dialogs for
 -	new buttons/label. Use Developers->Layout instead to
 -	change the appearance of newly added items.
 -
 -2008-01-17  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connection_pool.h:
 -	* glom/libglom/connection_pool.cc: Added
 -	ConnectionPool::get_try_other_ports().
 -
 -	* glom/frame_glom.cc: Fixed connection proceduce after creating new
 -	self-hosted database by setting port and try_other_ports into in the
 -	document. These settings are later used for the connection. If we
 -	don't do that, port is 0 and we can't connect.
 -
 -2008-01-14  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/utility_widgets/dragbutton.cc:
 -	Setup drag source correctly.
 -
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtable.h:
 -	Fixed placeholder expanding
 -	Support dragging on child widgets (at least GtkEntry's for now)
 -
 -2008-01-13  Armin Burgmeier  <armin openismus com>
 -
 -	* configure.in: Disable the --with-postgres-utils options on Windows
 -	because it does not make sense to hardcode paths on Windows. We use
 -	Glib::find_program_in_path to locate the postgres executables.
 -
 -	* glom/libglom/connectionpool.h:
 -	* glom/libglom/connectionpool.cc: Severial windows fixes: Don't use
 -	libepc, locate postgres programs using Glib::find_program_in_path,
 -	quote path to executables, use closesocket() instead of close().
 -
 -	* glom/libglom/spawn_with_feedback.cc: Fixed typo.
 -
 -	* glom/Makefile.am: Changed library linking order so linking developer
 -	mode on Windows succeeds.
 -
 -2008-01-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Depend on the latest version of libgda, because we
 -	use the new Gda::Value::get_ulong() method. Thanks to Rohit Agrawal.
 -
 -2008-01-04  Johannes Schmid <jhs gnome org>
 -
 -	* glom/utility_widgets/flowtable.cc:
 -	Cleaned-up setup_dnd() code and fix a very stupid
 -	bug in column calculation
 -
 -2008-01-02  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/utility_widgets/cellrendererlist/cellrendererlist.h:
 -	* glom/utility_widgets/cellrendererlist/cellrendererlist.cc:
 -	* glom/utility_widgets/cellrendererlist/Makefile.am
 -	* configure.in: Moved cellrendererlist to this subdirectory.
 -
 -	* glom/mode_data/flowtablewithfields.h:
 -	* glom/mode_data/flowtablewithfields.cc: Moved the FlowTableWithFields
 -	class from utility_widgets to mode_data. mode_data is the only one who
 -	uses this, and this way, utility_widgets do no longer depend on
 -	mode_data. This is necessary to link libglom dynamically on Windows.
 -
 -	* glom/Makefile.am: Added
 -	utility_widgets/cellrendererlist/libutility_widgets_cellrendererlist.a
 -	to LDADD.
 -
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/mode_data/Makefile.am: Changed list of source files
 -	accordingly.
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	* glom/mode_data/box_data_details.h: Changed include paths
 -	accordingly.
 -
 -	* glom/libglom/Makefile.am: Link libglom dynamically on Windows. This
 -	requires also the latest versions of libgdamm, gnome-vfsmm, gconfmm
 -	and bakery because earlier versions do not create a shared library on
 -	Windows, and shared libraries cannot be linked against static ones.
 -
 -	* glom/python_embed/python_module/Makefile.am: Rename the python glom
 -	module from glom.dll to glom.pyd on Windows when installing because
 -	python does not find the module when it does not end on .pyd. These
 -	.pyd files are simply renamed DLLs.
 -
 -2007-12-30  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtable.h:
 -	Allow dragging on child widgets that use their own GdkWindow. This
 -	works for GlomImage now but still needs some work for GlomEntrys and
 -	other widgets.
 -
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	Don't put child flowtables into Gtk::EventBox because it's useless
 -
 -2007-12-29  Armin Burgmeier  <armin openismus com>
 -
 -	* configure.in: Require latest libepc on both maemo and non-maemo.
 -
 -	* glom/application.cc: Fixed an #ifdef at the wrong position so the
 -	application's menu is fully populated in client-only mode.
 -
 -2007-12-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_document.dtd: Several corrections and improvements. This is not
 -	quite finished yet.
 -
 -2007-12-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_document.dtd: Updated and corrected DTD with documentation
 -	comments. This was completed by Nicholas Sinnott-Armstrong (novanasa),
 -	as a Google Highly-Open Participation (GHOP) task (GNOME GHOP task 49).
 -	This is for documentation (or utilities) - we do not actually validate the
 -	.xml so that we can be as liberal as possible when loading documents.
 -
 -2007-12-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/glomconversions.cc: get_text_for_gda_value():
 -	Return escaped text for images, instead of using to_string(). This fixes the
 -	loading of images from the document, so they are not lost when closing the
 -	document.
 -
 -2007-12-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/canvas/canvas_image_movable.cc:
 -	* glom/utility_widgets/canvas/canvas_item_movable.h: scale_to_size():
 -	Set the size again after setting the pixbuf, to preserve the size.
 -	* glom/utility_widgets/canvas/canvas_group_resizable.cc:
 -	* glom/utility_widgets/canvas/canvas_group_resizable.h:
 -	Added (and emitted) signal_resized().
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc:
 -	* glom/mode_design/print_layouts/canvas_layout_item.h:
 -	Handle signal_resized() to rescale images when they are resized.
 -
 -2007-12-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/canvas/canvas_image_movable.cc:
 -	* glom/utility_widgets/canvas/canvas_image_movable.h: Store the
 -	original pixbuf and use it in a new scale_to_size() method.
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc:
 -	set_layout_item(): Call scale_to_size() on images, after setting the
 -	size.
 -
 -2007-12-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/canvas/canvas_item_movable.cc:
 -	cast_to_movable(), cast_to_item(): Make these handle
 -	CanvasGroupResizable too, causing snap-to-grid to work again,
 -	though it seems to only work for moving, and not for resizing.
 -
 -2007-12-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: offer_imageobject(): Add show_title bool, like
 -	offer_textobject() alread has.
 -	* glom/glom_developer.glade: Correct the title of the choose image
 -	dialog.
 -	* glom/layout_item_dialogs/dialog_imageobject.cc:
 -	* glom/layout_item_dialogs/dialog_imageobject.h: set_layout_item():
 -	Add show_title bool and hide the title if it is true.
 -	* glom/libglom/data_structure/layout/layoutitem_image.cc:
 -	* glom/libglom/data_structure/layout/layoutitem_image.h: Added
 -	get_image_as_pixbuf() for convenience.
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc:
 -	set_layout_item(): Actually show the image from the layout item.
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	on_context_menu_edit(): Handle image objects.
 -
 -2007-12-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	* glom/mode_design/print_layouts/window_print_layout_edit.h:
 -	Remove m_drop_x and m_drop_y: They are useless now that we don't use
 -	the menu signal handler when dropping.
 -	create_empty_item(): Set appropriate sizes for the new items.
 -
 -2007-12-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc:
 -	* glom/mode_design/print_layouts/canvas_layout_item.h:
 -	Added remove_empty_indicators() to remove the missing-image icon from empty
 -	static image items.
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc: fill_with_data():
 -	Call remove_empty_indicators() so that the missing-image icons are not seen
 -	when printing.
 -
 -2007-12-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/canvas/canvas_image_movable.cc:
 -	* glom/utility_widgets/canvas/canvas_image_movable.h: Added set_image() and
 -	set_image_empty(), which adds a MISSING_IMAGE stock icon.
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc: set_layout_item():
 -	Use set_image_empty().
 -
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	* glom/mode_design/print_layouts/window_print_layout_edit.h:
 -	on_canvas_drag_data_received(): After a drop, delete the temporary canvas
 -	item shown during drag motion.
 -	Added on_canvas_drag_leave(), so we can delete the temporary item when the
 -	user drags out of the canvas without doing a drop.
 -
 -2007-12-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	* glom/mode_design/print_layouts/window_print_layout_edit.h:
 -	Added create_empty_item() to avoid duplicate code for the various ways to add
 -	new items. For instance, when dragging from the toolbar, actually put some text
 -	in the text item so that something is visible.
 -	We still need to make empty images and portals visible somehow.
 -
 -2007-12-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	Constructor: Do not use the drag_dest_set() default flag values,
 -	because they prevent us from really using our own callbacks, and actually
 -	cause a pointer grab when trying to get the data during a drag-motion event.
 -	on_canvas_drag_drop(): Call drag_get_data(), because we are no longer
 -	using DEST_DEFAULT_DROP (via DEST_DEFAULT_ALL), which previously did
 -	this for us.
 -
 -2007-12-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc: Constructor:
 -	* glom/utility_widgets/datawidget.cc: Constructor:
 -	Added tooltip text for navigation buttons and the Open and Find buttons
 -	next to IDs.
 -
 -2007-12-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Depend on the latest libepc.
 -	* glom/libglom/connectionpool.cc: Use the new functions to
 -	avoid duplicate libepc services.
 -
 -2007-12-16  Johannes Schmid <jhs gnome org>
 -
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtable.h:
 -	Fixed drag&drop code to have a much better user-experience. The
 -	items should now be dropped more accurate at the mouse-pointer position
 -	and the placeholder is drawn there, too.
 -
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/flowtablewithfields.h:
 -	* glom/utility_widgets/dragbar.cc:
 -	Removed the DragButton for LayoutItem Image because it does not make sense
 -	without an associated field.
 -
 -2007-12-12  Johannes Schmid <jhs gnome org>
 -
 -	* glom/utility_widgets/placeholder-glom.cc:
 -	* glom/utility_widgets/placeholder-glom.h:
 -
 -	Rewrote placeholder widget as a custom widget to get a better appearence
 -	when dragging.
 -
 -2007-12-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	Constructor: Call drag_dest_set() instead of
 -	m_canvas.drag_dest_set(m_drag_targets), which seems to allow us
 -	to call drag_get_data() in our drag_motion signal handler.
 -	on_canvas_drag_data_received(): Always call drag_status() when
 -	this is during drag_motion, rather than only the first time,
 -	so that we keep getting drag_motion signals.
 -
 -2007-12-10  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/glom.glade:
 -	Fixed Bug 502570 â?? remove gtk-ok gtk-cancel from translation
 -
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -
 -	Removed some debugging code
 -
 -2007-12-07  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/glom.glade:
 -	Added dialog for new fields
 -
 -	* glom/libglom/data_structure/layout/layoutgroup.cc:
 -	add_item() should add before - not after the item, at least for dnd
 -
 -	* glom/utility_widgets/dragbar.cc:
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtable.h:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/flowtablewithfields.h:
 -	Added drag buttons for text, image and button
 -	Fix crasher in dnd code
 -
 -	* icons/16x16/Makefile.am:
 -	* icons/16x16/glom-button.png:
 -	* icons/16x16/glom-text.png:
 -	* icons/16x16/glom-image.png:
 -
 -	Added new icons (from glade3)
 -
 -2007-12-07  Johannes Schmid <johannes schmid openismus com>
 -
 -	* configure.in:
 -	* glom/Makefile.am:
 -	Merged maemo-launcher changes from glom-1.6 branch
 -
 -2007-12-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/appstate.cc: Fix an ifdef to allow us to go into developer mode
 -	again in normal not-client-only mode.
 -
 -2007-12-04  Armin Burgmeier  <armin openismus com>
 -
 -	* acinclude.m4: Change the the python library finder so that is also
 -	finds libpythonMAJORMINOR.* instead of libpythonMAJOR.MINOR.*, because
 -	the former is used on windows.
 -
 -	* configure.in: Don't require avahi, iso-codes and libepc on Windows,
 -	made goocanvasmm nonoptional because it is needed for the printing
 -	stuff.
 -
 -	* glom/frame_glom.h:
 -	* glom/libglom/connectionpool.h:
 -	* glom/libglom/spawn_with_feedback.cc:
 -	* glom/libglom/connectionpool.cc:
 -	* glom/utility_widgets/flowtable.h:
 -	* glom/utility_widgets/flowtablewithfields.h:
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/placeholder-glom.cc:
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/frame_glom.cc:
 -	* glom/application.h:
 -	* glom/application.cc: Clientonly and Windows build fixes.
 -
 -	* glom/python_embed/python_module/Makefile.am:
 -	* glom/libglom/Makefile.am:
 -	* glom/Makefile.am:
 -	* Makefile.am: Do not link against -lutil on Win32, because there is
 -	no such library, and it does not seem to be needed. Link libglom
 -	statically on Windows for now.
 -
 -2007-12-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/utility_widgets/filechooserdialog_saveextras.cc:
 -	* glom/utility_widgets/flowtablewithfields.cc: Replace more hard-coded 6 spacing
 -	with our constant, so it is less on Maemo.
 -
 -2007-12-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: on_document_load(): Call set_get_document_func() earlier
 -	so that the connection pool always has it.
 -	* glom/libglom/connectionpool.cc: connect(): Start avahi publihsing here if it has
 -	not already been started, so we publish databases that are centrally-hosted too.
 -	However, we need to do this only for the first user.
 -	on_sharedconnection_finished(): stop avahi.
 -
 -2007-12-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list_related.cc: create_layout_get_layout(),
 -	get_fields_to_show():
 -	* glom/mode_data/dialog_layout_list_related.cc: update_ui():
 -	Do not try to insert at position 0 of an empty std::vector, to prevent crashes.
 -	I introduced this problem on 2007-11-17.
 -
 -2007-12-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/application.h: ui_file_select_open_with_browse(),
 -	open_browsed_document(): Remove the BrowsedServer inner class and instead use
 -	EpcServiceInfo and a service_name string. This reduces the amount of code.
 -
 -2007-12-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: open_browsed_document(): Adapt to the latest
 -	libepc API, using the EpcServiceInfo object.
 -
 -2007-12-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Rename --disable-doc to --disable-doc-utils to be
 -	clearer, and move the check lower in configure.ac because it was
 -	somehow causing the check for pkg-config to fail.
 -
 -2007-12-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in:
 -	* Makefile.am: Added --disable-doc configure option, because
 -	Maemo has no gnome-doc-utils. This was copied partly from Ekiga.
 -
 -2007-12-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/Makefile.am:  Mention dragbar.h to fix the
 -	dist.
 -	* icons/16x16/Makefile.am: Dist pixmaps_DATA.
 -
 -2007-12-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/Makefile.am: Mention dragbar.h to fix the
 -	dist.
 -
 -2007-12-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade: Remove dialog_connection_error.
 -	* glom/application.cc:
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h: Replace use of dialog_connection_error
 -	with Utils::show_ok_dialog(), so we can use a Hildon::Note
 -	on Maemo.
 -
 -2007-12-01  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/appstate.cc: Constructor: Make sure that we
 -	default to operator mode for client-only mode.
 -	* glom/glom.glade:
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h: Hide the footer (user level and found count)
 -	in Maemo build.
 -
 -	* glom/dialog_glom.cc:
 -	* glom/mode_find/box_data_list_find.cc:
 -	* glom/utility_widgets/flowtablewithfields.cc: Replace some padding
 -	and spacing with the constants, so we save space in the Mameo build.
 -
 -2007-12-01  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Check for glibmm 2.14.1, because only a libgdamm built with
 -	that can create the iter-only treemodel.
 -
 -2007-11-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h: Use epc_shell_set_progress_hooks()
 -	to show some UI while generating certificates during a first run.
 -
 -2007-11-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc: stop_self_hosting():
 -	Use the -m fast option with pg_ctl to avoid waiting for clients to
 -	disconnect first.
 -	This seems to fix bug #420962 (Craig Keogh, Denis Leroy, Perriman)
 -
 -2007-11-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h: Added get/set_try_other_ports().
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h: Added get/set_connection_try_other_ports(),
 -	and saved it.
 -	* glom/dialog_connection.cc: connect_to_server_with_connection_settings():
 -	Use try_other_ports from the document.
 -	* glom/application.cc: open_browsed_document(): Set try_other_ports in the
 -	document (It is not really needed in the on-disk XML, but this is the easiest
 -	place to pass that information).
 -	This should prevent us from opening a different postgres server on the same
 -	host when connecting via browse network.
 -
 -2007-11-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: on_document_load(): When starting self-hosting,
 -	remember the port used and specify it again when connecting to the self-hosted
 -	postgres database, to avoid connecting to another postgres server running on
 -	the same machine which happens to have the same database name in it.
 -	Confused the hell out of me.
 -
 -2007-11-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: open_browsed_document(): Check for
 -	SOUP_STATUS_UNAUTHORIZED as well as SOUP_STATUS_FORBIDDEN because I
 -	have started getting this.
 -	* glom/application.h: Remove some unnecessary virtuals from methods.
 -
 -2007-11-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h: Added get/set_port().
 -	Store the port after it has been used successfully.
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h: Added get/set_connection_port(),
 -	so we can try to use the same port as last time, to save time, and to
 -	avoid connecting to some other postgres server on the same host.
 -
 -2007-11-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_connection.cc:
 -	* glom/dialog_connection.h: Added set_connect_to_browsed(), which dims the
 -	host name.
 -	* glom/application.cc:
 -	* glom/application.h: ui_file_select_open_with_browse(): Store the service name
 -	(the database name) and show it in the connection dialog in open_browsed_document().
 -
 -2007-11-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: open_browsed_document(): Replace the host name
 -	if it is localhost, because our localhost is not the same as the localhost of
 -	the publisher.
 -
 -2007-11-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc:
 -	on_publisher_document_authentication(): Try to connect to the database
 -	with the username/password, so we know whether they are correct.
 -
 -	* glom/dialog_connection.cc:
 -	* glom/dialog_connection.h: Added set_username() and
 -	set_password(), so we can reuse this code to connect,
 -	even without showing the dialog.
 -	* glom/application.cc:
 -	* glom/application.h: open_browsed_document():
 -	Ask for the usernmame and password before trying to
 -	get the document over the network. Store the
 -	username and password temporarily so we do not need
 -	to ask the user again in on_document_load().
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h: connection_request_password_and_attempt():
 -	Added known_username and known_password string parameters, and do not
 -	show the dialog if they are known already.
 -	This seems to work.
 -
 -	* glom/libglom/Makefile.am:
 -	* glom/libglom/glade_utils.h: Added this and moved the
 -	glade_* convenience templates into it.
 -
 -2007-11-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/glomconversions.cc:
 -	convert_value(): Deal with gint values specially, because
 -	we usually really do want to convert gints to GdaNumerics,
 -	though we do use gints for some serial keys.
 -        (I think, but maybe not anymore.)
 -	* glom/python_embed/glom_python.cc:
 -	glom_evaluate_python_function_implementation(): Make sure that
 -	the we return an appropriate value type, by calling
 -	convert_value(), because pygda_value_from_pyobject() would not
 -	necessarily return exactly what we want.
 -	This seems to fix bug #499459 (Perriman) so that numeric
 -	calculations do not cause SQL errors in non-English locales.
 -
 -2007-11-25  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h: Connected an authentication handler for the
 -	publisher, but it needs the full password to try a postgres connection.
 -
 -2007-11-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h: get/set_userlevel(): Do not
 -	allow developer mode if the document was opened over the network via browse.
 -	That would require writing of the original document. That is a feature for the
 -	future maybe.
 -	* glom/frame_glom.cc: on_menu_userlevel_Developer(): Warn when trying to
 -	enter developer mode.
 -	* glom/application.cc: When opening from browse, explicitly set the user
 -	level to operator and update the UI, though I feel this should be automatic.
 -
 -2007-11-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h: Added get/set_opened_from_browse().
 -	* glom/application.cc: on_menu_file_open(): Use set_opened_from_browse().
 -	offer_new_or_existing(): Check get_opened_from_browse() so we don't think it
 -	failed just because there is no URI, so we don't offer the window again.
 -
 -2007-11-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: Fix the double free, but for some reason it shows the initial
 -	dialog again.
 -
 -2007-11-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h: Added save_and_get_content(),
 -	so I can manipulate a temporary copy of the document and then load it properly.
 -	* glom/application.cc:
 -	on_menu_file_open(): When openeing a browsed document, use a temporary instance
 -	of the document class (incredibly inefficiently) to mark the document as
 -	not self-hosted. This now actually opens the file, but then it crashes with a
 -	double free warning.
 -
 -2007-11-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: Don't provide the service type twice to
 -	aui_service_dialog_set_browse_service_types(), so we don't get
 -	an unnecessary type column.
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h: avahi_start_publishing():
 -	Mention the document name in the published service name, to make
 -	browsing more sensible.
 -
 -2007-11-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h: Added set_get_document_func().
 -	This avoids us having to link to the application (not in libglom)
 -	to get the document from it.
 -	avahi_start_publishing(): Publish the document contents via a
 -	callback, though this needs a change in libepc to copy the data.
 -
 -	* configure.in: Depend on avahi-ui, so we can show the
 -	browse dialog.
 -	* glom/application.cc:
 -	* glom/application.h:
 -	Added ui_file_select_open_with_browse() which adds a browse
 -	network button to the file chooser dialog and then gets the server
 -	details after asking the user to browse.
 -	on_menu_file_open(): Use ui_file_select_open_with_browse() instead
 -	of regular ui_file_select_open(). Use the new
 -	Bakery::App_WithDoc::open_document_from_data() if opening over the
 -	network.
 -
 -2007-11-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/application.h: Rearrange code to reduce the number of
 -	ifdefs.
 -	* glom/utility_widgets/Makefile.am: Do not build
 -	filechooserdialog_saveextras.[h|cc] in client-only mode.
 -
 -2007-11-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/filechooserdialog.cc:
 -	* glom/utility_widgets/filechooserdialog.h: Rename this to:
 -	* glom/utility_widgets/filechooserdialog_saveextras.cc:
 -	* glom/utility_widgets/filechooserdialog_saveextras.h:
 -	because I want to add another custom one for loading.
 -
 -2007-11-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in:
 -	* glom/libglom/Makefile.am:
 -	* glom/libglom/avahi_publisher.cc:
 -	* glom/libglom/avahi_publisher.h: Remove this.
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h: Replace the old
 -	AvahiPublisher with use of libepc.
 -	As before, it currently just advertizes the service,
 -	but soon it will publish the .glom file.
 -
 -2007-11-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Makefile.am:
 -	* glom/layout_item_dialogs/Makefile.am:
 -	* glom/libglom/Makefile.am:
 -	* glom/libglom/data_structure/Makefile.am:
 -	* glom/libglom/data_structure/layout/Makefile.am:
 -	* glom/libglom/data_structure/layout/report_parts/Makefile.am:
 -	* glom/libglom/document/Makefile.am:
 -	* glom/libglom/python_embed/Makefile.am:
 -	* glom/mode_data/Makefile.am:
 -	* glom/mode_design/Makefile.am:
 -	* glom/mode_design/fields/Makefile.am:
 -	* glom/mode_design/print_layouts/Makefile.am:
 -	* glom/mode_design/script_library/Makefile.am:
 -	* glom/mode_design/users/Makefile.am:
 -	* glom/mode_find/Makefile.am:
 -	* glom/navigation/Makefile.am:
 -	* glom/python_embed/Makefile.am:
 -	* glom/python_embed/python_module/Makefile.am:
 -	* glom/relationships_overview/Makefile.am:
 -	* glom/reports/Makefile.am:
 -	* glom/translation/Makefile.am:
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/adddel/Makefile.am:
 -	* glom/utility_widgets/adddel/eggcolumnchooser/Makefile.am:
 -	* glom/utility_widgets/canvas/Makefile.am:
 -	* glom/utility_widgets/db_adddel/Makefile.am:
 -	Use AM_CPPFLAGS instead of the deprecated INCLUDES.
 -
 -2007-11-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Depend on the latest Bakery.
 -
 -2007-11-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/layout/layoutgroup.cc:
 -	* glom/libglom/data_structure/layout/layoutgroup.h:
 -	Remove add_item(item, sequence). Added add_item(item, item at position);
 -        Removed remove_item(). Removed m_sequence.
 -	Use a vector of items instead of a map.
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h: Do not load or save the
 -	layout item sequence number. Just use the sequence in the XML file.
 -
 -	* glom/application.cc:
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/filechooser_export.cc:
 -	* glom/filechooser_export.h:
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	* glom/layout_item_dialogs/dialog_group_by.cc:
 -	* glom/layout_item_dialogs/dialog_groupby_secondaryfields.cc:
 -	* glom/layout_item_dialogs/dialog_groupby_secondaryfields.h:
 -	* glom/layout_item_dialogs/dialog_groupby_sortfields.cc:
 -	* glom/layout_item_dialogs/dialog_notebook.cc:
 -	* glom/libglom/data_structure/layout/layoutitem.cc:
 -	* glom/libglom/data_structure/layout/layoutitem.h:
 -	* glom/libglom/data_structure/layout/layoutitem_portal.cc:
 -	* glom/libglom/sharedptr.h:
 -	* glom/libglom/test_sharedptr_layoutitem.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_export.cc:
 -	* glom/mode_data/dialog_layout_export.h:
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/mode_design/users/dialog_user.cc:
 -	* glom/mode_design/users/dialog_users_list.cc:
 -	* glom/reports/dialog_layout_report.cc:
 -	* glom/reports/report_builder.cc:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/flowtablewithfields.h:
 -	Adapt to the new LayoutGroup API. This is now much simpler - we don't have
 -	to worry about the sequence number of keeping the two copies of it in sync.
 -
 -2007-11-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	on_dnd_add_layout_item(): Copy/adjust lots of already-ugly
 -	ugly code from on_datawidget_layout_item_added() to update
 -	the group's list of child items, so that the layout is really
 -	saved in the document.
 -	Both these functions need to be improved and partly combined.
 -
 -2007-11-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtable.h:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	More whitespace fixes.
 -
 -2007-11-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/application.h:
 -	* glom/utility_widgets/dragbar.cc:
 -	* glom/utility_widgets/dragbar.h:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/placeholder-glom.cc:
 -	* glom/utility_widgets/placeholder-glom.h:
 -	* glom/utility_widgets/sidebar.cc:
 -	* glom/utility_widgets/sidebar.h: Corrected inconsistent
 -	whitespace. Do not use tabs.
 -
 -2007-11-16  Andre Klapper  <a9016009 gmx de>
 -
 -	* glom/box_db_table_relationships.cc:
 -	* glom/glom_developer.glade:
 -	Added translator comments to fix bug #497188.
 -
 -2007-11-16  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/application.cc:
 -	* glom/application.h:
 -	* glom/glom.glade:
 -
 -	Added SideBar API
 -
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -
 -	Show drag sidebar when in developer mode
 -
 -	* glom/libglom/data_structure/layout/Makefile.am:
 -	* glom/libglom/data_structure/layout/layoutitem_placeholder.cc:
 -	* glom/libglom/data_structure/layout/layoutitem_placeholder.h:
 -
 -	Added Placeholder Layoutitem for use in drag & drop preview code
 -
 -	* glom/utility_widgets/sidebar.cc:
 -	* glom/utility_widgets/sidebar.h:
 -	* glom/utility_widgets/dragbar.cc:
 -	* glom/utility_widgets/dragbar.h:
 -	* glom/utility_widgets/dragbutton.cc:
 -	* glom/utility_widgets/dragbutton.h:
 -	Added sidebar base class and sidebar for dnd code
 -
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/datawidget.h:
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtable.h:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/flowtablewithfields.h:
 -	* glom/utility_widgets/placeholder-glom.cc:
 -	* glom/utility_widgets/placeholder-glom.h:
 -	* glom/utility_widgets/test_flowtable.cc:
 -
 -	Drag & Drop layout
 -	(see http://www.glom.org/wiki/index.php?title=Development/Plans/DragAndDropLayout)
 -	and #358092)
 -
 -	* icons/16x16/Makefile.am:
 -	* icons/glom-field.png:
 -	* icons/glom-group.png:
 -
 -	Added sidebar icons (stolen from glade-3...)
 -
 -2007-11-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_developer.glade:
 -	* glom/libglom/data_structure/layout/layoutitem_notebook.cc:
 -	* glom/libglom/spawn_with_feedback.cc:
 -	* glom/main.cc:
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	* glom/translation/window_translations.cc:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	Added translator comments and fixed typos from bug #497188.
 -	(Andre Klapper)
 -
 -2007-11-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	construct_specified_columns(): Use the font, foreground-color,
 -	and background-color settings for the list view too.
 -
 -2007-11-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/layoutwidgetbase.cc:
 -	apply_formatting(): Use the correct widget color
 -	properties to really set the foreground text color and
 -	background color.
 -
 -2007-11-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Makefile.am: Add an extra repeated link line.
 -	* glom/frame_glom.h: Remove the horrible extra member
 -	variable hack around that linker strangeness.
 -
 -	* glom/utility_widgets/canvas/Makefile.am: Correct some filenames to
 -	fix the distcheck.
 -
 -2007-11-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	* glom/mode_design/print_layouts/window_print_layout_edit.h:
 -	Handle the drag-motion signal to show a temporary canvas item while dragging.
 -	But this does not work - the cursor is grabbed and no further motion events
 -	occur, so this is partly commented out.
 -
 -2007-11-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h: Move dialog creation from the constructor to
 -	where they are first used. This reduces start-up time slightly, and stops
 -	wasting memory, at the cost of slightly (impercetible, hopefully) longer
 -	time to open menus.
 -
 -2007-11-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_developer.glade: Make the toolbar pack_end and non-expand
 -	so that it acts as expected.
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	Call set_default_position() with the drop coordinates, so that all items
 -	are dropped at the correct place.
 -
 -2007-11-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	on_canvas_drag_drop(): Do not call drag_get_data(). It does not seem
 -	necessary - it causes two drops to happen instead of one.
 -
 -2007-11-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/box_print_layouts.cc:
 -	on_adddel_changed();
 -	* glom/navigation/box_tables.cc: on_adddel_changed():
 -	Fix the rename confirmation dialog to actually have two buttons.
 -
 -2007-11-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	fill_with_data(): Do not try to get data for fields that were
 -	not yet chosen.
 -
 -2007-11-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/Makefile.am:
 -	* glom/mode_design/print_layouts/action_layout_item.cc:
 -	* glom/mode_design/print_layouts/action_layout_item.h:
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	* glom/mode_design/print_layouts/window_print_layout_edit.h:
 -	Added a toolbar whose items can be dragged to the canvas.
 -	It is not working perfectly and it is not pretty, but it is a
 -	start.
 -
 -2007-11-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_developer.glade:
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	* glom/mode_design/print_layouts/window_print_layout_edit.h:
 -	Added an undockable vertical toolbar to replace the Insert menu.
 -	It is not very attractive, and it needs to work as a drag source,
 -	rather than being clickable items.
 -
 -2007-11-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	* glom/mode_design/print_layouts/canvas_print_layout.h:
 -	add_layout_group(): added an is_top_level parameter, so we can
 -	avoid adding a canvas item for the canvas's own layout group.
 -
 -2007-11-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/print_layout.cc: Copy constructor
 -	and operator=(): Copy the page_setup.
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	get_print_layout(), set_print_layout(): Actually load/save the
 -	page setup.
 -
 -2007-11-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	fill_with_data(): Don't crash if no fields are on the layout.
 -	* glom/printoperation_printlayout.cc:
 -	* glom/printoperation_printlayout.h: Handle the paginate
 -	signal, though this probably requires the GTK+ patch in
 -	bug #345345.
 -
 -2007-11-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/utils.cc:
 -	* glom/libglom/utils.h:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	Some very minor comments next to some maemo-ifdefs.
 -
 -2007-11-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/layout/layoutitem.cc:
 -	* glom/libglom/data_structure/layout/layoutitem.h: Added
 -	get/set_print_layout_split_across_pages() for future use.
 -
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h:
 -	get/set_node_attribute_value_as_decimal(): Added a default parameter,
 -	defaulting to 0, so we can use other values as defaults to avoid
 -	superfluous attributes.
 -	Used this when loading and saving groups, because 1 column is
 -	the default, and 0 is meaningless.
 -
 -	* glom/utility_widgets/canvas/canvas_group_movable.cc:
 -	* glom/utility_widgets/canvas/canvas_group_movable.h:
 -	Store the x and y even before there is a child.
 -
 -	* glom/utility_widgets/canvas/Makefile.am:
 -	* glom/utility_widgets/canvas/canvas_table_movable.cc:
 -	* glom/utility_widgets/canvas/canvas_table_movable.h:
 -	Added this canvas item.
 -	* glom/utility_widgets/canvas/canvas_item_movable.cc:
 -	Support the table item in the cast functions.
 -	Return false from some signal handlers, so that other objects
 -	can handle them too.
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc:
 -	set_layout_item(): Create a table canvas item for a portal layout
 -	item, though it is currently just a useless test table.
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	Handle the loading and saving of the portal layout item.
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	* glom/mode_design/print_layouts/window_print_layout_edit.h:
 -	Added an Insert Related Records menu item.
 -
 -2007-11-06  Armin Burgmeier  <armin openismus com>
 -
 -	* several files: Merged changes from GLOM_CLIENTONLY branch. This
 -	polished up the maemo port a bit.
 -
 -2007-11-04  Gabor Kelemen  <kelemeng gnome hu>
 -
 -	*glom/glom_developer.glade: Remove translatable property from stock items. Fixes #493202
 -
 -2007-11-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/layout/Makefile.am:
 -	* glom/libglom/data_structure/layout/layoutitem_line.cc:
 -	* glom/libglom/data_structure/layout/layoutitem_line.h:
 -	Added this new layout item, only for print layouts.
 -	* glom/libglom/document/document_glom.cc: load and save the
 -	new layout item.
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc:
 -	set_layout_item(): Handle the new layout item type, creating
 -	a canvas line for it.
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	* glom/mode_design/print_layouts/window_print_layout_edit.h:
 -	Added Insert menu items, to add horizontal and vertical lines.
 -	* glom/utility_widgets/canvas/canvas_group_resizable.cc:
 -	* glom/utility_widgets/canvas/canvas_group_resizable.h:
 -	Create (and handle) different manipulators if the child is a line.
 -	* glom/utility_widgets/canvas/canvas_line_movable.cc:
 -	set_coordinates(): Set the x/y/width/height too, for generic code.
 -
 -2007-11-01  Murray Cumming  <murrayc murrayc com>
 -
 -	* po/POTFILES.in: Added new files.
 -
 -2007-10-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h: Added bool get_viewing_details().
 -	Handled the notebook's page_switch to refresh the
 -	print sub-menu.
 -	* glom/application.cc: fill_menu_print_layouts():
 -	Do not list print layouts if we are viewing the list,
 -	because they are (currently) only for details.
 -
 -2007-10-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h: Set m_FoundSet
 -	whenever the primary key value is set, so we really print
 -	the layout for the current record.
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc:
 -	set_db_data(): Avoid triggering a crash in goocanvas
 -	when setting a NULL pixbuf. Patch sent.
 -
 -2007-10-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/canvas/canvas_group_resizable.cc:
 -	set_child(): Really remove the old item.
 -
 -2007-10-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/canvas/canvas_group_resizable.cc:
 -	* glom/utility_widgets/canvas/canvas_group_resizable.h:
 -	Re-enable hiding of the corner and edge manipulators when the
 -	cursor is not over the item. Add a Rect so we can drag and
 -	mouse-over the entire area, not just the part occupied by
 -	the text.
 -	Store and use the position even when there is no child yet.
 -	set_child(): Ignore the initial position of the child:
 -	set it to that of self. Document that.
 -	Put the manipulators in a group, to simplify the code that
 -	ensures their z position.
 -	I am gradually more certain that I should have just used
 -	a GooCanvasTable for this.
 -
 -	* glom/utility_widgets/canvas/canvas_editable.cc:
 -	* glom/utility_widgets/canvas/canvas_editable.h:
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	* glom/mode_design/print_layouts/canvas_print_layout.h:
 -	Override set_grid_gap() so we can make sure that it is above
 -	our page bounds rect.
 -
 -2007-10-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	* glom/mode_design/print_layouts/window_print_layout_edit.h:
 -	Added a View/Fit To Page menu item, and defaulted to this,
 -	rescaling as the window is resized.
 -
 -2007-10-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	* glom/mode_design/print_layouts/canvas_print_layout.h:
 -	Draw lines to indiciate the page margins (the parts on which
 -	the printer cannot print).
 -	* glom/printoperation_printlayout.cc: Call set_use_full_page(),
 -	because we include the margin space our canvas.
 -
 -2007-10-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	fill_with_data(): Use the correct field index, so that the
 -	field data is shown correctly.
 -
 -2007-10-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/canvas/canvas_editable.cc:
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	* glom/mode_design/print_layouts/canvas_print_layout.h:
 -	Add the items to a group, so we can remove them without removing
 -	other canvas items.
 -	set_page_setup(): Make the canvas gray and put a white rectangle
 -	on the bottom to show the page bounds.
 -
 -2007-10-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_developer.glade:
 -	* glom/base_db.cc: offer_textobject(): Return the starting
 -	text if cancel was clicked, so that cancel doesn't clear the
 -	text.
 -	* glom/layout_item_dialogs/box_formatting.cc:
 -	* glom/layout_item_dialogs/box_formatting.h: Replaced the
 -	3 hide* functions with set_is_for_print_layout().
 -	Replace the checkboxes with labels in this case.
 -	This is still quite unpleasant but we will eventually have
 -	an editor on the layout window, when selection is implemented.
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc:
 -	* glom/mode_design/print_layouts/canvas_layout_item.h:
 -	Make sure that layout items have a font_desc set by default.
 -
 -2007-10-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	Fix a typo so that the positions really are preserved.
 -
 -2007-10-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_developer.glade:
 -	* glom/layout_item_dialogs/dialog_textobject.cc:
 -	* glom/layout_item_dialogs/dialog_textobject.h:
 -	set_textobject(): Added a bool show_title parameter.
 -	* glom/base_db.cc:
 -	* glom/base_db.h: offer_textobject(): Added a bool show_title
 -	parameter.
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	update the position before showing edit or formatting dialogs,
 -	to avoid losing the position when resetting the layout item.
 -
 -	* glom/utility_widgets/canvas/canvas_editable.cc:
 -	* glom/utility_widgets/canvas/canvas_editable.h: Added an
 -	add_item(item, group) overload, so we can group items together
 -	instead of putting them directly in the root group.
 -
 -2007-10-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/printoperation_printlayout.cc: Call set_unit(), because
 -	this apparently affects the cairo context that will be provided
 -	to us.
 -	* glom/utility_widgets/canvas/canvas_text_movable.cc:
 -	* glom/utility_widgets/canvas/canvas_text_movable.h: Rename
 -	set_font() to set_font_points(), and convert from mm to points,
 -	using Pango::FontDescription to manipulate the font_desc string.
 -
 -	Text is now an appropriate size, though there is plenty of
 -	other weirdness still.
 -
 -2007-10-25  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_developer.glade:
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	* glom/mode_design/print_layouts/window_print_layout_edit.h:
 -	Added rulers around the canvas, which update appropriately, like
 -	in Inkscape.
 -	* glom/printoperation_printlayout.cc: Do not scale the context.
 -	Everything should already be exactly correct on the canvas.
 -
 -2007-10-25  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/layout/layoutitem_text.cc:
 -	* glom/libglom/data_structure/layout/layoutitem_text.h:
 -	Added m_formatting and get_formatting_used() here, as in
 -	LayoutItem_Field. They should probably share a base class if
 -	this gets silly.
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h: load and save the
 -	formatting for text items as well as just fields.
 -	* glom/layout_item_dialogs/box_formatting.cc:
 -	* glom/layout_item_dialogs/box_formatting.h: Added default
 -	arguments for set_formatting() parameters, so we can ignore
 -	stuff that is only relevant to fields.
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc:
 -	* glom/mode_design/print_layouts/canvas_layout_item.h:
 -	set_layout_item(): Use set_text() rather than property_text(),
 -	so that the markup is constructed. Use markup for text items as well
 -	as fields.
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	on_context_menu(): Show formatting options for text items as well as
 -	fields.
 -	* glom/utility_widgets/layoutwidgetbase.cc:
 -	* glom/utility_widgets/layoutwidgetbase.h: Added the
 -	apply_formatting(widget, formatting) convenience method.
 -	* glom/utility_widgets/datawidget.cc: Constructor: Use the
 -	apply_formatting() convenience method.
 -	* glom/utility_widgets/flowtablewithfields.cc: add_textobject():
 -	Use formatting for text items.
 -
 -2007-10-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.cc: Save the font and color
 -	formatting for all field types, not just text.
 -	* glom/layout_item_dialogs/box_formatting.cc:
 -	* glom/layout_item_dialogs/box_formatting.h: Added
 -	hide_choices(), hide_multiline(), set_force_show_text_formatting().
 -	enforce_constraints(): Show the font and color options for all
 -	field types except booleans, not just text.
 -	* glom/mode_design/print_layouts/dialog_text_formatting.cc:
 -	* glom/mode_design/print_layouts/dialog_text_formatting.h:
 -	Use the new functions to show appropriate options for the print
 -	layout items.
 -
 -2007-10-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_developer.glade:
 -	* glom/layout_item_dialogs/box_formatting.cc:
 -	* glom/layout_item_dialogs/box_formatting.h: Put the
 -	numeric, text, and choices sections in a notebook, to
 -	make the dialog smaller and less scary.
 -	Add checkboxes so that the user can choose not to use
 -	any special font or colors (to get the defaults).
 -
 -2007-10-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_developer.glade: Added window_text_format.
 -	* glom/layout_item_dialogs/box_formatting.cc:
 -	* glom/layout_item_dialogs/box_formatting.h:
 -	Added font and color properties.
 -	* glom/libglom/data_structure/layout/fieldformatting.cc:
 -	* glom/libglom/data_structure/layout/fieldformatting.h:
 -	Added get/set for font and foreground/background colors.
 -	* glom/libglom/data_structure/layout/layoutitem.cc:
 -	* glom/libglom/data_structure/layout/layoutitem.h:
 -	Removed get/set_print_layout_text_size() - We use the new
 -	stuff in FieldFormatting instead.
 -	* glom/libglom/document/document_glom.cc: Load and save the
 -	new field formatting.
 -	* glom/mode_design/print_layouts/Makefile.am:
 -	* glom/mode_design/print_layouts/dialog_text_formatting.cc:
 -	* glom/mode_design/print_layouts/dialog_text_formatting.h:
 -	Added a dialog for text formatting, containing the same
 -	text formatting options as the field properties layout
 -	(via box_formatting.[h|cc] and its glade definition.
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc:
 -	Use the field formatting to change the font and colors.
 -	* glom/utility_widgets/canvas/canvas_text_movable.cc:
 -	* glom/utility_widgets/canvas/canvas_text_movable.h: Added
 -	set_font(), and set_text(), so we can build the pango markup.
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	* glom/mode_design/print_layouts/canvas_print_layout.h:
 -	on_context_menu_formatting(): Show the font format dialog,
 -	though I need to figure out why the inner box is not visible.
 -	* glom/utility_widgets/datawidget.cc: Use the formatting font
 -	and properties here, so weird styles can be used on the on-screen
 -	layout too.
 -
 -2007-10-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/layout/layoutitem.cc:
 -	* glom/libglom/data_structure/layout/layoutitem.h:
 -	Added get_print_layout_text_size(), though we should have this for
 -	on-screen text too.
 -	* glom/utility_widgets/canvas/canvas_text_movable.cc:
 -	* glom/utility_widgets/canvas/canvas_text_movable.h: Added set_text()
 -	and set_text_size(), so we can use pango markup.
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc: set_layout_item():
 -	Set the text size from the layout item.
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	* glom/mode_design/print_layouts/canvas_print_layout.h: Constructor:
 -	Set the units to mm, and set the page setup to a default.
 -	set_page_setup(): Change the canvas bounds to match the page setup.
 -	* glom/mode_design/print_layouts/window_print_layout_edit.cc:
 -	* glom/mode_design/print_layouts/window_print_layout_edit.h:
 -	init_menu(): Added zoom items to the view menu, and start with 50%.
 -
 -2007-10-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/canvas/Makefile.am:
 -	* glom/utility_widgets/canvas/canvas_image_movable.cc:
 -	* glom/utility_widgets/canvas/canvas_image_movable.h:
 -	* glom/utility_widgets/canvas/canvas_item_movable.cc:
 -	Added an image item.
 -	* glom/utility_widgets/canvas/canvas_group_resizable.cc:
 -	* glom/utility_widgets/canvas/canvas_group_resizable.h:
 -	Added get_child().
 -	* glom/mode_design/print_layouts/canvas_layout_item.cc:
 -	* glom/mode_design/print_layouts/canvas_layout_item.h:
 -	Create an image item for image fields, and text items for
 -	the other field types.
 -	Added set_db_data() which changes the item contents to show
 -	real data instead of, for instance, a field name.
 -	* glom/mode_design/print_layouts/canvas_print_layout.cc:
 -	* glom/mode_design/print_layouts/canvas_print_layout.h:
 -	Added fill_with_data().
 -	* glom/mode_data/box_data_details.cc: init_db_details():
 -	Set the m_found_set where_clause from the primary key details
 -	so we can use it later.
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_data/notebook_data.h: Added get_found_set_details().
 -	* glom/frame_glom.cc: on_menu_print_layout_selected():
 -	Fill the canvas with data before printing, from the currently
 -	viewed details record.
 -
 -2007-10-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* Merged from the glom-precise-printing branch, because I have
 -	made most of the large changes, and I want to reduce the number
 -	of branches that we are working on.
 -
 -2007-10-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h:
 -	Added check_user_is_not_root().
 -	* glom/main.cc: Do not allow the user to start glom
 -	as root (or sudo) because postgres cannot start as root,
 -	and it is generally a bad idea for a networked application.
 -	Thanks to Norman for identifying the problem.
 -
 -2007-10-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/fields/dialog_fieldcalculation.cc:
 -	* glom/mode_design/fields/dialog_fieldcalculation.h:
 -	on_button_test(): Warn if there is no return statement because it
 -	is easy to forget this for simple calculations.
 -	Thanks to Federico Munerotto for showing that this check is
 -	helpful.
 -
 -2007-10-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/field.cc:
 -	* glom/libglom/data_structure/field.h: Copy constructor:
 -	copy m_field_info instead of sharing one reference-counted instance.
 -	get_field_info(): Add a const overload and make the existing one non-const.
 -	This const correctness should prevent us from using the same instance when
 -	we actually want to explicitly take a copy.
 -	This errors were probably caused during the port to libgda 3.0, when
 -	Gda::Column became a reference-counted object.
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	get_field_definition(): copy the field_info instead of just reusing the
 -	existing one, to avoid changing the original field_info accidentally.
 -
 -	These changes make field type changes actually work again in 1.6.
 -
 -2007-10-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in:
 -	* glom/main.cc:
 -	* glom/relationships_overview/dialog_relationships_overview.h:
 -	* glom/relationships_overview/printoperation_relationshipsoverview.
 -	h: Use the latest goocanvasmm API, with different pgk-config and
 -	include path.
 -
 -2007-10-14  Yannig Marchegay  <yannig marchegay org>
 -
 -	* configure.in: Added 'oc' to ALL_LINGUAS.
 -
 -2007-10-12  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/libglom/connectionpool.cc: Fixed #ifdef from last commit, it is
 -	supposed to be #ifndef.
 -
 -2007-10-11  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/adddel/adddel.cc: Don't use deprecated gtkmm
 -	API.
 -
 -	* glom/libglom/connectionpool.cc:
 -	(ConnectionPool::check_postgres_gda_with_warning): Use Hildon::Note
 -	instead of Gtk::MessageDialog in maemo version.
 -
 -2007-10-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/relationships_overview/dialog_relationships_overview.cc:
 -	* glom/relationships_overview/printoperation_relationshipsoverview.
 -	cc: Fix the build for the latest goocanvasmm API, though all this
 -	code has been reworked in the glom-precise-printouts branch.
 -
 -2007-10-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/relationships_overview/printoperation_relationshipsoverview.
 -	cc: Get the bounds of the root item rather than of the whole canvas,
 -	for more suitable scaling.
 -
 -2007-10-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/relationships_overview/dialog_relationships_overview.h:
 -	* glom/relationships_overview/printoperation_relationshipsoverview.
 -	cc: scale before printing, because that is how cairo works.
 -
 -2007-10-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade:
 -	* glom/relationships_overview/Makefile.am:
 -	* glom/relationships_overview/dialog_relationships_overview.cc:
 -	* glom/relationships_overview/dialog_relationships_overview.h:
 -	* glom/relationships_overview/printoperation_relationshipsoverview.
 -	cc:
 -	* glom/relationships_overview/printoperation_relationshipsoverview.
 -	h: Some basic printing support for the relationships overview
 -        (via a menu item in the dialog, which
 -	is probably bad UI, but I don't like the idea of extra buttons either).
 -	It currently does not scale to fit the page, and does not offer
 -	landscape printing.
 -
 -2007-10-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Depend on goocanvasmm.
 -	* glom/main.cc: initialize goocanvasmm if not in client-only mode.
 -	* glom/relationships_overview/dialog_relationships_overview.cc:
 -	* glom/relationships_overview/dialog_relationships_overview.h:
 -	Use C++ types as much as possible (often using Glib::wrap() instead of
 -	the goocanvasmm constructors, because they are currently broken), and
 -	generally clean up this code a bit.
 -
 -2007-10-01  Armin Burgmeier  <armin openismus com>
 -
 -	* several files: Merged changes from the GLOM_CLIENTONLY branch. This
 -	adds an --enable-maemo configure option that builds a clientonly
 -	version of glom for the maemo platform. See the ChangeLog in the
 -	GLOM_CLIENTONLY branch for a detailed list of changes.
 -
 -2007-10-01  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc: get_record_counts():
 -	Return the stored record count (from the extra COUNT query), instead of using
 -	DataModel::get_n_rows(), because that returns -1 when using the iter-only model.
 -
 -2007-09-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/layout/layoutitem_field.cc:
 -	* glom/libglom/data_structure/layout/layoutitem_field.h: Added get_sql_name(),
 -	to get the fully qualified field name (with the table name and .).
 -	* glom/libglom/utils.cc: build_sql_select_with_where_clause():
 -	Use get_sql_name() instead of building the name here, to simplify that code
 -	slightly.
 -
 -	* glom/libglom/connectionpool.cc: handle_error(): When getting the text of
 -	errors, ignore any events that are not Gnome::Gda::CONNECTION_EVENT_ERROR,
 -	to avoid showing other irrelevant warnings. This requires the latest libgdamm.
 -
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.h: Remove the useless
 -	m_column_record member variable.
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	refresh_from_database(), fill_values_if_necessary(): Create an iter-only
 -	model (needs the latest libgda, glibmm, and rebuilt libgdamm), to
 -	hopefully only get the data that we actually want.
 -
 -2007-09-27  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/glom.glade: Make the entry_quickfind not activate the default
 -	button when pressing enter because glom already connects
 -	signal_activate(). When no find criteria was entered, two error
 -	dialogs were shown at the same time.
 -
 -2007-09-20  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/frame_glom.cc: Load "connection failed" dialog also in client
 -	only mode to prevent a crash when that dialog is supposed to be
 -	displayed.
 -
 -	* glom/main.cc: Don't include <gtksourceviewmm/init.h> in client only
 -	mode.
 -
 -2007-09-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/main.cc: initialize gtksourceviewmm so that the GType is available
 -	to libglade, to avoid a warning (and possibly a crash).
 -
 -2007-09-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list.cc: create_layout(): Do not try to
 -	add the previously-used primary key if there is no primary key in the
 -	table (for instance, if there are no fields in the table). This avoids
 -	an internal postgres warning about a non-existant field.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: Clear the model if there
 -	are no fields. This prevents a crash at startup if a table has no fields.
 -
 -2007-09-14  Armin Burgmeier  <armin openismus com>
 -
 -	* several files: Merged changes from the GLOM_CLIENTONLY branch. This
 -	adds an --enable-client-only configure option that disables support
 -	for developer mode and self-hosting. See the ChangeLog in the
 -	GLOM_CLIENTONLY branch for a detailed list of changes.
 -
 -2007-09-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in:
 -	* glom/layout_item_dialogs/dialog_buttonscript.cc:
 -	* glom/mode_design/fields/dialog_fieldcalculation.cc:
 -	* glom/mode_design/script_library/dialog_script_library.cc:
 -	Ported to the latest gtksourceviewmm, using the gtksourceview-2.0
 -	API.
 -
 -This is svn trunk. See also the glom-1-6 branch.
 -
 -1.6.0:
 -
 -2007-09-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Added a handle_error(Glib::Exception) overload.
 -	* glom/frame_glom.cc:
 -	* glom/main.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/reports/report_builder.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc: Catch
 -	Glib::Exceptions as well as std::exception, hopefully allowing us to
 -	catch more errors without crashing.
 -
 -2007-09-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_privs.cc: Fix a warning. std::string::find() returns npos,
 -	not -1 when it fails.
 -
 -1.5.3:
 -
 -2007-09-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc: Fix an if, adding a !, stopping us from
 -	updating the fields in the document unnecessarily. This avoid a
 -	warning about unsaved changes when closing, even in operator mode.
 -	* glom/libglom/document/document_glom.cc: set_modified(): Do nothing
 -	if the user is not in developer mode, because there are legitimate
 -	times when things can change temporarily in operator mode.
 -
 -2007-09-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc: When the first postgres shutdown
 -	fails (as happens under valgrind, and in bug #420962) try again,
 -	though that seems to fail too.
 -
 -2007-09-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.cc:
 -	save_before_layout_item_field_formatting(),
 -	load_after_layout_item_field_formatting(),
 -	* glom/utility_widgets/datawidget.cc: constructor:
 -	Ignore the multiline formatting options for non-text fields,
 -	so that these will not be used for number fields if they were used
 -	before changing the field from text to number.
 -	Bug #443360 (Harry Mills)
 -
 -2007-09-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc: start_self_hosting(): Specify a
 -	Linux/Unix SIGSEGV signal handler so we stop postgres when we
 -	crash. I wonder if there is a way to still have bug-buddy's
 -	crash reports while doing this.
 -
 -1.5.2 (unstable):
 -
 -2007-06-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/spawn_with_feedback.cc:
 -	execute_command_line_on_thread_create(): Do not delete the data
 -	before using it, to avoid a crash.
 -	* configure.ac: Depend on the latest versions of libgdamm and libxml++,
 -	which also have fixes for crashes in Glom.
 -
 -2007-06-05  Ignacio Casal Quinteiro  <nacho resa gmail com>
 -
 -	* configure.in: Added 'gl' to ALL_LINGUAS.
 -
 -1.5.1 (unstable):
 -
 -2007-05-22  Yselkowitz  <yselkowitz users sourceforge net>
 -
 -	* glom/libglom/Makefile.am:
 -	* glom/libglom/connectionpool.cc:
 -	Cygwin/Windows fix: Expect the EXEEXT file extension when searching for
 -	postmaster. Bug #440335.
 -
 -2007-05-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Check for the pgk-config file of the libgda
 -	postgres providers.
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h:
 -	* glom/main.cc: Added and used
 -	check_postgres_gda_client_is_available_with_warning() to do
 -	a runtime check for the presence of the libgda postgres provider.
 -
 -2007-05-14  Johannes Schmid <johannes schmid openismus com>
 -
 -	* glom/python_embed/glom_python.cc:
 -	#361171 - Show Python errors in a dialog
 -
 -2007-05-14  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/relationships_overview/relationships_canvas.cc:
 -	* glom/relationships_overview/relationships_canvas.h:
 -	* glom/relationships_overview/relationshipscanvas_tablewidget.cc:
 -	* glom/relationships_overview/relationshipscanvas_tablewidget.h:
 -	* glom/relationships_overview/table_canvasitem.h:
 -	* glom/relationships_overview/table_canvasitem.cc: Removed these files
 -	since they are no longer used.
 -
 -	* glom/relationships_overview/Makfile.am: Removed aforementioned files
 -	from build.
 -
 -	* glom/relationships_overview/dialog_relationships_overview.h:
 -	* glom/main.cc: Do not initialize/include libgnomecanvasmm anymore.
 -
 -	* configure.in: Dropped dependency on libgnomecanvasmm.
 -
 -2007-05-13  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/glom.glade: Sort most recently used files first.
 -
 -	* glom/application.h:
 -	* glom/appliaction.cc: Added m_example_uri field that stores the URI
 -	of the opened example file. This is checked against in
 -	document_history_ad() to prevent adding of example files into the
 -	recent files list.
 -
 -2007-05-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Require libgda 3.0.1, which is the first version that works
 -	enough for Glom.
 -
 -2007-05-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/application.h: Override document_history_add from the Bakery App_WithDoc
 -	class, to try (unsuccessfully so far) to prevent adding of example files to
 -	the recent files list.
 -	offer_new_or_existing(): Do not shown non-existing recent files.
 -
 -2007-05-08  Armin Burgmeier  <armin openismus com>
 -
 -	* several files: Merged changes from the GLOM_LIBGDA3 branch. Glom now
 -	builds against the new libgda and pygda API. See the ChangeLog in that
 -	branch for a more detailed view of what has exactly changed.
 -
 -2007-05-01  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/application.cc: Do not leak the file chooser dialog in
 -	ui_file_select_save().
 -
 -2007-04-23  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/glade.glom: Fixed the dialog so that the recent chooser is
 -	below the text and in its own frame.
 -
 -	* glom/application.cc: Hide the recent chooser when they are no
 -	recently used items.
 -
 -2007-04-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in:
 -	* icons/16x16/Makefile.am:
 -	* icons/22x22/Makefile.am:
 -	* icons/24x24/Makefile.am:
 -	* icons/32x32/Makefile.am:
 -	* icons/48x48/Makefile.am:
 -	* icons/Makefile.am:
 -	* icons/scalable/Makefile.am: Used build rules like the ones in totem,
 -	to install these icons.
 -
 -2007-04-23  Andreas Nilsson  <nisses mail home se>
 -
 -	* icons/16x16/glom.png
 -	* icons/16x16/glom.svg
 -	* icons/22x22/glom.png
 -	* icons/22x22/glom.svg
 -	* icons/24x24/glom.png
 -	* icons/32x32/glom.png
 -	* icons/32x32/glom.svg
 -	* icons/48x48/glom.png
 -	* icons/scalable/glom.svg: New icons following the tango style guidelines.
 -
 -2007-04-22  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/application.cc:
 -	* glom/glom.glade: Added a RecentChooser widget to the initial dialog
 -	that allows to open quickly a recently used file, as requested in
 -	bug #349355.
 -
 -	* configure.in: Depend on gtkmm-2.10 to make use of the new
 -	RecentChooser API in GTK+.
 -
 -	However, this needs some more work to make it look less awkward. murrayc.
 -
 -2007-04-10  Armin Burgmeier  <armin openismus om>
 -
 -	* glom/libglom/document/document_glom.cc: Added support for a new
 -	example rows format where the value of each field is identified by the
 -	field name rather than the field index, to be more robust against
 -	changes.
 -
 -	* glom/libglom/utils.cc: string_separate): For each quoted occurence,
 -	do no longer put an empty string in the result vector when
 -	ignore_quoted_separator is set.
 -
 -2007-04-01  Murray Cumming  <murrayc murrayc com>
 -
 -	po/en_GB.po: Restore the date printf format that was removed by
 -	David Lodge <dave cirt net> on 2006-09-12.
 -	This date format translation corrects the parsing and display of
 -	4-digit dates.
 -	Bug #425116
 -
 -2007-03-20  Mathias Hasselmann  <mathias hasselmann gmx de>
 -
 -	* glom/libglom/connectionpool.cc: Modify the default pg_hba.conf to
 -	allow TCP/IP connections from any host when doing self-hosting.
 -	Previously it had mistakenly only allowed connections from 127.0.0.1 (localhost).
 -	Interestingly, not all local computers can be identified as 127.0.0.1  either,
 -	so the connection was failing for some local computers too.
 -        (ChangeLog comments from Murray)
 -
 -2007-03-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/utils.cc:
 -	* glom/libglom/utils.h: Added a show_ok_dialog() method, becasue it is silly to
 -	always call the on in Frame_Glom.
 -
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h: create_self_hosting(): Take a parent window so we
 -	can show some warning dialogs if something goes wrong. None of these have actually
 -	been experienced though.
 -
 -	* glom/application.cc: ui_file_select_save(): If doing self-hosting then check that the
 -	directory does not exist already, and warn the user.
 -	For instance, you might specify test.glom, which would then creat test/test.glom, so it
 -	will warn if test/ already exists.
 -	Bug # 420482 (Mathias Hasselmann)
 -
 -
 -2007-03-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc: connection_request_password_and_choose_new_database_name():
 -	Do not redeclare response variable, so we do not mistakenly think we failed later.
 -	This is just a fix of the last commit.
 -
 -2007-03-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_new_self_hosted_connection.cc:
 -	* glom/dialog_new_self_hosted_connection.h:
 -	* glom/frame_glom.cc:
 -	* glom/glom.glade:
 -	* glom/mode_design/users/dialog_user.cc: Add a password confirm entry to the dialog,
 -	check it, and check that the user name is not empty. As well as being obviously useful,
 -	this will make it more obvious that you are entering a new user/password confirmation,
 -	instead of an existing one.
 -
 -2007-03-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/utils.cc: Removed an unnessary static keyword on a typedef, which broke the
 -	build with some compilers.
 -
 -2007-02-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in:
 -	* glom/Makefile.am:
 -	* glom/frame_glom.cc: Enable the Relationships Overview code.
 -
 -1.4.0:
 -
 -2007-03-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/users/dialog_user.cc:
 -	* glom/mode_design/users/dialog_user.h: Added check_password(), which warns about
 -	an empty password or a password confirmation failure.
 -	* glom/mode_design/users/dialog_users_list.cc: When adding or editing a user,
 -	check the password, using check_password().
 -
 -1.3.12:
 -
 -2007-03-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_privs.cc: Privs::get_table_privileges(): Cope with the changed
 -	pg_class.relacl format in Postgres 8.x (8.2, maybe >=8.0), which does not have
 -	the "group " prefix, now that users and groups are both just roles to Postgres.
 -	The user/group distinction will remain in the Glom UI, because it is a sensible
 -	way to organise the access rights.
 -	This should still be able to cope with earlier versions of Postgres, such as
 -	Postgres 7.4, but I have not tested that myself.
 -
 -	* glom/main.cc: Stop when there is a problem parsing the command line options,
 -	and give a hint about using --help.
 -
 -2007-03-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc: Commented-out the use of avahi, because
 -	our use of it seems to be unstable, and it does not do anything useful yet
 -	anyway.
 -
 -2007-03-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/Makefile.am:
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h: Moved the avahi code into its own class,
 -	to keep the ConnectionPool class simpler.
 -	The async stuff might mean that we cannot tie the avahi publishing to an
 -	instance lifetime, but lets see.
 -	* glom/libglom/test_avahi_publisher.cc: Added a test case for just the
 -	avahi utility class.
 -
 -1.3.11:
 -
 -2007-03-04  Armin Burgmeier  <armin openismus com>
 -
 -	* glom/utilitiy_widgets/db_adddel/db_adddel.h:
 -	* glom/utilitiy_widgets/db_adddel/db_adddel.cc: Added a
 -	signal_script_button_clicked that is emitted when the user
 -	clicks on a list button.
 -
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data.cc: Added a execute_button_script()
 -	function.
 -
 -	* glom/mode_data/box_data_details.cc: Make use of it.
 -
 -	* glom/mode_data/box_data_list.h:
 -	* glom/mode_data/box_data_list.cc: Listen on
 -	signal_script_button_clicked from m_AddDel and execute the script.
 -	Refresh the list because the script may have altered it. This is done
 -	in an idle handler because it crashes Glom otherwise.
 -
 -2007-03-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc: Add a comment about the hope of using just the pg_ctl
 -	result code in future.
 -
 -2007-03-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc: When checking if the postgres instance
 -	has finished starting, check for "is running" rather than "postmaster is running",
 -	because this message has changed in postgres 8.2.
 -	Yes, this is a nasty hack anyway, and we need a better way to programatically
 -	know when the local server is running.
 -
 -2007-03-02  Armin Burgmeier  <armin arbur net>
 -
 -	* glom/mode_data/box_data_details.cc: Remove shadow from Viewport that
 -	is created by Gtk::ScrolledWindow::add().
 -
 -2007-03-02  Murray Cumming  <murrayc murrayc-desktop>
 -
 -	* autogen.sh: Use --copy with gnome-doc-prepare, because that is
 -	what gnome-common does.
 -	* configure.in: Specify 0.9.0 to GNOME_DOC_INIT()
 -	Change the default postgres tools path to use 8.2, as used on Ubuntu Feisty,
 -	to make my life easier.
 -
 -1.3.10:
 -
 -2007-02-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc: Add 5434 to the list of ports to try, because this
 -	is used in the current Ubuntu Feisty beta for Postgres 8.2, though this might be changed
 -	in later Ubuntu Feisty betas. Also added 5435 and 5436 for the future.
 -
 -2007-02-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade: Corrected the title of the relationships overview
 -	window.
 -
 -2007-02-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/relationships_overview/dialog_relationships_overview.cc:
 -	* glom/relationships_overview/dialog_relationships_overview.h:
 -	More cleanup.
 -
 -2007-02-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/relationships_overview/dialog_relationships_overview.cc:
 -	* glom/relationships_overview/dialog_relationships_overview.h:
 -	More syntax corrections.
 -
 -2007-02-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/relationships_overview/dialog_relationships_overview.cc:
 -	* glom/relationships_overview/dialog_relationships_overview.h:
 -	Remember the windows size between instantiations, temporarily for the lifetime of the
 -	application.
 -
 -2007-02-16  Rasmus Toftdahl Olesen  <halfdan halfdans net>
 -
 -	* glom/relationships_overview/dialog_relationships_overview.cc:
 -	* glom/relationships_overview/dialog_relationships_overview.h:
 -	Patch in Bug #408408 to correct the source code formatting.
 -
 -2007-02-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_find/box_data_details_find.cc:
 -	* glom/mode_find/box_data_list_find.cc: fill_from_database() methods:
 -	Do not try to open a connection if the document is NULL, to stop a connection error dialog
 -	while closing, after we have stopped self-hosting.
 -
 -2007-02-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/frame_glom.cc:
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h: When starting self-hosting, double-check that the directory
 -	is there so we can fail more pleasantly, in this rare case.
 -
 -2007-02-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_music_collection.glom: Publishers table: Correct the Albums relationship,
 -	and add a list of related albums to the details view.
 -
 -2007-02-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/relationships_overview/dialog_relationships_overview.cc:
 -	* glom/relationships_overview/dialog_relationships_overview.h: Added an override of
 -	load_from_document() so that the tables are actually shown on the canvas.
 -
 -2007-02-16  Rasmus Toftdahl Olesen  <halfdan halfdans net>
 -
 -	* glom/relationships_overview/dialog_relationships_overview.cc:
 -	* glom/relationships_overview/dialog_relationships_overview.h:
 -	Updated for latest goocanvas API. Note that this code is disabled by default.
 -	Bug #408408.
 -
 -1.3.9:
 -
 -2007-02-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/Makefile.am:
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h: Added check_postgres_is_available_with_warning(),
 -	and install_postgress(). That latter may be patched by distros that choose (wrongly,
 -	I believe) not to make Glom depend on Postgres at install-time.
 -	There is some commented-out example code, with many helpful comments, implementing
 -	the install-at-runtime code for Ubuntu/Debian.
 -	* glom/libglom/gst-package.c:
 -	* glom/libglom/gst-package.h: ifdefed-out helper code, taken from the Ubuntu/Debian patches
 -	for gnome-system-tools.
 -	* glom/main.cc:  main(): Call check_postgres_is_available_with_warning().
 -	If Postgres is not installed, and cannot be installed, then Glom will quit.
 -
 -1.3.8:
 -
 -2007-02-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Depend on avahi-glib.
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h: Added avahi_start_publishing() and
 -	avahi_stop_publishing() and use them to advertise the database server when self-hosting,
 -	with a made-up avahi service type name. This is rough code based on the avahi examples.
 -	I want to clean it up and maybe separate it into a separate class.
 -
 -2007-02-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: When creating a new database (not from an example) show the extended
 -	FileChooserDialog again, by setting our new boolean.
 -
 -2007-02-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.cc: get_connection_self_hosted_directory_uri():
 -	Use just glom_postgres_data for the subdirectory name, to create and to look for, for
 -	self hosting, instead of prefixing it by the glom file name. This is less ugly, and it should
 -	be safe enough because it is all inside the directory.
 -	* glom/application.cc: get_file_uri_without_extension(): Do not ignore the return value of
 -	Gnome::Vfs::Uri::append_string(). This should not have worked before, and still seems to work
 -	now. Odd.
 -
 -2007-02-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc: Always use a dynamically-found port number when starting
 -	self-hosting, instead of only determining it when creating the file, by using the -p and -h
 -	arguments to postmaster instead of specifying the same information in a postgresql.conf file.
 -
 -2007-02-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h: Add discover_first_free_port() helper function, based on
 -	recommendation from Lennart Poettering. Use it to try a series of ports when deciding what port
 -	to use for self-hosting. However, this should be tested every time we start the server, not just
 -	when creating the files.
 -
 -2007-02-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h: Remove the Gtk::Paned parent widget. Its functionality
 -	was not used. It was just a relic from a previous nasty UI. Replaced it with a ScrolledWindow
 -	that does vertical scrolling when necessary. Hopefully this will prevent the window from sometimes
 -	being too high for the screen. Layout is variable height rather than variable width, so this makes
 -	sense.
 -	I also need to make the window take as much vertical space as it can.
 -
 -2007-02-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* NEWS:
 -	* glom/Makefile.am:
 -	* glom/application.cc:
 -	* glom/frame_glom.cc:
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h:
 -	* glom/relationships_overview/dialog_relationships_overview.cc:
 -	* glom/relationships_overview/dialog_relationships_overview.h: Added unfinished
 -	code for Relationships Overview feature, by Rasmus Toftdahl Olesen.
 -	(See http://halfdans.net/index.py/89 )
 -	The actual use of goocanvas is disabled in configure.ac, frame_glom.cc, and glom/Makefile.am,
 -	because the code must be updated to build against the latest goocanvas API.
 -
 -1.3.7:
 -
 -2007-02-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/python_embed/py_glom_relatedrecord.cc: Made the same changes here -
 -	see the previous ChangeLog entry.
 -
 -2007-02-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/python_embed/py_glom_record.cc:
 -	* glom/libglom/python_embed/py_glom_related.cc: PyMappingMethods: Remove (inquiry)
 -	and (binaryfunc) casts because they should no longer be necessary and this might
 -	help the build with Python 2.5.
 -
 -2007-02-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/python_embed/py_glom_record.cc:
 -	* glom/libglom/python_embed/py_glom_related.cc: ifdef with PY_VERSION_HEX to
 -	adapt to the changed function pointer signature of the tp_as_mapping_length
 -	callbacks for PyMappingMethods in Python 2.5, which now have a Py_ssize_t
 -	return type. This broke the build on 64-bit systems.
 -	Also, take a PyObject* object instead of our derived struct, and cast inside
 -	our functions, to avoid errors from more fussy compiler versions.
 -	(Problems found by Daniel Holbach)
 -
 -2007-02-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/application.h: Add m_ui_save_extra_showextras so we can turn off use of
 -	the custom filechooser dialog completely in on_menu_file_save_as_example().
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h: Added append_newline() and used it in
 -	save_before() to break up the incredibly long lines. This is not as nice as
 -	newlines plus indenting, but it is a start.
 -	* examples/example_smallbusiness.glom: Resaved this, using the newlines.
 -
 -1.3.6:
 -
 -2007-01-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Makefile.am:
 -	* glom/combobox_fields.cc:
 -	* glom/combobox_fields.h: Added derived ComboBox for
 -	showing a list of fields, with an optional None item.
 -	* po/POTFILES.in: Added the new file.
 -	* glom/layout_item_dialogs/box_formatting.cc:
 -	* glom/layout_item_dialogs/box_formatting.h:
 -	Use ComboBox_Fields instead of Combo_TextGlade for the
 -	choices fields combo boxes, so we can show a None item
 -	for the Also Show field combo box, so the user can clear it
 -	after choosing something and then changing his mind.
 -	Bug #365051 from L Davison.
 -
 -2007-01-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/spawn_with_feedback.cc:
 -	execute_command_line_and_wait_until_second_command_returns_success():
 -	When waiting for the specific text output from a second command,
 -	temporarily set the LANG and LANGUAGE environment variables to C,
 -	so that we get the same text in all locales.
 -	This is not pretty, but neither is this whole command-line spawning idea anyway.
 -	Bug #395511 from Aurelien.
 -
 -2007-01-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h: Actually show fixed text and button items
 -	in the list view. This needed us to know when the column index was for the view or for the
 -	model, to prevent us from trying to get a value for the wrong column.
 -	At the moment, nothing happens when you click on a button, and the button appears like text.
 -
 -2007-01-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/dialog_layout.cc:
 -	* glom/mode_data/dialog_layout.h:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_details.h:
 -	* glom/mode_data/dialog_layout_list.cc:
 -	* glom/mode_data/dialog_layout_list.h:
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/mode_data/dialog_layout_list_related.h:
 -	Use the same layout and code for details, lists, and portals, reusing
 -	the UI and the implementation, just hiding some widgets for some dialogs.
 -
 -2007-01-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* po/POTFILES.in: Added glom/utility_widgets/filechooserdialog.cc
 -
 -2007-01-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Require libgda 1.2.4, which has a fix for database and table
 -	encoding problem. Requiring this should encourage distro packagers to also update libgda,
 -	which should fix crashes when creating databases, tables, fields, etc, with unusual
 -	characters, which happens quite often.
 -
 -1.3.5:
 -
 -2007-01-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade: dialog_new_self_hosted_connection: Start with the focus in
 -	the user name instead of the password, because both are empty to start with.
 -
 -2007-01-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/application.h: ui_file_select_save():
 -	When self-hosting, create a directory and put the file and the data directory
 -	inside the directory, so that they are not separated easily.
 -
 -2007-01-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Makefile.am:
 -	* glom/glom.glade:
 -	* glom/dialog_new_database.cc:
 -	* glom/dialog_new_database.h: Removed this class and dialog.
 -	* glom/utility_widgets/filechooserdialog.cc:
 -	* glom/utility_widgets/filechooserdialog.h: Add widgets from the
 -	DialogNewDatabase dialog (asking for the title, and whether to self-host).
 -	* glom/application.cc:
 -	* glom/application.h: Add new m_ui_save_extra member variables for getting the
 -	result of the extended save dialog while still using the Bakery file save API.
 -	ui_file_select_save(): Set and get the new member variables.
 -	on_document_load(): Use the new member variables (with values previously set by the
 -	extended save dialog) instead of showing a new dialog to get the information.
 -
 -	This removes one dialog, making new file creation simpler.
 -
 -2007-01-10  Pema Geyleg  <pema geyleg gmail com>
 -
 -	* configure.in: Added 'dz' to ALL_LINGUAS.
 -
 -2006-12-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/filechooserdialog.cc:
 -	* glom/utility_widgets/filechooserdialog.h: Add a derived Gtk::FileChooserDialog,
 -	which can show our extra widgets. At the moment it can just show an extra text
 -	message.
 -	* glom/application.cc:
 -	* glom/application.h: Override Bakery::App_WithDoc::ui_file_select_save(), so
 -	we can use our custom file chooser dialog, using member variables to set the title
 -	and extra message if necessary.
 -	on_document_load(): Set the member variables so that we show the message about
 -	saving an example file in the file chooser dialog, instead of in a separate dialog.
 -	This removes one of the many dialogs.
 -
 -2006-12-27  Murray Cumming  <murrayc murrayc com>
 -
 -        * glom/libglom/Makefile.am:
 -        * glom/python_embed/python_module/Makefile.am: Fix the cygwin (win32) build.
 -        Bug #338844 from Yselkowitz.
 -
 -2006-12-21   Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/translation/window_translations.cc:
 -	* glom/translation/window_translations.h: Added get_translatable_type_name_nontranslated()
 -	for in po message context strings.
 -	* glom/libglom/data_structure/translatable_item.cc:
 -	* glom/libglom/data_structure/translatable_item.h:
 -	on_button_export(): Write context strings to the .po file to distinguish similar strings,
 -	and provide hints to translators.
 -	on_button_import(): Compare the context strings to more precisely identify the items.
 -
 -1.3.5:
 -
 -2006-12-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: offer_new_or_existing(): Fix a recent typo that stopped files being
 -	created from examples.
 -	* glom/libglom/spawn_with_feedback.cc:
 -	execute_command_line_and_wait_until_second_command_returns_success(): Sleep for an extra
 -	3 seconds, because I think that pg_ctl status sometimes reports success too early.
 -
 -2006-12-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Do an extra sanity check on the postgres utils path, and complain if
 -	we can't find postmaster.
 -
 -2006-12-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/spawn_with_feedback.cc:
 -	* glom/libglom/spawn_with_feedback.h:
 -	Replaced execute_command_line_and_wait_fixed_seconds() with
 -	execute_command_line_and_wait_until_second_command_returns_success(), so we
 -	can use pg_ctl status to check whether postmaster has started, instead of
 -	waiting an arbitrary number of seconds. This actually checks the stdout output (!)
 -	from pg_ctl, because I think that it always returns a success code, but I am
 -	not sure about that anymore.
 -
 -2006-12-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Makefile.am:
 -	* glom/glom.glade:
 -	* glom/libglom/Makefile.am:
 -	* glom/libglom/dialog_progress_creating.cc:
 -	* glom/libglom/dialog_progress_creating.h: Moved this class here,
 -	so we can use it from libglom, add add a set_message() method, so we can
 -	change the text for each use.
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/spawn_with_feedback.cc:
 -	* glom/libglom/spawn_with_feedback.h: Moved the spawn utility functions
 -	here from connectionpool.cc.
 -	execute_command_line_and_wait(): Added message parameter, shown in a
 -	dialog with a pulsing progress bar. The command-line command is run in a
 -	separate thread, which signals us with a Glib::Cond condition when it is
 -	finished, so we can update the UI in the meantime.
 -	* glom/application.cc:
 -	* glom/main.cc: Call g_threads_init(), so we can use mutexes.
 -
 -2006-12-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc: execute_command_line_and_wait(): Take a human-readable message,
 -	and show it in a dialog while we are waiting. This is not ideal, but better than nothing. What
 -	we really need is to do the spawn_command_line_sync() in another thread, and wait for that thread
 -	to finish.
 -
 -2006-12-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_new_database.cc:
 -	* glom/dialog_new_database.h: Added show_dialog_new_database() helper function.
 -	* glom/application.cc: on_document_load(): When opening from an example, which always requires
 -	database creation, show the self-host question dialog. This also allows the user to change the
 -	database title, which is OK.
 -
 -2006-12-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_new_database.cc:
 -	* glom/dialog_new_database.h: Added radio buttons, so the user can choose to self-host the
 -	database, or create it on an external server.
 -	* glom/Makefile.am:
 -	* glom/dialog_new_self_hosted_connection.cc:
 -	* glom/dialog_new_self_hosted_connection.h:
 -	* glom/glom.glade: Added a new dialog, asking for the name and password for the first super user,
 -	when creating a new self-hosted database.
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h: Added set_connection_is_self_hosted().
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h: Added create_self_hosting(), which creates
 -	the postgres files in a folder.
 -	* glom/frame_glom.cc: connection_request_password_and_choose_new_database_name():
 -	If the database should be self-hosted, ask for the initial details, and create it.
 -	* glom/dialog_connection.cc:
 -	* glom/dialog_connection.h: Added set_self_hosted_user_and_password(), because
 -	we currently use the connect_to_server_with_connection_settings() method from this
 -	class to actually connect. I should refactor that.
 -
 -
 -2006-12-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_connection.cc: load_from_document(): Disable the hostname entry
 -	when the document is marked as being self-hosting.
 -	connect_to_server_with_connection_settings(): Always use localhost as the hostname
 -	when opening a self-hosted document.
 -
 -2006-12-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in:
 -	* config.h.in: Add a --with-postgres-utils option, so we can specify the
 -	location of postmaster and pg_ctl.
 -	* glom/application.cc:
 -	* glom/application.h: Added stop_self_hosting_of_document_database().
 -	on_document_load(): Start self-hosting before asking for connection details,
 -	if the document is marked as self-hosting. Stop self-hosting if the connection
 -	fails.
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h: Added set_self_hosting(),
 -	start_self_hosting(), stop_self_hosting();
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h: Added get_connection_is_self_hosted(),
 -	and get_connection_self_hosted_directory_uri(). This bool is loaded from and
 -	saved to the document, though it is not yet changed to true by anything in the UI.
 -	Destructor: Stop self-hosting.
 -
 -2006-12-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.h: Remove unnecessary virtuals.
 -
 -2006-12-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* docs/user-guide/C/glom.xml: Add text for the help sections for the connection and connection error
 -	dialogs, with a link to the web page for setting up Postgres. Otherwise, people who have never seen
 -	the Download web page will have no idea what to do.
 -
 -1.3.4:
 -
 -2006-12-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/utils.cc: Fix SQL error when sorting doubly-related records, by always putting the
 -	GROUP BY in the correct position.
 -
 -1.3.3:
 -
 -2006-12-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/frame_glom.cc:
 -	* glom/libglom/utils.cc:
 -	* glom/libglom/utils.h:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc: For child relationships, add an extra
 -	GROUP_BY (on the key of the target table) to ensure that we only get distinct records, with
 -	no repeats.
 -
 -2006-12-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade:
 -	* glom/mode_data/dialog_layout_list_related.cc: Hide the title label and entry. They are too
 -	confusing here.
 -
 -2006-12-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/mode_data/dialog_layout_list_related.h:
 -	* glom/glom.glade: Add a checkbox that allows us to use child (related) relationships,
 -	which are then shown in the combobox.
 -	* glom/combobox_relationship.cc:
 -	* glom/combobox_relationship.h: set_relationships(): Add boolean parameter allowing
 -	us to show related relationships without showing the parent table name too.
 -	* glom/frame_glom.cc:
 -	* glom/libglom/document/document_glom.cc: When saving/loading portals, save/load all levels
 -	of relationships, by using the existing utiltity function for saving UsesRelationship objects.
 -	* glom/libglom/data_structure/layout/usesrelationship.cc:
 -	* glom/libglom/data_structure/layout/usesrelationship.h:
 -	Added get_title_used(), get_to_field_used(), get_relationship_name_used(),
 -	get_relationship_used_allows_edit(), so we can use this generically, regardless
 -	of the level of relationships used by, for instance, a portal or layoutitem_field.
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Add m_extra_join to FoundSet, for use when viewing records in a related relationship.
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h: refresh_data_from_database_with_foreign_key():
 -	When viewing a related relationship, specify an extra SQL join to make that possible, and adjust the
 -	WHERE clause too, providing these to the FoundSet object.
 -	* glom/libglom/utils.cc:
 -	* glom/libglom/utils.h: build_sql_select_with_where_clause(): Add extra_join parameter, specified when
 -	doing view of related relationship records.
 -
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc: refresh_from_database(): Provide the FoundSet
 -	extra_join to build_sql_select_with_where_clause().
 -	* glom/reports/report_builder.cc:
 -	* glom/utility_widgets/flowtablewithfields.cc: Use the generic UsesRelationship methods rather than
 -	extracting the main relationship and using that specifically, so we can adapt to related realationship
 -	portals, and even in future support >2 levels of relationships.
 -
 -1.3.2:
 -
 -2006-12-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc: get_related_record_exists():
 -	* glom/mode_data/box_data_list_related.cc: refresh_data_from_database():
 -	In WHERE clauses, specify the table name, to avoid ambiguity when two of
 -	the tables have the same field names. This avoids a SQL error.
 -
 -2006-12-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade: Start dialog: Change the packing options for the Entry, to
 -	try to stop the lines from breaking unnecessarily, but this does not seem to
 -	have any effect on it. Bug #369602 from Javier F. Serrador.
 -
 -2006-12-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list.cc: create_layout_add_group(): Check that fields
 -	exist before adding them as columns, to avoid SQL errors when we have failed
 -	(we should not fail) to rename something everywhere.
 -
 -2006-11-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/python_embed/glom_python.cc: glom_evaluate_python_function_implementation():
 -	Use Py_CompileString() and PyImport_ExecCodeModule() to make library scripts available
 -	for import. It works too.
 -
 -2006-11-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* po/POTFILES.in: Added new files so they can be translated.
 -
 -2006-11-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/python_embed/glom_python.cc: Added some commented-out experiments into
 -	making the script library importable from our Python scripts.
 -
 -2006-11-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in:
 -	* glom/Makefile.am:
 -	* glom/frame_glom.cc:
 -	* glom/glom.glade:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_design/Makefile.am:
 -	* glom/mode_design/script_library/Makefile.am:
 -	* glom/mode_design/script_library/dialog_new_script.cc:
 -	* glom/mode_design/script_library/dialog_new_script.h:
 -	* glom/mode_design/script_library/dialog_script_library.cc:
 -	* glom/mode_design/script_library/dialog_script_library.h:
 -	The UI for a script library now works, and it is saved and loaded in the
 -	document. Now I just need to make the embedded python able to import these
 -	modules.
 -
 -2006-11-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc:
 -	* glom/glom.glade:
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/mode_design/dialog_script_library.cc:
 -	* glom/mode_design/dialog_script_library.h: Works slightly more.
 -	Yes, I shouldn't check stuff in before it is finished.
 -
 -2006-11-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	* glom/glom.glade:
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h:
 -	* glom/mode_design/Makefile.am:
 -	* glom/mode_design/dialog_script_library.cc:
 -	* glom/mode_design/dialog_script_library.h: Partial implementation of the UI
 -	for a reusable python script library.
 -
 -1.3.1:
 -
 -2006-11-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h: Added get_document_format_version()
 -	and get_latest_known_document_format_version().
 -	load_after(): Check the document format version, and fail if it is higher than
 -	we know about.
 -	save_before(): Save the document format version (as the latest known) when
 -	saving changes.
 -	* glom/frame_glom.cc: on_menu_userlevel_Developer(): When going into developer
 -	mode, warn that you might not be able to open the changed document with older
 -	versions of Glom.
 -
 -2006-11-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc: connect(): Remember the port after the first
 -	successful connection (even to the default database), and always try that first
 -	when connecting again, only trying the extra ports if it fails or if no port
 -	was remembered. This halves the number of connection attempts made.
 -	Bug #368787 (Craig Keogh).
 -
 -2006-11-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: get_find_where_clause_quick():
 -	* glom/mode_data/box_data.cc: get_find_where_clause():
 -	Put quotes around the table names and field names, to avoid SQL errors when
 -	using names with, for instance, capital letters.
 -	Bug #375605 from William Manley.
 -
 -2006-11-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade: Revert unrelated changes introduced by the patch from
 -	Johannes. The left-alignment of labels had been removed. I guess that this
 -	might have been caused by glade-3.
 -
 -2006-11-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade: Translations window: Use a regular HBox instead of
 -	a ButtonBox, because the ButtonBox leaves lots of empty space so it
 -	looks odd.
 -	* glom/translation/window_translations.cc: on_button_export():
 -	Append the .po extension if it is not already in the filename.
 -
 -2006-11-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Added an AC_CHECK_MEMBER() check for the latest
 -	libggettextpo error-handling API, defining HAVE_GETTEXTPO_XERROR,
 -	so we can build with both the old and new APIs.
 -	* config.h.in: Added HAVE_GETTEXTPO_XERROR,
 -	defined in configure.
 -	* glom/translation/window_translations.cc: Use ifdefs to add
 -	alternative code for the older libgettextpo API.
 -
 -2006-10-26  Johannes Schmid <jhs gnome org>
 -
 -  Openismus Gmbh:
 -
 -	* glom/Makefile.am:
 -	Added -lgettext-po
 -
 -	* glom/glom.glade:
 -	Added Import/Export buttons to translation_window in a new buttonbox
 -
 -	* glom/translation/window_translations.cc:
 -	* glom/translation/window_translations.h:
 -	on_button_import(), on_button_export()
 -	Added the feature to export and import translation in po format using libgettext-po
 -
 -2006-10-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list.cc: create_layout(): Do not call
 -	m_AddDel.set_columns_ready() because we do that in fill_from_database(),
 -	and we do not want to do it twice.
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.h:
 -	Constructor: Call refresh_from_database(), and make
 -	refresh_from_database() a protected method, so that model creation is
 -	the only time that the SQL query is run.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: refresh_from_database():
 -	Just call construct_specified_columns(), to recreate the model, instead
 -	of trying to reuse the existing model via refresh_from_database(),
 -	because that was having some strange side-effects and seems complex to fix.
 -
 -2006-10-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h: Remove (empty) remove_all() method. It
 -	does not make sense for a TreeModel that just shows what is in a database result.
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_find/box_data_list_find.cc: Do not use DbAddDel::remove_all().
 -
 -2006-10-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/layout/layoutitem_button.cc:
 -	* glom/libglom/data_structure/layout/layoutitem_button.h: Added get_has_script()
 -	method for efficient convenience.
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h: Added set/get_child_text_node() utility
 -	methods.
 -	load_after(), load_after_layout_group(): Load button scripts, field calculations,
 -	and example row data from child text nodes instead of attribute values, to avoid
 -	problems with newlines in attributes when using the .glom file with a different
 -	XML parser.
 -	Fall back to the now-deprecated attribute values if no child text node was found.
 -	save_before(), save_before_layout_group(): Save as child text nodes.
 -	Bug #357567.
 -
 -2006-10-19  Johannes Schmid <jhs gnome org>
 -
 -	* glom/main.cc: Added --debug_sql argument
 -
 -	* glom/application.cc:
 -	* glom/application.h:
 -	Added a global application instance which is available to all modules via the static
 -	Application::get_application() method
 -	Added get/set_sql_debug()
 -	Remove File->Exit, to simplify Glom by not supporting muliple documents per instance.
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/libglom/python_embed/Makefile.am:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	Added debugging code for sql statements.
 -
 -	* glom/libglom/python_embed/py_glom_relatedrecord.cc:
 -	Added debugging code but commented out for now because of linking issues. The debug
 -	flag needs to link against application.lo
 -
 -2006-10-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Check for libgtksourceviewmm-1.0.
 -	* glom/main.cc: Initialize gtksourceviewmm.
 -	* glom/glom.glade: Use a GtkSourceView instead of a TextView for
 -	calculated fields and the buttons script.
 -	* glom/layout_item_dialogs/dialog_buttonscript.h:
 -	* glom/mode_design/fields/dialog_fieldcalculation.cc:
 -	* glom/mode_design/fields/dialog_fieldcalculation.h:
 -	* glom/mode_design/fields/dialog_fielddefinition.h: Use a GtkSourceView
 -	instead of a TextView for calculated fields and the buttons script, and
 -	set the language as python.
 -	Patch from bug #346896, with much help from Johannes Schmid and
 -	Dodji Seketeli.
 -
 -This is the HEAD branch for new features.
 -See the glom-1-2 branch for bug-fixes without new features.
 -
 -1.2.0:
 -
 -2006-10-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_film_manager.glom: Mark this as an example, so users are
 -	asked to save a copy. I think this had example data once too, but it is gone
 -	now.
 -
 -2006-10-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/dialog_layout_list.cc:
 -	* glom/mode_data/dialog_layout_list.h: Remove warn_about_images()
 -	and don't use it in on_button_add_field() and on_button_edit_field().
 -	* glom/utility_widgets/imageglom.cc:
 -	* glom/utility_widgets/imageglom.h: Make scale_keeping_ratio() public,
 -	so we can use it from elsewhere, and check for null pixbufs.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: treeviewcolumn_on_cell_data():
 -	Show pixbufs too, so that Image fields show up in the list view too.
 -
 -2006-10-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/fields/box_db_table_definition.h: Added field_has_non_unique_values().
 -	change_definition(): If a field is being set to primary key,
 -	use field_has_non_unique_values() to check and warn, to avoid an error from Postgres.
 -	Bug #362895.
 -
 -2006-10-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h: Added forget_layout_record_viewed().
 -	* glom/mode_design/fields/box_db_table_definition.cc: change_definition(): When
 -	changing whether a field is the primary key, use forget_layout_record_viewed()
 -	so that we do not try to use an inappropriate key value with a different field.
 -
 -2006-10-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/fields/box_db_table_definition.h: Added field_has_null_values().
 -	change_definition(): If a field is being set to primary key,
 -	use field_has_null_values() to check and warn, to avoid an error from Postgres.
 -	Bug #362838.
 -
 -1.1.7:
 -
 -2006-10-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* docs/user-guide/C/glom.xml: Added the section on the use of the full pygda
 -	API, from the wiki. We need to just publish the docbook to the web somehow
 -	instead.
 -
 -2006-10-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc: on_flowtable_script_button_clicked():
 -	Check whether the current record still exists after the script has run,
 -	and signal that it was deleted if necessary.
 -
 -2006-10-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.cc: load_after_layout_group(): When
 -	loading the portal navigation relationship, create the object before passing
 -	it to load_after_layout_item_usesrelationship(). This should have crashed
 -	before. Also, pass in the related table name, not the parent table name,
 -	so that the relationship can be found.
 -
 -2006-10-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/fields/box_db_table_definition.cc: on_adddel_edit():
 -	Make sure that the details dialog is transient for the current window.
 -	* glom/utility_widgets/dialog_properties.cc: Constructor: Call set_modal(),
 -	so that these windows are actually usuable when opened from other modal
 -	windows, such as dialogs. This was a bug that I introduced when I changed the
 -	base class from Dialog to Window. Fixed now.
 -
 -2006-10-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom.desktop.in.in: Added MimeType entry, so Glom should really be used
 -	to open .glom documents. Thanks to Denis Leroy.
 -
 -2006-10-12  Johannes Schmid <jhs gnome org>
 -
 -	* glom/main.cc: Fixed gnome_program_init to use PACKAGE and VERSION
 -	instead of PACKAGE_NAME and PACKAGE_VERSION
 -
 -	Fixes (#349357) with special thanks to Don Scorgie
 -
 -2006-10-12  Johannes Schmid <jhs gnome org>
 -
 -	For Openismus Gmbh (now that it's finally in place ;-)
 -
 -	* docs/user-guide/C/glom.xml:
 -	Added ids for all dialogs to be filled with a documentation
 -
 -	* docs/user-guide/Makefile.am:
 -	* docs/user-guide/glom.omf.in:
 -	* docs/user-guide/glom-C.omf.in (removed):
 -	Mostly fixed documentation generation. There is still an issue with
 -	scrollkeeper but I hope I get this fixed soon.
 -
 -	* glom/application.cc:
 -	* glom/base_db.cc:
 -	* glom/dialog_invalid_data.cc:
 -	* glom/frame_glom.cc:
 -	* glom/layout_item_dialogs/dialog_group_by.cc:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/mode_design/users/dialog_users_list.cc:
 -	* glom/translation/window_translations.cc:
 -	* glom/utility_widgets/datawidget.cc:
 -	Use dialog_run_with_help for all dialogs that contain help
 -	buttons.
 -
 -	* glom/libglom/utils.h:
 -	* glim/libglom/utils.c:
 -	Added Utils::show_help which calls gnome_help_display and does
 -	some error handling.
 -	Added Utils::dialog_run_with_help with runs a dialog and return the
 -	Gtk::Reponse. If the user clicked help the dialog is kept up and a
 -	help browser is launched.
 -
 -1.1.6:
 -
 -2006-10-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/python_embed/py_glom_record.cc: Actually implement the
 -	record.connection attribute. This is incredibly easy with pyobject_new().
 -	Added a record.table_name attribute.
 -	See http://www.glom.org/wiki/index.php?title=Calculated_Fields_API#Using_the_full_pygda_API
 -	to see the wonderful things this makes possible.
 -
 -2006-10-09  Daniel Holbach  <daniel holbach ubuntu com>
 -
 -	* glom/mode_data/dialog_layout_list_related.h: Removed the class prefix from
 -	the method declaration, to fix the build.
 -
 -2006-10-09  Murray Cumming  <murrayc murrayc com
 -
 -	* glom/mode_data/notebook_data.cc: init_db_details(): Do not bother
 -	checking that the remembered record is in the found set if we are looking
 -	at all records.
 -
 -2006-10-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Added get_primary_key_is_in_foundset().
 -	* glom/mode_data/notebook_data.cc: init_db_details(): Do not bother
 -	checking whether the found set has changed, because it has always
 -	changed when we are navigating to a different table. Therfore, always
 -	try to view the last-viewed record for the table. But use
 -	get_primary_key_is_in_foundset() to prevent showing a not-found record
 -	when doing a find.
 -	* glom/reports/report_builder.cc: Put parts of the where clause in
 -	brackets, so that the AND has the desired effect, though I do not know
 -	of any bug caused by this.
 -
 -2006-10-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/python_embed/glom_python.cc:
 -	* glom/python_embed/glom_python.h:
 -	glom_execute_python_function_implementation(): Added Gda::Connection parameter,
 - 	which is passed to PyGlomRecord_SetFields().
 -	* glom/libglom/python_embed/py_glom_record.cc:
 -	* glom/libglom/python_embed/py_glom_record.h:
 -	Record_getseters(): Added connection attribute to the python object, so
 -	that scripts can use the pygda API on the underlying database.
 -	BUT: This just returns None at the moment.
 -	PyGlomRecord_SetFields(): Take an extra connection parameter.
 -	* glom/base_db.cc: calculate_field():
 -	* glom/layout_item_dialogs/dialog_buttonscript.cc: on_button_test():
 -	* glom/mode_data/box_data.cc: set_primary_key_value():
 -	* glom/mode_data/box_data_details.cc: on_flowtable_script_button():
 -	* glom/mode_design/fields/dialog_fieldcalculation.cc: on_button_test():
 -	Pass the extra connection parameter when calling
 -	glom_evaluate_python_function_implementation().
 -
 -1.1.5:
 -
 -2006-10-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc: on_flowtable_script_button_clicked():
 -	Refresh the view after the script has run, in case the script changed the data,
 -	so we can see the new data.
 -
 -2006-10-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/mode_data/dialog_layout_list_related.h:
 -	* glom/glom.glade: Related Records layout: Add a Navigation frame,
 -	allowing the user to choose the default navigation (based on the shown
 -	fields and whether their tables are hidden, or manually choosing a relationship.
 -	This is needed when the automatic choice is not appropriate, though it often is.
 -	* glom/libglom/data_structure/layout/layoutitem_portal.cc:
 -	* glom/libglom/data_structure/layout/layoutitem_portal.h:
 -	Added set/get_navigation_relationship_specific().
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h: Saved the extra portal information.
 -	* glom/base_db.cc:
 -	* glom/base_db.h: get_field_is_from_non_hidden_related_record(),
 -	get_field_identifies_non_hidden_related_record():  Move these here
 -	from Box_Data_List_Related.
 -	Added get_portal_navigation_relationship_automatic(),
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h: get_suitable_record_to_view_details():
 -	Use the specified relationship if appropriate, and reuse the methods used to show
 -	the automatic navigation choice in the layout dialog.
 -	* glom/mode_data/dialog_layout.cc:
 -	* glom/mode_data/dialog_layout.h: Added the make_sensitivity_depend_on_toggle_button()
 -	convenience method.
 -
 -2006-10-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/Makefile.am:
 -	* glom/utility_widgets/imageglom.cc: Moved value->pixbuf
 -	conversion code from here to:
 -	* glom/libglom/data_structure/glomconversions.cc:
 -	* glom/libglom/data_structure/glomconversions.h:
 -	* glom/utility_widgets/db_adddel/cellrenderer_button.cc:
 -	* glom/utility_widgets/db_adddel/cellrenderer_button.h: renamed
 -	to
 -        * glom/utility_widgets/db_adddel/cellrenderer_buttonimage.cc:
 -	* glom/utility_widgets/db_adddel/cellrenderer_buttonimage.h:
 - 	Added:
 -        * glom/utility_widgets/db_adddel/cellrenderer_buttontext.cc:
 -	* glom/utility_widgets/db_adddel/cellrenderer_buttontext.h:
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h: add_column() now
 -	take a LayoutItem rather than only a LayoutItem_Field, so that
 -	the list can in future show other items, such as buttons.
 -	* glom/libglom/data_structure/layout/layoutgroup.cc:
 -	* glom/libglom/data_structure/layout/layoutitem.cc:
 -	* glom/libglom/data_structure/layout/layoutitem.h:
 -	* glom/libglom/data_structure/layout/layoutitem_field.cc:
 -	* glom/libglom/data_structure/layout/layoutitem_field.h:
 -	* glom/libglom/data_structure/layout/layoutitem_image.h:
 -	* glom/libglom/data_structure/layout/layoutitem_portal.cc:
 -	* glom/libglom/data_structure/layout/layoutitem_portal.h:
 -	* glom/libglom/utils.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h: Adapted.
 -
 -2006-10-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: append_column():
 -	Use set_fixed_width(), followed by set_resizable(), instead of
 -	set_min_width, so columns can be made smaller too.
 -
 -2006-10-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/utils.cc: build_sql_select_with_where_clause():
 -	Define the first-level relationship (via a LEFT OUTER JOIN) of
 -	a related relationship, even if no fields from the intermediate
 -	relationship are shown, to avoid a SQL error and subsequent
 -	crash.
 -
 -1.1.4:
 -
 -2006-10-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/sharedptr.h: cast_*(): Make the new sharedptr
 -	share the refcount with the original, avoiding early deletions of
 -	the object that they share. That was stupid of me.
 -	* glom/libglom/test_sharedptr_layoutitem.cc: More testing.
 -
 -2006-10-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/Makefile.am:
 -	* glom/libglom/test_sharedptr_layoutitem.cc: Added test.
 -
 -2006-10-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.cc: add_column(): Do an extra,
 -	probably unnecessary, check for a null field before dereferencing it.
 -	construct_specified_columns(): Do not clone the field - just use it.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	get_data_layout_groups_plus_new_fields(): When building a default
 -	layout, because no layout is defined, store that layout in the
 -	document (saving it to disk when in developer mode). This fixes a
 -	dereference of a deleted field, though that should not be necessary
 -	so I suspect a fundamental sharedptr problem. But luckily, this
 -	is the correct thing to do anyway, for efficiency, and so that
 -	layout data is preserved.
 -
 -2006-10-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: get_table_fields_to_show_for_sequence_add_group(),
 -	Do not clone the layout items - just supply the originals, so that
 -	we can store some data in them and have that data preserved for next
 -	time. This should also be more efficient because it does less
 -	object copying and therefore less memory copying.
 -	* glom/libglom/data_structure/layout/layoutitem_field.cc:
 -	* glom/libglom/data_structure/layout/layoutitem_field.h: Added
 -	get/set_display_width() which is not saved in the document for now.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h: add_column() Take a
 -	non-const layout item, so that we can store the display_width
 -	in it, in property changed signal for the ViewColumn width
 -	property. Use any previously set display_width when creating the
 -	columns.
 -	This means that columns widths are remembered when navigating
 -	between tables. Bug #358089 from Peter Williams.
 -
 -2006-10-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc: get_find_where_clause():
 -	When multiple fields are specified in a Find, join them together
 -	in the SQL where clause with AND, instead of just joining them
 -	together, because that would be an invalid SQL statement. Obviously.
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	refresh_from_database(): When the SQL command fails, output it to
 -	stdcerr, to help debugging.
 -
 -1.1.3:
 -
 -2006-10-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/utils.cc: string_separate(): Correct an if so that
 -	we really check for quoted separators when specified. This fixes a loss
 -	of rows when adding example data from an example glom file.
 -
 -2006-09-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/dialog_add_related_table.cc:
 -	* glom/mode_design/dialog_add_related_table.h:
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Moved get_relationship_exists() here
 -	so it can be used from frame_glom.cc.
 -	* glom/frame_glom.cc: on_dialog_add_related_table_response():
 -	Check the inputs here instead of in on_response() of the dialog,
 -	because we can not stop a dialog from finishing. Instead we
 -	show it again.
 -	* glom/glom.glade: Change the dialog text slightly.
 -	* po/POTFILES.in: Mentioned dialog_add_related_table.cc.
 -
 -2006-09-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/dialog_design.cc:
 -	* glom/mode_design/dialog_design.h: Derive from Window instead
 -	of Dialog, because that is what it is in the .glade file, and
 -	that is how it is used.
 -	* glom/application.cc:
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Added create_table_with_default_fields(),
 -	moving code from box_tables.cc.
 -	* glom/navigation/box_tables.cc: on_adddel_Add(): Call
 -	create_table_with_default_fields() to simplify code.
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h: Added add_table((),
 -	so that create_table_with_default_fields() can update the
 -	document immediately each time.
 -	* glom/libglom/utils.cc:
 -	* glom/libglom/utils.h: Added string_remove_prefix().
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h: Added do_menu_developer_fields() and
 -	called it from on_menu_developer_fields(), so we can show the
 -	fields dialog from other places.
 -	* glom/mode_design/Makefile.am:
 -	* glom/glom.glade:
 -	* glom/mode_design/dialog_add_related_table.cc:
 -	* glom/mode_design/dialog_add_related_table.h:
 -	Added Tables/Add-Related-Table menu item, to quickly create
 -	a related table and a relationship to it. Bug #355975.
 -
 -1.1.2:
 -
 -2006-09-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h:
 -	get_field_identifies_non_hidden_related_record(): Return the relationship
 -	used by the field, and use this to navigate to the related record
 -	even if no doubly-related field is show. For instance, this allows
 -	navigation when showing a product id, but not showing the product
 -	description.
 -
 -2006-09-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list_related.cc:
 -	get_suitable_record_to_view_details(): If the ID is invalid, because
 -	no such record exists, warn the user with a dialog.
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	on_portal_user_requested_details(): Do not bother signalling further if
 -	the primary key is empty.
 -
 -1.1.1:
 -
 -2006-09-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h: Add show_hints_model(), which
 -	shows a single row, with a hint about editing the layout of the list or
 -	related records portal, if no fields have been specified yet.
 -	Bug #354073 from Peter Williams.
 -
 -2006-09-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/document/document_glom.cc:
 -	* glom/libglom/document/document_glom.h: Override set_file_uri() to avoid
 -	the call to set_modified() triggering a save of the file to the old filename.
 -	This is necessary because we override/hack set_modified().
 -
 -2006-09-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: App_Glom::recreate_database(): Add the standard groups
 -	after creating the tables, instead of once for every table. This should be
 -	more efficient.
 -
 -2006-09-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade: Field calculation editor, and button script editor:
 -	Mark the label with the first part of the calculation as not for translation.
 -	Layout editors: Add tooltips to explain what the buttons do.
 -	This partly addreses bug #354073 from Peter Williams.
 -
 -2006-09-17  Murray Cumming  <murrayc murrayc com>
 -
 -        * glom/utility_widgets/db_adddel/db_adddel.cc:
 -        * glom/utility_widgets/db_adddel/db_adddel.h: Added get_fixed_cell_height().
 -        construct_specified_columns() Use CellRenderer::set_fixed_size(), using
 -        get_fixed_cell_height(), which asks Pango how high some example text should
 -        be. This should prevent multiline rows, and might be necessary for optimization
 -
 -2006-09-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/glom.glade: Field Formatting: For text fields, added a
 -	spin button to specify the number of lines to show.
 -	* glom/libglom/data_structure/layout/fieldformatting.cc:
 -	* glom/libglom/data_structure/layout/fieldformatting.h: Added
 -	get/set_text_format_multiline_height_lines(), which defaults to
 -	6.
 -	* glom/layout_item_dialogs/box_formatting.cc:
 -	* glom/layout_item_dialogs/box_formatting.h:
 -	enforce_constraints(): Only make the new spin button sensitive
 -	when the multiline checkbox is checked.
 -	get/set_formatting(): get/set the new value to interpret and
 -	present it.
 -	* glom/libglom/document/document_glom.cc:
 -	save_before_layout_item_field_formatting(),
 -	load_after_layout_item_field_formatting(): Handle the new option.
 -	* glom/utility_widgets/datawidget.cc: Constructor: If the
 -	field is multiline text, ask pango how high it should be,
 -	based on the new option.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: construct_specified_columns():
 -	Use an ellipsize on text cells when their text is too long. This will be
 -	more likely with multiline fields.
 -
 -This is the HEAD branch, for Glom 1.2.
 -There is also a glom 1.0 branch for maintenance.
 -
 -1.0.5:
 -
 -2006-09-11  Murray Cumming,  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:  Base_DB::create_table(): Quote the field names to avoid a postgres error when
 -	creating the table with an id field based on a table name with special characters such as -.
 -
 -2006-09-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* docs/user-guide/C/glom.xml: Fixed some validation problems.
 -	* examples/Makefile.am: Add all example files to EXTRA_DIST, to fix distcheck.
 -
 -2006-09-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/fields/box_db_table_definition.h:
 -	* glom/mode_design/fields/box_db_table_definition.cc: Moved some checks from on_adddel_changed()
 -	to check_field_change(), and added a check for an existing primary key, so we can give a nice
 -	refusal warning to the user instead of a postgres error. This is then used from on_adddel_changed()
 -	and on_Properties_apply(). Bug #350636.
 -
 -2006-09-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade: dialog_connection: Use underline mnemonics for the labels
 -	and mark them as labels for the entries, for accessibility. Also use an underline
 -	mnemonic for the Connect button. Bug #349357 from Ryan Paul.
 -
 -2006-09-09  Fryderyk Dziarmagowski  <freetz gmx net>
 -
 -	* configure.in: Added update-mime-database configure option which sets/unsets UPDATE_MIME_DATABASE.
 -	* Makefile.am: Do not update the mime database if UPDATE_MIME_DATABASE is not set.
 -	This is apparently helpful for distro packagers, and other GNOME source tarballs have the same thing.
 -	Bug #351989.
 -
 -2006-09-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: insert_example_data(): Use the new ignore_quoted_separators
 -	option with Utils::string_separate() so we are not confused by nested newlines.
 -	And check for newlines in the resulting row so we can ignore those rows as errors.
 -	* glom/libglom/utils.cc: string_separate(): More efficient implementation when ignoring
 -	quoted separators, doing less memory copying.
 -
 -2006-09-08  Johannes Schmid <jhs gnome org>
 -
 -	* glom/utility_widgets/datawidget.cc: DataWidget::on_button_choose_date():
 -	Fixed #349359 (Dates added with the calendar dialog are not preserved), by
 -	emitting the edited signal.
 -
 -2006-08-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/utils.cc:
 -	* glom/libglom/utils.h: separate_strings(): Added optional
 -	ignore_quoted_separators bool parameter. Added incredibly slow
 -	implementation, allowing us to handle example_rows data with
 -	newlines in text data. This is necessary because the newlines are also
 -	used to separate the field values. This is really slow and must be
 -	improved.
 -
 -2006-08-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc: on_button_new(): Do not
 -	dereference a null field, to avoid crashing when adding a record when
 -	there is no primary key.
 -
 -2006-08-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc: Frame_Glom::create_database():
 -	When Gda::Connection::create_database() fails, output a more exact
 -	error message for debugging. Added comment mentioning that,
 -	when this fails, it might be due to installation of the unstable
 -	libgda, which might not do a completely parallel install.
 -
 -2006-06-25  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/application.cc: App_Glom::App_Glom(): Catch the exception if
 -	the icon file is not found, though it will not happen if Glom is
 -	properly installed.
 -	* glom/frame_glom.cc: create_database(): Print a debug message if
 -	this fails, as well as showing the dialog.
 -	* icons/glom_icon_large.png: Updated.
 -
 -2006-06-22  Murray Cumming <murrayc murrayc com>
 -
 -	* examples/Makefile.am:
 -	* examples/example_music_collection.glom: Added a new simple example.
 -
 -2006-06-21  Murray Cumming <murrayc murrayc com>
 -
 -	* docs/user-guide/C/figures/glom_design_fields.png:
 -	* docs/user-guide/C/figures/glom_design_fields_dialog_calculated.pn
 -	g: Added screenshots for use in the user guide.
 -	* docs/user-guide/C/figures/start.png: Updated.
 -	* docs/user-guide/C/glom.xml: Added Calculated Fields appendix, based
 -	on the content in the Wiki.
 -
 -2006-06-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* gnome-doc-utils.make: Hmm, now gnome-doc-utils.make _does_ seem
 -	to be being autogenerated, by gnome-doc-prepare --force.
 -	So I removed it from cvs again. Bug #345458.
 -
 -2006-06-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Fixed typo to fix the build.
 -	* examples/example_project_manager.glom: Added some tables and
 -	relationships and related records portals.
 -
 -2006-06-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* gnome-doc-utils.make: Restore this file, because it does
 -	not in fact seem to be autogenerated by anything.
 -	* configure.in: Added AM_CONDITIONAL for SK_ENABLE, needed by the
 -	new (copied from gnome-doc-utls) version of gnome-doc-utils.make.
 -	* examples/Makefile.am:
 -	* examples/example_film_manager.glom:
 -	* examples/example_project_manager.glom: Added new examples.
 -	The project manager one is not started yet.
 -
 -2006-06-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* add1000.patch: Removed old test patch from cvs.
 -	* gnome-doc-utils.make: Removed generated file from cvs.
 -
 -2006-06-14  Elijah Newren  <newren gmail com>
 -
 -	* glom/base_db.cc:
 -	* glom/combobox_relationship.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/reports/report_builder.cc:
 -	* glom/utility_widgets/comboglom.cc:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	Fix unused variable warnings.  #344815
 -
 -2006-06-14  Elijah Newren  <newren gmail com>
 -
 -	* autogen.sh: Don't hardcode for autoheader2.50 and autoconf2.50
 -	especially since it works with newer versions too.  #344807.
 -
 -2006-05-29  Kjartan Maraas  <kmaraas gnome org>
 -
 -	* configure.in: Added nb to ALL_LINGUAS.
 -
 -2006-05-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* Changed namespaces:
 -	GlomUtils to Glom::Utils.
 -	GlomConversions to Glom::Conversions.
 -	GlomPrivs to Glom::Privs.
 -
 -2006-05-27  Murray Cumming  <murrayc murrayc com>
 -
 -	Almost all files: Put everthing in the Glom namespace.
 -
 -2006-05-26  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Makefile.am:
 -	* glom/application.cc:
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/frame_glom.cc:
 -	* glom/glom_postgres.cc:
 -	* glom/glom_postgres.h:
 -	* glom/glom_privs.cc:
 -	* glom/glom_privs.h:
 -	* glom/libglom/utils.cc:
 -	* glom/libglom/utils.h:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/mode_design/users/dialog_users_list.cc:
 -	* glom/navigation/box_tables.cc: Moved static methods from
 -	Base_DB to GlomPrivs, GlomPostgres and GlomUtils.
 -
 -2006-05-26  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Makefile.am:
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/glom_postgres.cc:
 -	* glom/glom_postgres.h:
 -	* glom/mode_design/fields/box_db_table_definition.cc: Moved
 -	Base_DB::postgres_*() methods into Glom_Postgres class which has
 -	only static methods. Just to keep things separate.
 -
 -2006-05-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/frame_glom.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/reports/Makefile.am:
 -	* glom/reports/report_builder.cc:
 -	* glom/reports/report_builder.h: Moved the Base_DB::report_*()
 -	methods into a ReportBuilder object and use an instantiation of
 -	that object wherever we would call report_builder. This is a start on
 -	reducing the insane size of base_db.[h|cc].
 -
 -1.0.4:
 -
 -2006-05-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom: Contacts reports: Restore the
 -	group-by fields. I wonder why these were lost.
 -
 -2006-05-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: report_build(): Try to catch the exception here,
 -	but it still crashes if there is a SQL error during report building.
 -
 -2006-05-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: report_build_records(): Add a space before LIMIT,
 -	to avoid it ever clashing with the ASC before it.
 -
 -2006-05-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Use IT_PROG_INTLTOOL instead of AC_PROG_INTLTOOL
 -	for intltool. It is apparently the new way.
 -
 -2006-05-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom.desktop.in.in: Remove the .png extension from the
 -	icon name, as advised by http://live.gnome.org/GnomeGoals/AppIcon .
 -	* glom/mode_design/fields/dialog_fieldcalculation.cc: Remove the [?]
 -	* icons/Makefile.am: Add EXTRA_DIST stuff to fix distcheck
 -	from the list of dependent relationships. It looks like an errror.
 -
 -2006-05-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* Makefile.am:
 -	* configure.in:
 -	* glom.png: Removed. We use the stuff in icons/ instead.
 -	* icons/Makefile.am:
 -	* icons/glom.png:
 -	* icons/glom.svg:
 -	* icons/glom_icon_large.png:
 -	* logo/glom_icon.png:
 -	* logo/glom_icon.svg:
 -	* logo/glom_icon.xcf:
 -	* logo/glom_icon_large.png: Moved files from logo/ to icons/ and
 -	used the Makefile snippet from
 -	http://live.gnome.org/GnomeGoals/AppIcon .
 -	Among other things, this means that the scalable icon is installed.
 -	glom.svg: I increased the size of the window shape and removed the
 -	database-cylinder shadow to prevent wasted space.
 -	glom.png was regenerated from the svg.
 -
 -2006-05-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* logo/glom_icon.svg: Change canvas size to 480x480, so I can use 10px sizes
 -	that will be 1px in the 48x48px icon.
 -
 -2006-05-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* logo/glom_icon.svg: Use the Tango color palette, though there is surely more
 -	to do to make it a tango icon.
 -
 -2006-05-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc: refresh_from_database():
 -	Handle Gda exceptions here so we can fail a bit more gracefully.
 -
 -2006-05-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: get_calculation_fields(): Check the relationships used by the
 -	calculation. If a relationship is used, report that the from-field should trigger the
 -	calculation.
 -	This did not actually need the big changes below, though they might be useful some
 -	time.
 -
 -2006-05-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Added predicate_LayoutItemIsEqual class for std::find_if.
 -	calculate_field(), set_field_value_in_database(), get_field_value_in_database(),
 -	do_calculations(), get_calculated_fields(), get_calculation_fields(),
 -	do_lookups(), refresh_related_fields(): Deal in LayoutItem_Field rather than Field,
 -	so we can trigger recalculations from related fields.
 -	Added LayoutFieldInRecord to replace FieldInRecord in most places. It preserves the
 -	parent table information.
 -	* glom/libglom/utils.cc:
 -	* glom/libglom/utils.h: Added build_sql_select_with_where_clause() and
 -	build_sql_select_with_key() that takes lists of non-const LayoutItems. This is
 -	annoying, but better than removing const from everywhere else.
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_design/fields/dialog_fieldcalculation.cc: Adapted to API changes.
 -
 -2006-05-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Rename get_record_field_values() to
 -	get_record_field_values_for_calculation() to make things clearer.
 -	* glom/libglom/python_embed/py_glom_related.cc: Related_tp_as_mapping_getitem():
 -	Leave key_value_sqlized as empty if there is no key value to find related records.
 -	* glom/libglom/python_embed/py_glom_relatedrecord.cc:
 -	PyGlomRelatedRecord_SetRelationship(): Leave key_value_sqlized as null if there is
 -	no key value to find related records.
 -	RelatedRecord_generic_aggregate(), RelatedRecord_tp_as_mapping_getitem(): Do not
 -	try to get related records if the key is empty. This then returns a Py_None when
 -	the python calculation tries to get related records. It could test for it, or just
 -	let the error cause an overall Py_None return result.
 -	* glom/python_embed/glom_python.cc: glom_execute_python_function_implementation:
 -	Check whether the result is Py_None. If it
 -	is then return a suitable empty value, instead of converting it to a string.
 -	* glom/libglom/data_structure/glomconversions.cc:
 -	* glom/libglom/data_structure/glomconversions.h:
 -	Remove get_empty_value_suitable_for_python().
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_details.cc: Use get_empty_value() instead of
 -	get_empty_value_suitable_for_python() because the python calculations
 -	(and our code for getting related records from python) do need to know whether non-text
 -	fields are empty.
 -
 -2006-05-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h: Added virtual set_primary_key_value(),
 -	so that record_new() can set the primary key as soon as it has been
 -	set in the database.
 -	record_new(): Take a row iterator, so we can update the list row.
 -	After inserting the record, set the primary key value,
 -	and do lookups and refresh-related so that the other row fields update.
 -	Return the datamodel.
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h: Override set_primary_key_value()
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h: Override set_primary_key_value().
 -	on_adddel_user_added(): Provide the row iterator to record_new() and to
 -	on_record_added().
 -	on_record_added(): Take the row iterator
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h: on_record_added(): Take the row iterator,
 -	to avoid a slow lookup to discover it.
 -
 -2006-05-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* autogen.sh: Use specific versions of aclocal, autoheader, autoconf, and automake,
 -	because the default version on Ubuntu Dapper (and probably Debian) does not have
 -	AM_PATH_PYTHON(). This should help people not using jhbuild, though I guess it might
 -	make life worse for others if those versioned executables are not present. Tell me if
 -	it is a problem.
 -
 -2006-05-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/connectionpool.cc:
 -	* glom/libglom/connectionpool.h: connect(): Attempt the connection on both
 -	port 5433 and 5432, to make life easier for Ubuntu Dapper users, because it
 -	defaults postgres 8.1 to port 5433. Bug #340836 from Paul Schulz.
 -
 -2006-05-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom: Invoices: Mark the invoice lines relationship as allowing
 -	editing, so that people can actually edit the invoice lines portal. Bug #340919 from Hendrik Richter.
 -
 -2006-05-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc: refresh_from_database(): Check for a null m_primary_key_field,
 -	to prevent a crash when editing the fields so that no field is a primary key.
 -
 -2006-05-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/data_structure/relationship.cc:
 -	* glom/libglom/data_structure/relationship.h: Added clone() methods, though we do not use them
 -	yet.
 -	* glom/libglom/sharedptr.h: operator==() check for equality, though this did not stop the crash.
 -	* glom/mode_data/dialog_choose_relationship.cc: select_item(): If the relationship is null,
 -	unselect all items.
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_details.h: offer_relationship_list(): Optionally take the current
 -	relationship as a parameter so that the current one is highlighted in the dialog. Just change the
 -	existing portal, instead of setting the portal in the model row, because this causes some kind of
 -	memory management confusion that caused a crash, and it is inefficient anyway. Bug #340888 from
 -	Hendrik Richter.
 -	Call row_changed() to tell the TreeView to update the display.
 -
 -2006-05-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: get_fields_for_table_from_database(): Report all primary keys are also
 -	being unique, because they all must be.
 -	postgres_change_column_extras(): When changing whether a field is a primary key, deal with
 -	the fact that the uniqueness was a side-effect of it being a primary key, and do not try
 -	to add/drop a non-existant uniqueness constraint, or specify uniqueness with both constraints.
 -	Also, use the correct postgres SQL syntax  for setting/unsetting whether a field is a primary
 -	key. It is very postgres specific.
 -	Return a modified version of the field definition, so that callers can display the new
 -	field definition correctly, so the constraints can be witnessed by the user.
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/fields/box_db_table_definition.h: on_adddel_changed(): Update the row to
 -	show any constraints enforced when changing the field definition. This makes primary keys always
 -	unique and unchecks unique when it removes primary key, though uniquness can then be specified
 -	separately.
 -	* glom/mode_data/box_data_list.cc: get_record_counts(): Avoid a segfault when the model is
 -	null, which happens at the moment when there is no primary key.
 -
 -2006-05-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: postgres_change_column_extras(): Really set/unset the uniqueness
 - 	constraint. This is very Postgres specific. We should do this with libgda one day, if it
 -	can do it.
 -
 -2006-05-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/python_embed/python_module/Makefile.am: Put some stuff in LIBADD instead of LDFLAGS.
 -	This seems to work, and seems to be necessary on cygwin. Bug #338844 from
 -	Yselkowitz.
 -
 -2006-05-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/adddel/adddel.cc: on_button_press_event_Popup(): Do not edit
 -	on double-click because it is annoying/confusing when the cells are editable on
 -	single click as well. This affects the table list, and the field list, all of which
 -	have a separate Open/Edit button.
 -
 -2006-05-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/libglom/Makefile.am: Put everything in LIBADD instead of some in LDFLAGS.
 -	This seems to work, and seems to be necessary on cygwin. Bug #338844 from
 -	Yselkowitz.
 -
 -2006-05-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* Makefile.am: Define ACLOCAL_AMFLAGS so that autoreconf works. Bug #338844 from
 -	Yselkowitz.
 -
 -2006-05-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtablewithfields.cc: Do not make notebook tab titles bold. It gets
 -	annoying when there are many tabs, and is not that helpful, as well as being non-HIG.
 -
 -2006-05-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/flowtablewithfields.h: Do not put the labels in Gtk::Alignments.
 -	They are not necessary. This should save a little memory and speed.
 -
 -2006-05-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtable.h: on_size_allocate(): Give the full max first-item width to
 -	first items, instead of just what they request, so that labels can expand and align in the
 -	actually-available space, so that xalign is useful.
 -	* glom/utility_widgets/flowtablewithfields.cc: add_field_at_position():
 -	Use label xalign and yalign instead of the Gtk::Aligment alignment, because it is not
 -	needed. Align labels left, though I previously was trying to align them right. Right alignment
 -	is untidy when using groups, because the entries do not line up across groups, and that would be
 -	very difficult to implement. The vertical alignment of labels seems to be neater now.
 -
 -2006-04-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h: show_table(): init_db_details(): Added optional primary_key_value_for_details
 -	parameter. Pass it to show_table().
 -	on_notebook_data_record_details_requested(): Pass the primary key value to show_table() instead of
 -	calling show_details() afterwards, so that Glom does not show intermediate layouts.
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_data/notebook_data.h: Added optional primary_key_value_for_details parameter and
 -	show the details layout with this record when it is specified.
 -
 -2006-04-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	* glom/utility_widgets/db_adddel/db_adddel_withbuttons.cc: Changes select_item() to
 -	take a LayoutItem_Field instead of an index, to simplify things.
 -	get_view_column_index(): Take the button column into account, so that, for instance,
 -	clicking Add on the list view doesn't sometimes activate the button, taking us to the
 -	details view instead.
 -
 -2006-04-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* regexxered some method names to all lowercase.
 -
 -2006-04-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Added check_entered_value_for_uniqueness()
 -	and get_field_value_is_unique() and get_field_value_in_database().
 -	set_entered_field_data(): Catch exceptions here, and return false, so that the
 -	caller can handle errors more easily and more immediately.
 -	* glom/mode_data/box_data_details.cc: on_flowtable_field_edited():
 -	* glom/mode_data/box_data_list.cc: on_adddel_user_added(), on_adddel_user_changed():
 -	Warn the user if the new value would not be unique, if it needs to be. This adds a new
 -	translatable string, but the new string replaces an untranslated error message from
 -	Postgres.
 -
 -1.0.3:
 -
 -2006-04-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc:  on_notebook_find_criteria(): Show a busy cursor while waiting
 -	for the results.
 -	on_menu_Mode_Find(): Show a busy cursor while showing the appropriate view, because it
 -	takes a long time to do that, unfortunately.
 -
 -2006-04-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtablewithfields.cc: add_layout_notebook_at_position():
 -	Use add_layoutwidgetbase(portal) so that we connect signals, so that we save portal
 -	layout changes to the document.
 -
 -2006-04-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: handle_error():
 -	* glom/libglom/connectionpool.cc: handle_error(): Print more detailed information about
 -	exceptions to stderr.
 -
 -2006-04-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc: refresh_from_database():
 -	Return false if the query returns no records, so that on_notebook_find_criteria()
 -	can offer a new find if none are found.
 -	* glom/application.cc: set_mode_find(): Actually activate the find action, not the
 -	data action, so that a second find really works.
 -
 -2006-04-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/dialog_layout_details.cc: on_button_field_formatting():
 -	Set m_modified so that the new formatting is actually used.
 -
 -2006-04-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtablewithfields.cc: on_datawidget_layout_item_added():
 -	Add a LayoutItem to the LayoutGroup of the flowtable, which is shared with the document,
 -	and just let the parent rebuild the layout, instead of adding the actual widget here,
 -	and expecting the parent to read layout from that. This makes right-click adding work
 -	again.
 -
 -2006-04-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in:
 -	* glom/Makefile.am:
 -	* po/POTFILES.in:
 -	* many files: Moved data_structure, document, and part of python_embed directories
 -	into libglom, so that the glom python module does not need to use symbols in the
 -	glom executable, because this is not allowed in cygwin, using --no-undefined.
 -	In future, this can be used as public API to make the document/database structure
 -	available to separate utilities and a web UI.
 -
 -2006-04-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/field.cc: get_type_name_ui(): Actually return
 -	the translated string instead of the string for SQL. This prevents an error+crash
 -	when adding a field in any locale that has been translated. Kind of important.
 -
 -2006-04-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/layout_item_dialogs/Makefile.am:
 -	* glom/layout_item_dialogs/dialog_buttonscript.cc:
 -	* glom/layout_item_dialogs/dialog_buttonscript.h:
 -	* glom/layout_item_dialogs/dialog_textobject.cc:
 -	* glom/layout_item_dialogs/dialog_textobject.h:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_design/Makefile.am:
 -	* glom/mode_design/dialog_buttonscript.cc:
 -	* glom/mode_design/dialog_buttonscript.h:
 -	* glom/mode_design/dialog_textobject.cc:
 -	* glom/mode_design/dialog_textobject.h: Moved these dialog classes into
 -	the layout_item_dialogs/ directory where they belong.
 -
 -2006-04-26  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/dialog_choose_id.cc: on_box_find_criteria:
 -	Set the table name in the FoundSet, so that the init_db_details() can succeed,
 -	and not falsely say that there are no results.
 -
 -2006-04-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/glomconversions.cc: Use memset to zero the tm structures,
 -	to fix a build problem with cygwin. Bug #338844 from Yselkowitz.
 -
 -1.0.2:
 -
 -2006-04-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/glom.glade:
 -	* glom/utility_widgets/dialog_choose_date.cc:
 -	* glom/utility_widgets/dialog_choose_date.h: New dialog, for choosing a date
 -	from a calendar.
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/datawidget.h: Constructor: Add a ... button next to
 -	dates so people can choose the date from a calendar. This might help to give clues
 -	about a strange locale bug that someone is experiencing with date fields.
 -
 -1.0.1:
 -
 -2006-04-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: add_standard_groups(): Do not grant developer access to a
 -	table if the table does not exist yet. This avoids the failure during the first
 -	creation of the first example (though a second try worked.)
 -
 -2006-04-01  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: Added get_table_names(), using get_tables().
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Renamed get_table_names() to get_table_names_from_database(),
 -	to be more explicit.
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	* glom/navigation/box_tables.cc: Call the appropriate get_table_names*(), so we
 -	never show table names that are not in the document, because that usually leads to
 -	problems later.
 -
 -2006-04-01  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/navigation/box_tables.cc: on_adddel_Add(): If the table exists on the server,
 -	then try to reuse it and store it in the document. This should never happen, but it
 -	was just useful to me when I lost a more recent copy of my .glom document. It adds a
 -	translatable string, but users should never see this dialog anyway.
 -
 -1.0.0:
 -
 -2006-03-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list_related.cc: get_fields_to_show() Really make fields
 -	non-editable if the relationship does not allow editing.
 -
 -2006-03-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_connection.cc: load_from_document(): Use localhost if the host name is
 -	empty.
 -	* glom/frame_glom.cc: connection_request_password_and_choose_new_database_name():
 -	Store the successfully-used entered server host name in the document, so it is the
 -	default when the document is reopened.
 -
 -2006-03-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc: Call set_field_value_in_database() with the optional
 -	use_current_calculations value instead of mistakenly casting the window pointer to bool.
 -
 -2006-03-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade: window_layout_report:
 -	* glom/reports/dialog_layout_report.cc:
 -	* glom/reports/dialog_layout_report.h: Add a show_table_title checkbutton, because the
 -	table title is sometimes superfluous.
 -	* glom/document/document_glom.cc: load_after(), save_before(): load and save
 -	the new report property.
 -	* glom/base_db.cc: build_report(): Put show_table_title in the xml.
 -	* xslt/print_report_to_html.xsl: Interepret show_table_title in the xml.
 -	* glom/data_structure/report.cc:
 -	* glom/data_structure/report.h: Added get/set_show_table_title().
 -
 -2006-03-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: Use TreeView::set_fixed_height_mode() and
 -	TreeViewColumn::set_fixed_width(), so that the TreeView does not request values that are
 -	not visible in the scrolled window. If libgda does things properly then this should mean
 -	that we do not get data from the database that we never see.
 -
 -2006-03-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h: Added get_suitable_record_to_view_details()
 -	and get_has_suitable_record_to_view_details() so that the row button can go to a
 -	doubly-related record if the related table is hidden, based on the first related field
 -	in the portal.
 -	* glom/utility_widgets/flowtablewithfields.cc: on_portal_user_requested_details():
 -	If the related table is hidden, use get_has_suitable_record_to_view_details() instead.
 -
 -2006-03-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtablewithfields.cc: create_related(): Connect to signals
 -	here, instead of from the caller. This makes the row details button work in Notebooks.
 -
 -2006-03-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	get_table_fields(): Hide the hidden system field, though it
 -	should never be in the document anyay.
 -	Added set_parent_window() so that the load/save methods can
 -	show a busy cursor, though this does not work yet.
 -	* glom/application.cc: init_create_document(): Call set_parent_window() on
 -	the document.
 -	* glom/standard_table_prefs_fields.h:
 -	Added GLOM_STANDARD_FIELD_LOCK - a hidden system field for
 -	each table, not used yet.
 -	* glom/base_db.h: get_fields_for_table_from_database():
 -	Optionally hide the hidden system field.
 -	* glom/base_db.cc: connect_to_server(), Query_Execute(): Added optional
 -	parent_window parameter, so they can show the busy cursor.
 -	* glom/box_db_table.cc:
 -	* glom/dialog_connection.cc:
 -	* glom/dialog_database_preferences.cc:
 -	* glom/frame_glom.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/mode_design/users/dialog_users_list.cc:
 -	* glom/navigation/box_tables.cc: Use the new parameters to show busy cursors.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: treeview_append_column():
 -	Escape underlines in column titles so that they are not interpreted as
 -	mnemmonics.
 -	* po/POTFILES.in: Added missing file.
 -
 -2006-03-25  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Depend on latest Bakery, for BusyCursor API addition.
 -	* glom/application.cc:
 -	* glom/base_db.cc:
 -	* glom/box_reports.cc:
 -	* glom/dialog_connection.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_find/box_data_details_find.cc:
 -	* glom/mode_find/box_data_list_find.cc:
 -	* glom/navigation/box_tables.cc: Correct the BusyCursor
 -	declarations so that they actually instantiate an object, so that they
 -	work.
 -
 -2006-03-25  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: offer_new_or_existing(): If creation of a new database
 -	fails, offer again.
 -	* glom/frame_glom.cc: create_database(): Warn the user if creation failed.
 -
 -2006-03-25  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: set_table_privileges(): When granting
 -	create privileges, make sure to also grant edit privileges in the
 -	hidden autoincrement table.
 -	add_standard_groups(): Give them access to the standard prefs table too.
 -	auto_increment_insert_first_if_necessary(): Check that the user is allowed
 -	to edit the autoincrement table, and warn the user about this serious error if not.
 -	get_database_prefefrences(): Check that the user is allowed to view this table.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: Added create_table_system_preferences() with
 -	no arguments.
 -	get_tables(): Added optional plus_system_prefs boolean.
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/mode_design/users/dialog_groups_list.h: Show the table title instead of the
 -	name, and show the system prefs table too.
 -	on_button_group_new(): Grant access to the autoincrements table too.
 -
 -2006-03-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/users/dialog_groups_list.cc: fill_group_list():
 -	Avoid a warning when using selection on a treeview with no model yet.
 -
 -2006-03-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: get_database_users():
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/mode_design/users/dialog_users_list.cc:
 -	* glom/utils.cc: build_sql_select_with_where_clause():
 -	Quote the table, group, and user names, because they otherwise fail
 -	when using reserved names, such as cast.
 -
 -2006-03-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/data_structure/layout/report_parts/layoutitem_groupby.h:
 -	* glom/frame_glom.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	* glom/utils.cc:
 -	* glom/utils.h: Pass sort_clause as a list of
 -	LayoutItem_Fields, so that build_sql_select_with_where_clause() can define
 -	the relationships used by the sort clause.
 -	* glom/data_structure/layout/usesrelationship.cc:
 -	* glom/data_structure/layout/usesrelationship.h:
 -	get_sql_join_alias_definition(): Put quotes around the relationship names, in
 -	some places where I forgot to do that.
 -
 -2006-03-24  Peter Williams  <peter newton cx>
 -
 -	* glom/frame_glom.h: Remove Frame_Glom:: from the
 -	connection_request_password_and_choose_new_database_name() declaration,
 -	to fix the build with g++ 4.1 (in Fedora Core 5).
 -
 -2006-03-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Makefile.am:
 -	* glom/application.cc: Call set_icon_from_file() so that metacity
 -	shows the Glom icon in various places.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h: Connect to the clicked
 -	signal of the TreeViewColumns, and change the sort order accordingly.
 -
 -2006-03-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Added FoundSet class, instead of
 -	passing table_name, where_clause, and sort_clause
 -	around separately.
 -	* glom/application.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_data/notebook_data.h:
 -	* glom/mode_find/box_data_details_find.cc:
 -	* glom/mode_find/box_data_list_find.cc:
 -	* glom/mode_find/box_data_list_find.h:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.h:
 -	* glom/utility_widgets/dialog_choose_id.cc:
 -	* glom/utils.cc: Use FoundSet instead of separate
 -	parameters.
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h: show_table(): Sort the list by
 -	primary key by default, so that the order is at least
 -	predictable.
 -
 -0.9.92:
 -
 -2006-03-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/standard_table_prefs_fields.h:
 -	* glom/document/document_glom.cc:
 -	create_table_system_preferences(): Added a logo image
 -	field to the system preferences table.
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/fields/box_db_table_definition.h:
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Moved postgres_add_column() and
 -	postgres_change_column_extras() to Base_DB.
 -	Added create_table_add_missing_fields() and called it from
 -	add_standard_tables() to make sure that existing databases
 -	get new fields.
 -	Added get_field_exists_in_database()
 -	get_database_preferences(), set_database_preferences():
 -	Check that the new field is in the database and do not try
 -	to use if it is it not there.
 -	* glom/data_structure/system_prefs.h: Added logo as a
 -	Gda::Value.
 -	* glom/glom.glade:
 -	* glom/dialog_database_preferences.cc:
 -	* glom/dialog_database_preferences.h: Add a new notebook
 -	tab for the logo.
 -
 -2006-03-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* xslt/print_report_to_html.xsl: field: Correct the xpaths to get the
 -	correct border-widths. Use more specific apply-templates pattern, to put
 -	the header above the title.
 -
 -2006-03-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: report_build_headerfooter(): Handle images, so they
 -	appear on header/footer parts of reports.
 -	* glom/reports/dialog_layout_report.cc: on_button_edit(): Handle images, so
 -	they can be edited.
 -	* xslt/print_report_to_html.xsl: Use xsl:variable and xsl:copy-of to reduce
 -	some copy and paste of node creation.
 -
 -2006-03-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/glomconversions.cc: parse_value(): Handle images,
 -	assuming that the text is the escaped SQL image format. This means that
 -	the image layout items are actually loaded from the document.
 -	* glom/utility_widgets/flowtablewithfields.cc: add_textobject_at_position(),
 -	add_imageobject_at_position(): Pass true to add(), so that these widgets
 -	take up the full available width when they have no titles.
 -
 -2006-03-21  Murray Cumming  <murrayc murrayc com>
 -
 -        * po/POTFILES.in:
 -	* glom/data_structure/layout/Makefile.am:
 -	* glom/data_structure/layout/layoutitem_image.cc:
 -	* glom/data_structure/layout/layoutitem_image.h:
 -	Added new image type, for arbitrary images on
 -	layouts and reports.
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Added build_records_imageobject() and
 -	offer_imageobject(). Handle image fields in
 -	report_build_records_field().
 -	* glom/glom.glade:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_details.h: Added Add Image
 -	button and handled it.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: Load/Save the new layout
 -	item.
 -	* glom/layout_item_dialogs/Makefile.am:
 -	* glom/layout_item_dialogs/dialog_imageobject.cc:
 -	* glom/layout_item_dialogs/dialog_imageobject.h:
 -	New dialog for editing the new layout item.
 -	* glom/reports/dialog_layout_report.cc: Constructor:
 -	Add new image item to available parts.
 -	* glom/utils.cc:
 -	* glom/utils.h: Added create_local_image_uri(), to
 -	save a temporary copy of the image to the filesystem,
 -	for use in HTML report.
 -	* glom/utility_widgets/imageglom.cc:
 -	* glom/utility_widgets/imageglom.h: Added set_read_only().
 -	* xslt/print_report_to_html.xsl: Handle field nodes that
 -	have image_uri instead of value.
 -
 -2006-03-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: report_build_records_field(): Handle fields in headers
 -	and footers, assuming that they are to single records, such as system preferences.
 -
 -2006-03-20  Murray Cumming  <murrayc murrayc com>
 -	* glom/base_db.cc:
 -	* glom/base_db.h: report_build_records_text(): Take bool vertical parameter,
 -	like report_build_records_field(), so we can handle these properly in
 -	vertical groups.
 -	* glom/data_structure/layout/report_parts/layoutitem_verticalgroup.
 -	cc: Correct node name for XML/XSL reports.
 -	* xslt/print_report_to_html.xsl: Handle headers and footers.
 -
 -2006-03-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* po/POTFILES.in: Added some missing files.
 -
 -2006-03-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in:
 -	* glom/Makefile.am:
 -	* glom/reports/Makefile.am:
 -	* glom/reports/dialog_layout_report.cc:
 -	* glom/reports/dialog_layout_report.h: Moved this dialog into
 -	a sub directory. Show different (less) available items for headers
 -	and footers, to avoid some confusion.
 -	* glom/reports/treestore_report_layout.cc:
 -	* glom/reports/treestore_report_layout.h: Added a custom treemodel,
 -	so that we can override row_drop_possible_vfunc(), to control
 -	what can be dropped where.
 -
 -2006-03-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade:
 -	* glom/dialog_layout_report.cc:
 -	* glom/dialog_layout_report.h: Put the report
 -	parts into a Notebook, with extra tabs, with extra treeviews
 -	for the header and footer, because there is no point in
 -	allowing them to be added by the user anywhere but the start and end.
 -	* glom/base_db.cc: report_build(): Handle the Header and Footer parts,
 -	though it is reusing some datemodel-row-based functions in a hacky way,
 -	and it needs to create an equivalent of the HTML table and tr for the
 -	header parts.
 -	* xslt/print_report_to_html.xsl: Initial handling of header and footer
 -	parts.
 -
 -2006-03-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutgroup.cc:
 -	* glom/data_structure/layout/layoutgroup.h:
 -	* glom/data_structure/layout/layoutitem.cc:
 -	* glom/data_structure/layout/layoutitem.h:
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	* glom/data_structure/layout/layoutitem_text.cc:
 -	* glom/data_structure/layout/layoutitem_text.h:
 -	* glom/data_structure/layout/report_parts/layoutitem_fieldsummary.c
 -	c:
 -	* glom/data_structure/layout/report_parts/layoutitem_fieldsummary.h
 -	:
 -	* glom/data_structure/layout/report_parts/layoutitem_groupby.cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_groupby.h:
 -
 -	* glom/data_structure/layout/report_parts/layoutitem_summary.cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_summary.h:
 -	* glom/data_structure/layout/report_parts/layoutitem_verticalgroup.
 -	cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_verticalgroup.
 -	h: Added virtual get_report_path_id() instead of hard-coding the
 -	node IDs in build_report() and friends.
 -	* glom/dialog_layout_report.cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_footer.cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_footer.h:
 -	* glom/data_structure/layout/report_parts/layoutitem_header.cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_header.h:
 -	New layout report parts, not used yet.
 -	* glom/document/document_glom.cc: Load/Save the new report parts.
 -	* xslt/print_report_to_html.xsl: Some XSL to handle headers and footers.
 -	Might even work.
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Added report_build_headerfooter(). Needs work.
 -
 -2006-03-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc: on_menu_report_selected(): Build the report with
 -	the current found set only.
 -
 -2006-03-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utils.cc: Added #includes to fix the build.
 -
 -2006-03-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/report_parts/Makefile.am:
 -	* glom/data_structure/layout/report_parts/layoutitem_footer.cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_footer.h:
 -	* glom/data_structure/layout/report_parts/layoutitem_header.cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_header.h: Add
 -	header and footer parts for reports, though they are not used yet.
 -	* po/POTFILES.in: Add the new files.
 -
 -2006-03-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: report_build(): Take extra Gtk::Window* parameter.
 -	* glom/frame_glom.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc: Call report_build() with extra
 -	Gtk::Window* parameter so that the dialog can be transient.
 -	* glom/utils.cc:
 -	* glom/utils.h: transform_and_open(): Show a dialog to hint to the user
 -	that they should look in their open web browser to see the report.
 -	* po/POTFILES.in: Added utils.c
 -
 -0.9.91
 -
 -2006-03-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/glomconversions.cc:
 -	* glom/data_structure/glomconversions.h: format_date(): Takes a char* format, instead
 -	of a char format, so we can use a greater variety of formats. Mark the locale-specific
 -	x format as translated, and advise translators to translate it if their locales (stupidly)
 -	represent/parse dates as only 2 digits.
 -	parse_date(): If the format was translated, then it's useless here too, so just use
 -	the Glib::Date fallback.
 -	* po/en_GB.po: Translate the date format, so that dates are shown and parsed with
 -	4-digit years. Bug found by Phill Gillespie.
 -
 -2006-03-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: add_standard_groups(): Add the current user to the developer group
 -	here, rather than expecting the caller to do it (it did not always do it), so that
 -	people who create databases successfully are always marked as developers, so they can
 -	always change their databases. Bug found by Ryan Paul.
 -        * glom/applicationcc: recreate_database(): Do not make the user a developer here -
 -	let add_standard_groups() do it.
 -
 -2006-03-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/comboentryglom.cc: check_changes(): Do not allow any
 -	changes when the Entry is set to sensitive, to prevent changes via the
 -	combo menu. GtkComboBox has no set_editable() of its own. Show and informative dialog
 -	when changing the value back to the original one, so it does not just seem broken.
 -	* glom/utility_widgets/datawidget.cc: Do not make read-only comboboxentries insensitive,
 -	now that we can make them non-editable instead.
 -
 -2006-03-14  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc: record_new(): Do not ignore entered field data for
 -	related fields, because we just calculated them, and they are correct. Somehow or
 -	other this fixes the bug that caused calculated field values from the last-shown
 -	record to be inserted into new records.
 -
 -2006-03-14  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/imageglom.cc: set_value(): When clearing the image,
 -	also clear m_pixbuf_original, so that it doesn't come back when the image
 -	is rescaled. For instance, this makes sure that picture fields are empty when
 -	adding new records on the detail view.
 -
 -2006-03-14  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc: set_userlevel(): Add some debug output.
 -	* glom/frame_glom.cc: on_menu_userlevel_Developer(): Add some debug output,
 -	because someone has reported that they can not go to developer mode. This
 -	might help us find out exactly why.
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h: init_db(): Add optional
 -	show_title parameter.
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/flowtablewithfields.h: add_layout_notebook_at_position():
 -	Support Related Records portals as direct children of Notebook parts, putting their
 -	titles in the tab instead of having an alignment tab, and instead of requiring them
 -	to be inside a group.
 -
 -2006-03-14  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Moved some code into report_build_records_field() and
 -	report_build_records_text(). Added report_build_records_verticalgroup().
 -	report_build() and report_build_records(): Handle vertical groups (recursively).
 -	* glom/data_structure/layout/report_parts/Makefile.am:
 -	* glom/data_structure/layout/report_parts/layoutitem_verticalgroup.cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_verticalgroup.h:
 -	Added new report part, for stacked rows of fields in one cell of a record,
 -	for fitting more stuff into one row of a report.
 -	* glom/document/document_glom.cc: Load/Save the new layout item.
 -	* glom/dialog_layout_report.cc:
 -	* xslt/print_report_to_html.xsl: Handle vertical_group and field_vertical.
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	add_layout_notebook_at_position(): Make the notebook tabs bold, so they
 -	are as visible as group titles, which is what they are really. Make sure
 -	that the notebook pages have border spacing.
 -
 -2006-03-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/data_structure/layout/Makefile.am:
 -	* glom/data_structure/layout/layoutitem_notebook.cc:
 -	* glom/data_structure/layout/layoutitem_notebook.h:
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	* glom/glom.glade:
 -	* glom/layout_item_dialogs/Makefile.am:
 -	* glom/layout_item_dialogs/dialog_notebook.cc:
 -	* glom/layout_item_dialogs/dialog_notebook.h:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_details.h:
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/flowtablewithfields.h:
 -	* glom/utility_widgets/layoutwidgetbase.cc:
 -	* glom/utility_widgets/layoutwidgetbase.h:
 -	* glom/utility_widgets/notebookglom.cc:
 -	* glom/utility_widgets/notebookglom.h:
 -	* po/POTFILES.in: Added Notebook part, which has Groups as child items for tabs.
 -
 -2006-03-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: get_table_fields_to_show_for_sequence_add_group(): When getting
 -	full field details for related fields, use get_table_used() instead of the single-related to_table,
 -	so that this works with doubly-related fields. This makes doubly-related fields work in portals.
 -	* glom/mode_data/dialog_layout_list_related.cc: on_button_edit_field(): Show fields to the to_table,
 -	not the parent table.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: get_column_index(): Use is_same_field(), so that it
 -	works for doubly-related fields too.
 -
 -2006-03-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/custom_title.cc:
 -	* glom/data_structure/layout/custom_title.h: Added get/set_use_custom_title().
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h: Added get_title_or_name_no_custom().
 -	get_title_or_name(): Return an empty custom title if use_custom_title is set.
 -	* glom/data_structure/translatable_item.cc:
 -	* glom/data_structure/translatable_item.h: get_translatable_type_name(): Add a result for
 -	custom field titles.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: load_after_layout_item_field(), save_before_layout_item_field():
 -	Load/Save a bool use_custom_title attribute, to allow for empty custom titles.
 -	Added get_translatable_report_items().
 -	get_translatable_layout_items(): Handle GroupBy group-by fields and secondary fields.
 -	* glom/layout_item_dialogs/dialog_field_layout.cc: set_field(): Show the non-custom
 -	title as the default title, so it does not change if there is a custom title.
 -	* glom/translation/window_translations.cc: Use get_translatable_report_items() to get
 -	custom titles and GroupBy fields.
 -
 -2006-03-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc: load_after_layout_group(), save_before_layout_group():
 -	For GroupBy parts, save a whole LayoutItem node for the group-by field, so we can use
 -	related fields and custom formatting for it.
 -	* glom/glom.glade: dialog_group_by: Rename the Select button for Sort Fields to
 -	Edit, to match the button for secondary fields, which also has more than one field.
 -	* glom/layout_item_dialogs/dialog_group_by.cc:
 -	* glom/layout_item_dialogs/dialog_group_by.h: Added Formatting button, to allow us,
 -	for instance, to change the title of the group-by field.
 -
 -2006-03-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: report_build_groupby_children():
 -	In the ORDER BY clause, use the relationship alias name, instead of
 -	the table name, to avoid getting extra records because we would not be using
 -	the join.
 -	* glom/data_structure/layout/usesrelationship.cc:
 -	* glom/data_structure/layout/usesrelationship.h: Added get_sql_table_or_join_alias_name()
 -	for convenience.
 -	* glom/utils.cc: build_sql_select_with_where_clause(): Use get_sql_table_or_join_alias_name()
 -	to simplify the code.
 -	* glom/document/document_glom.cc: load_after_layout_group(): Fill the full field details for
 -	secondary fields of GroupBy parts.
 -	* glom/layout_item_dialogs/dialog_group_by.cc: update_labels(): Show the list of secondary fields.
 -	* xslt/print_report_to_html.xsl: Only indent child group_by divs, to avoid wasting space at the left
 -	margin.
 -
 -2006-03-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: treeviewcolumn_on_cell_data():
 -	Check the type of the GdaValue before calling get_bool, to avoid warnings about
 -	it not being bool. It seems to be null sometimes. Not sure why.
 -
 -2006-03-13  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/base_db.cc: report_build_groupby(): Use the border width also
 -	when using the group_by node for non-grouped records.
 -	* glom/layout_item_dialogs/comboentry_borderwidth.cc:
 -	Constructor add a 0.05em border width choice, for a finer line.
 -
 -2006-03-13  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/report_parts/layoutitem_groupby.cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_groupby.h: Use a list of
 -	sort fields, instead of just one, for multiple sort levels.
 -	* glom/base_db.cc:
 -	* glom/dialog_layout_report.cc:
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	* glom/glom.glade:
 -	* glom/layout_item_dialogs/Makefile.am:
 -	* glom/layout_item_dialogs/dialog_group_by.cc:
 -	* glom/layout_item_dialogs/dialog_group_by.h:
 -	* glom/layout_item_dialogs/dialog_groupby_sortfields.cc:
 -	* glom/layout_item_dialogs/dialog_groupby_sortfields.h:
 -	* glom/utils.cc: Handle the lsit of sort fields.
 -	* glom/data_structure/layout/layoutitem.cc:
 -	* glom/data_structure/layout/layoutitem.h: Add get_layout_display_name() as virtual
 -	method here, so we can call it polymorphically.
 -
 -2006-03-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/layout_item_dialogs/dialog_groupby_secondaryfields.cc:
 -	* glom/mode_data/dialog_layout_export.cc:
 -	* glom/mode_data/dialog_layout_list.cc:
 -	* glom/mode_data/dialog_layout_list_related.cc: More removal of copy/pasted code. Using
 -	get_layout_display_name() instead.
 -
 -2006-03-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/mode_data/dialog_layout_details.cc: on_cell_data_name(): Move the code to
 -	create the field display name (with the :: separators) into LayoutItem_Field::get_layout_display_name(),
 -	to avoid copy/paste wasteage and to make it show up properly in the Reports layout dialog.
 -
 -2006-03-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/combobox_relationship.cc: set_selected_relationship() Fix a crash caused by use of wrong
 -	iterator.
 -	* glom/mode_data/dialog_choose_field.cc: set_document(): Specify the related_relationship if there is
 -	one, and make sure that the full list is visible if it's needed by the current field.
 -
 -2006-03-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade:
 -	* glom/combobox_relationship.cc:
 -	* glom/combobox_relationship.h:
 -	* glom/mode_data/dialog_choose_field.cc:
 -	* glom/mode_data/dialog_choose_field.h: Optionally show related relationships, to
 -	allow specifying doubly-related fields.
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h: Added get_is_same_field() to check the name,
 -	and both relationships easily.
 -	* glom/utility_widgets/flowtablewithfields.cc: get_field(): Use get_is_same_field()
 -	to handle doubly-related fields.
 -	* glom/data_structure/layout/usesrelationship.cc:
 -	* glom/data_structure/layout/usesrelationship.h: Added get/set_related_relationship()
 -	and associated methods.
 -	Added get_sql_join_alias_name() and get_sql_join_alias_definition(), moving SQL generation
 -	code from GlomUtils::build_sql_select_with_where_clause().
 -	* glom/utils.cc: GlomUtils::build_sql_select_with_where_clause(): Simplify by using the
 -	UsesRelationships methods. This can now support doubly-related fields by creating aliases in
 -	terms of other aliases.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: Load/Save the related_relationship. Load layouts after all other
 -	table information has been loaded for all tables, because the layouts need the full information.
 -	* glom/data_structure/layout/fieldformatting.cc:
 -	* glom/data_structure/layout/layoutgroup.cc:
 -	* glom/data_structure/layout/layoutitem_portal.cc:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_list.cc:
 -	* glom/mode_data/box_data.cc: Update appropriately.
 -
 -2006-03-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/layout_item_dialogs/dialog_field_summary.cc:
 -	* glom/layout_item_dialogs/dialog_group_by.cc:
 -	* glom/layout_item_dialogs/dialog_groupby_secondaryfields.cc:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_details.h:
 -	* glom/mode_data/dialog_layout_export.cc:
 -	* glom/mode_data/dialog_layout_list.cc:
 -	* glom/mode_data/dialog_layout_list_related.cc: Remove a lot of copying and pasting
 -	of near-identical offer_field_list() and offer_field_formatting() functions. Just use
 -	the one in Base_DB. Also made sure that these dialogs are always transient, by adding a
 -	Window* parameter.
 -	* glom/glom.glade:
 -	* glom/dialog_layout_report.cc:
 -	* glom/dialog_layout_report.h: Added a Formatting button. For instance, this allows
 -	the field titles to be changed (or removed) on reports.
 -
 -2006-03-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/data_structure/layout/layoutgroup.cc:
 -	* glom/data_structure/layout/layoutgroup.h: Added get/set_border_width() for use
 -	when creating reports, for some slight formatting choice.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: load_after_layout_group(), save_before_layout_group():
 -	Handle the border_width.
 -	* glom/glom.glade:
 -	* glom/layout_item_dialogs/dialog_group_by.cc:
 -	* glom/layout_item_dialogs/dialog_group_by.h: Allow the user to choose a border width
 -	for the rows in the group.
 -	* glom/layout_item_dialogs/Makefile.am:
 -	* glom/layout_item_dialogs/comboentry_borderwidth.cc:
 -	* glom/layout_item_dialogs/comboentry_borderwidth.h: New widget for choosing the
 -	border width.
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_details.h: Simplify the if/ifelse blocks that deal with
 -	layout parts.
 -	* xslt/print_report_to_html.xsl: Reduce copy/paste by using xsl::variables (though those
 -	xsl::variable blocks are copy/pasted). Use xsl::variables to apply a border-width style to
 -	td and the HTML blocks, depending on the border_width of the group-by. Add a horizontal line
 -	after the group-by titles.
 -
 -2006-03-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutitem_field.cc: get_layout_display_name(): Return the
 -	name even if the full details cache is invalid.
 -	* glom/document/document_glom.cc: load_after(): Fill the full field details when loading
 -	report items, so that they show up in the report when it is edited.
 -
 -2006-03-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_layout_report.cc: enable_buttons(): Enable the Add button even if the item
 -	can not be a parent of the new item, so that the new item can become a sibling instead, if
 -	parent would allow that.
 -
 -2006-03-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: report_build_records(): Instead of generating different
 -	node names for numeric field headings and field values, just add a field_type
 -	attribute.
 -	* xslt/print_report_to_html.xsl: In <xsl:template match="field_heading"> and
 -	<xsl:template match="field">: Use xls:choose to do align="right" if the node has
 -	a field_type="numeric" attribute.
 -
 -2006-03-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: report_build_groupby(): Move child record generation into
 -	new report_build_groupby_children() method. Output child records even if there is no
 -	group_by field in the GroupBy part, so users can use it just to sort records, though
 -	that's a bit of a hack. I think adding an explicit SortBy part would confuse things,
 -	because it might not be clear what group of records are being sorted. But maybe it
 -	would work.
 -	* xslt/print_report_to_html.xsl: In <xsl:template match="group_by">:
 -	Do not print the group-by field title and value (with the : separator) if there is no
 -	group-by field, to avoid a lone :.
 -
 -2006-03-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_layout_report.cc: set_report(), get_report(): Allow non-group
 -	LayoutItems at the top level, instead of putting them inside an automatically-created
 -	group.
 -
 -2006-03-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* po/POTFILES.in: Added data_structure/layout/layoutitem_text.cc
 -
 -2006-03-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/box_reports.cc: on_adddel_Add(): Set the new report name in the
 -	row key, so we know what row to edit in subsequent steps.
 -
 -2006-03-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutgroup.cc:
 -	* glom/data_structure/layout/layoutgroup.h: Added get_items_count().
 -	* glom/dialog_layout_report.cc: get_original_report_name(): Do not crash if
 -	there are top-level fields. Still need to handle this properly though.
 -	* glom/utility_widgets/datawidget.cc: set_editable():
 -	Call set_sensitive() on ComboBoxes, because the menu still changes the
 -	value if we just call set_editable on its Entry.
 -
 -2006-03-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: report_build_records() takes a vector of LayoutItem
 -	instead of LayoutItem_Field, so it can handle text items. So text objects
 -	now work on record rows of reports.
 -
 -2006-03-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Added offer_textobject().
 -	* glom/data_structure/layout/Makefile.am:
 -	* glom/data_structure/layout/layoutitem_text.cc:
 -	* glom/data_structure/layout/layoutitem_text.h:
 -	Added Text layout part, for adding arbitrary text or empty text
 -	with a title, to a details layout. Does not work on reports yet.
 -	* glom/data_structure/translatable_item.cc:
 -	* glom/data_structure/translatable_item.h: get_translatable_type_name():
 -	Update.
 -	* glom/dialog_layout_report.cc: Constructor: Add the Text object as a
 -	possible part to add.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: load_after_group(), save_before_group():
 -	Handle the text object layout part.
 -	* glom/glom.glade:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_details.h: Added Add Text button and
 -	handled it.
 -	* glom/mode_design/Makefile.am:
 -        * glom/mode_design/dialog_textobject.h
 -        * glom/mode_design/dialog_textobject.cc: New dialog for editing the
 -	text object.
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/flowtablewithfields.h:
 -	add_layout_item_at_position(): Add a LabelGlom for text objects.
 -	* glom/utility_widgets/labelglom.cc:
 -	* glom/utility_widgets/labelglom.h: New widget for the text object.
 -
 -0.9.8:
 -
 -2006-03-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: do_lookups(): Do not pass a instance constructor its own member
 -	variables. Avoids occasional crash and occasional non-working lookups.
 -
 -2006-03-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	get_table_fields_to_show_for_sequence_add_group(): Do not recurse into portals,
 -	to avoid adding their fields to the SQL query for the parent table details view.
 -	* glom/document/document_glom.cc: load_after_layout_group(): In portals,
 -	load related (related from the related table) fields properly, so we remember
 -	the relationship.
 -
 -0.9.7:
 -
 -2006-03-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/glomconversions.cc: parse_date(): Fix incorrect sanity check
 -	of the month, so that January is not changed to February. tm.tm_mon _does_ start
 -	with 0.
 -
 -2006-03-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/glomconversions.cc: parse_value(): If parsing of the time
 -	fails, fall back to trying the C locale. This is usually necessary. No idea why.
 -
 -2006-03-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: on_cell_button_clicked():
 -	Do not interpret an edit request on a placeholder row as a request to add. This
 -	means that Glom switches to an empty details view instead, as you would expect.
 -
 -2006-03-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc: refresh_from_database():
 -	If there are no rows it is not an error. There are just no records in the table
 -	yet.
 -
 -2006-03-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutitem_field.cc: get_editable_and_allowed():
 -	Report calculated fields as always non-editable.
 -	* glom/layout_item_dialogs/dialog_field_layout.cc: set_field(): Do not allow
 -	calculated fields to be editable, by graying-out the checkbox.
 -	* glom/main.cc: Translate the command-line options, and add a --version
 -	option.
 -	* glom/utility_widgets/comboglomchoicesbase.cc: set_choices_with_second():
 -	For the optional second column in the popdown, use the correct formatting,
 -	instead of reusing the formatting from the first column.
 -	* glom/utility_widgets/datawidget.cc: set_editable(): For ComboBoxEntry
 -	widgets, set the child entry as non-editable.
 -
 -2006-03-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/main.cc: Call PySys_SetArgv, to prevent use of pygtk from
 -	crashing when using pygtk 2.9/2.10.
 -	* glom/mode_data/dialog_layout_details.cc: on_cell_data_name(): Name buttons as
 -	buttons in the name column, instead of leaving it blank.
 -
 -2006-03-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: on_document_load(): When saving from an example, temporarily increase
 -	the user level, so that save_changes() always saves.
 -	* glom/document/document_glom.cc:
 -	set_modified(): Save even if modified is already set, because this can happen
 -	after unblocking save-on-modified. If there are endless loops then we need to
 -	fix them elsewhere instead.
 -	load_after(): Block setting of modified state while loading.
 -
 -2006-03-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/box_reports.cc:
 -	* glom/data_structure/report.cc:
 -	* glom/dialog_layout_report.cc:
 -	* glom/document/document_glom.cc: Prevent crashes when adding reports,
 -	or editing them.
 -
 -2006-03-02  Ilkka Tuohela  <hile iki fi>
 -
 -	* configure.in: Added "fi" to ALL_LINGUAS
 -
 -2006-02-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	* glom/utility_widgets/adddel/adddel.h: Added set_prevent_duplicates() and
 -	set_prevent_duplicates_warning().
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/navigation/box_tables.cc: Use the new AddDel methods to prevent, and warn about,
 -	duplicate tables, fields, and relationships, to prevent crashes.
 -
 -2006-02-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/fields/box_db_table_definition.cc: postgres_change_column_type():
 -	Data conversion commands: Fix crashes when converting from text to boolean, and from
 -	boolean to number. Preserve information when converting from anything to boolean.
 -
 -2006-02-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/dialog_layout_list.cc:
 -	* glom/mode_data/dialog_layout_list.h: Do not allow people to put image
 -	fields on the list view, because it can not show them yet.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: Some skeleton code to
 -	support (very scaled-down) images on the list view. But I have not actually
 -	implemented it because I do not want yet more versions of the code that
 -	works around the libgda 1.2 binary escaping problem.
 -
 -2006-02-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	postgres_change_column_type(): Use textcat() to add a preceding 0 when
 -	using to_number(), so that it always succeeds. Now I can not make glom
 -	crash or error when converting field types, though the results are a bit
 -	strange for text<->to date.
 -
 -2006-02-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Add override of
 -	calculate_field_in_all_records() that does not need the primary key
 -	spoon-fed to it. Get all the primary key values, not all the calculated
 -	field values.
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	on_Properties_apply(): Warn about necessary recalculation and
 -	allow the user to cancel the change of field definition.
 -	change_definition(): Recalculate all values if necessary. This
 -	even works.
 -
 -2006-02-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/field.cc:
 -	* glom/data_structure/field.h:
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Move get_calculation_fields() to Base_DB,
 -	so it can return a LayoutItem_Field, instead of a field name,
 -	so it can refer to related fields, though we are not using them
 -	yet.
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_design/fields/dialog_fieldcalculation.cc: Adapt.
 -
 -2006-02-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: FieldInRecord: Change primary_key*
 -	to key*, so we can use this for foreign keys for
 -	related records.
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_details.cc: Adapt.
 -	* glom/utils.cc:
 -	* glom/utils.h: Rename build_sql_select_with_primary_key() to
 -	build_sql_select_with_key
 -
 -2006-02-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utils.cc:
 -	* glom/utils.h: Added build_sql_select_with_primary_key().
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Added FieldInRecord inner class and
 -	used it to reduce the number of parameters for
 -	do_calculations(), do_lookups(), refresh_related_field(),
 -	calculate_field(), set_field_value_in_database().
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc: Change the method
 -	overrides and implementations to match.
 -
 -2006-02-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/box_db_table.cc:
 -	* glom/box_db_table.h:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Moved calculate_field(), get_record_field_values(),
 -	set_entered_field_data(), set_field_value_in_database(), build_sql_select(),
 -	do_calculations(), get_calculated_fields(), do_lookups(), get_lookup_fields(),
 -	get_lookup_value(), and refresh_related_fields() down to the Base_DB class,
 -	with extra table_name arguments, so we can recalculate/lookup fields even if they
 -	the tables or records are not being shown currently.
 -
 -2006-02-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/connectionpool.cc:
 -	* glom/connectionpool.h: connect(): Parse the result of SELECT version() and return
 -	it from get_postgres_server_version(), so we can optionally use some new features,
 - 	behind the scenes.
 -
 -2006-02-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/combobox_relationship.cc:
 -	* glom/combobox_relationship.h: set_display_parent_table(): Add a separator after
 -	the table title, so that relationships are special.
 -	* glom/mode_data/dialog_choose_field.cc: set_document(): Scroll the current field
 -	into view, so it is always visible.
 -
 -2006-02-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/dialog_choose_field.cc: set_document(): Supply the table title as
 -	well as the name, so it shows up.
 -
 -2006-02-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/fields/dialog_fielddefinition.cc: set_field(): Do not show the
 -	current table name in the list of relationships for lookups.
 -
 -2006-02-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom.glade:
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	* glom/mode_design/fields/dialog_fielddefinition.h: Rename the Default Value tab
 -	to Value. Use radiobuttons to make the calculation and the rest mutually exclusive.
 -
 -0.9.6:
 -
 -2006-02-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.h: Make on_flowtable_field_edited()
 -	virtual again so that the override in BoxDataDetails_Find works again,
 -	to avoid odd regressions when finding.
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	* glom/utils.cc:
 -	* glom/base_db.cc: Try to print the SQL command on stdout when there
 -	is a problem with it.
 -
 -2006-02-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc: on_notebook_find_criteria(): Show all records if
 -	the find was not successful, and the user did not want to try again.
 -
 -2006-02-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc: on_menu_Mode_Find(): Start the Find mode
 -	on the same layout (Details or List) as the Data mode was in.
 -	Add a little hack to make sure that we go back into Data mode in List
 -	view at first, to make sure that the first result will show up
 -	properly in the Details mode.
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_data/notebook_data.h: Added set_current_view().
 -	* glom/mode_find/notebook_find.cc:
 -	* glom/mode_find/notebook_find.h: Added set_current_view().
 -
 -2006-02-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/imageglom.cc: scale(): Call Gtk::Image::get_storage_type()
 -	before Gtk::Image::get_pixbuf(), to avoid a critical warning.
 -
 -2006-02-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/imageglom.cc:
 -	* glom/utility_widgets/imageglom.h: Override on_expose_event() so we can
 -	scale the image when we actually have a real (>1) allocation.
 -	scale(): Do not call set_image() if the scaled pixbuf has exactly the same
 -	dimensions as the existing image. And do not try to scale the image if the
 -	allocation is very small, because this will generally fail. This fixes the
 -	disappearing image problem.
 -
 -2006-02-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/relationship.cc:
 -	* glom/data_structure/relationship.h: Added get_has_to_table(), for
 -	performance, to avoid string copying.
 -	* glom/utils.cc: build_sql_select_with_where_clause(): Add to_table to the
 -	FROM list for non-key-linked relationships. libpq adds the implicit FROM if we
 -	do not do this, but it prints a warning on stdout.
 -	* glom/mode_data/dialog_layout_list_related.cc: on_combo_relationship_changed():
 -	Clear the list of fields when the relationship changes, so that there are no
 -	invalid fields.
 -
 -
 -2006-02-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc: get_translatable_items(): Return the CustomTitles of
 -	LayoutItem_Fields.
 -	* glom/translation/window_translations.cc: load_from_document(): Do not try to get the
 -	custom titles here, because get_translatable_items() gets them instead.
 -
 -2006-02-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/Makefile.am:
 -	* glom/data_structure/layout/custom_title.cc:
 -	* glom/data_structure/layout/custom_title.h: New translatable
 -	item, for use when layout items can optionally have special
 -	titles, when the default (such as Street for contacts::address_street),
 -	is not appropriate.
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h: Add get/set_title_custom().
 -	* glom/data_structure/translatable_item.cc:
 -	* glom/data_structure/translatable_item.h: Add new item type and name.
 -	* glom/document/document_glom.cc: load_after_layout_item_field(),
 -	save_before_layout_item_field(): Load/Save the custom_title of
 -	LayoutItem_Field items.
 -	* glom/glom.glade: dialog_layout_field_properties.
 -	* glom/layout_item_dialogs/dialog_field_layout.cc:
 -	* glom/layout_item_dialogs/dialog_field_layout.h: Add widgets to allow
 -	a custom title.
 -	* glom/translation/window_translations.cc: load_from_document():
 -	Add the custom titles to the list.
 -	* glom/utility_widgets/datawidget.cc: on_menupopup_activate_layout():
 -	Save the new field properties, instead of replacing the whole item,
 -	so that the document gets the new information. Makes this work again.
 -
 -2006-02-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/combobox_relationship.cc: Do not show the
 -	Triggered By information if there are not linking key
 -	fields for a relationship.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: get_relationships():
 -	Optionally also return the extra System Properties
 -	relationship.
 -	get_relationship(): Return the extra System Properties
 -	relationship if it is asked for by name, even though it
 -	is not saved in the document.
 -	* glom/mode_data/dialog_choose_field.cc: Show the extra
 -	System Properties relationship too.
 -	* po/POTFILES.in: Added document_glom.cc
 -
 -2006-02-14  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/relationship.cc:
 -	* glom/data_structure/relationship.h: Added
 -	get_has_fields() to identify relationships that
 -	actually link fields in tables.
 -	* glom/mode_data/box_data_list_related.cc: init_db_details(),
 -	fill_from_database(): Get all rows (with no where clause) if the
 -	relationship does not specify linking fields.
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	* glom/utils.cc: build_sql_select_with_where():
 -	If a related field's relationship doesn't specify
 -	linking fields, don't attempt a JOIN.
 -
 -2006-02-14  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/box_db_table.cc:
 -	* glom/box_db_table.h:
 -	* glom/box_reports.cc:
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_data/notebook_data.h:
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	* glom/mode_design/dialog_design.cc:
 -	* glom/mode_design/dialog_design.h:
 -	* glom/mode_design/dialog_fields.cc:
 -	* glom/mode_design/dialog_fields.h:
 -	* glom/mode_design/dialog_relationships.cc:
 -	* glom/mode_design/dialog_relationships.h:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_find/box_data_details_find.cc:
 -	* glom/mode_find/notebook_find.cc:
 -	* glom/mode_find/notebook_find.h:
 -	* glom/utils.cc: Code style uniformity: Change
 -	strTableName to table_name and strWhereClause to
 -	where_clause.
 -
 -2006-02-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/glomconversions.cc:
 -	* glom/data_structure/glomconversions.h: Added
 -	get_empty_value_suitable_for_python().
 -	* glom/mode_data/box_data.cc: get_record_field_values():
 -	Get full set of suitable empty values if there is no primary key,
 -	and replace null values with suitable non-null empty values, with
 -	get_empty_value_suitable_for_python(). This avoids warnings on the
 -	command line when adding records.
 -
 -0.9.5:
 -
 -2006-02-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutitem_button.cc:
 -	* glom/data_structure/layout/layoutitem_button.h:
 -	Added get/set_script().
 -	* glom/document/document_glom.cc: load_after_layout_group(),
 -	save_before_layout_group(): Load/Save the scripts for buttons.
 -	* glom/utility_widgets/buttonglom.cc:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/flowtablewithfields.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h: Handle button clicks and
 -	run the python code.
 -	* glom/glom.glade: Add a script editing dialog.
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_details.h: on_button_edit():
 -	Allow editing of buttons and start editing of the title column
 -	if the item is a group.
 -	* glom/mode_design/Makefile.am:
 -	* glom/mode_design/dialog_buttonscript.cc:
 -	* glom/mode_design/dialog_buttonscript.h: Added button script
 -	editing dialog.
 -	* glom/python_embed/glom_python.cc:
 -	* glom/python_embed/glom_python.h: Added
 -	glom_execute_python_function_implementation() because we buttons
 -	do not care about the result.
 -	* examples/example_smallbusiness.glom: Add a Test Button to the
 -	Contacts layout, with a pygtk hello world script behind it.
 -
 -2006-02-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutitem_button.cc:
 -	* glom/data_structure/translatable_item.cc:
 -	* glom/data_structure/translatable_item.h: Give it a
 -	translatable item type and name so it shows up properly in the
 -	translations list.
 -	* glom/document/document_glom.cc: save_before_layout_item_field():
 -	Load the sequence number of child items. It was pure luck that this
 -	worked sometimes without this.
 -	* glom/document/document_glom.h:
 -	* glom/mode_data/dialog_layout_details.cc: on_button_*(): Set m_modified,
 -	so that all changes are always saved. I am surprised that this worked before.
 -	on_cell_data_name(): Mark buttons as such.
 -	on_cell_data_title(): Allow button titles to be edited.
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	add_button_at_position(): Set the button title and really show the widget.
 -
 -2006-02-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* po/POTFILES.in:
 -	* glom/Makefile.am:
 -	* glom/data_structure/layout/Makefile.am:
 -	* glom/data_structure/layout/layoutitem_button.cc:
 -	* glom/data_structure/layout/layoutitem_button.h: Add Button
 -	layout item.
 -	* glom/glom.glade: Details Layout:
 -	Put the Add buttons vertically at the right-hand side Add
 -	an Add Button button.
 -	* glom/mode_data/treestore_layout.cc:
 -	* glom/mode_data/treestore_layout.h:
 -	* glom/mode_data/dialog_layout_details.h:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	Use the LayoutItems only in the model, simplifying this
 -	dramatically, and making it easier to add new types of
 -	layout items.
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/buttonglom.cc:
 -	* glom/utility_widgets/buttonglom.h: Add a (not yet useful)
 -	button widget.
 -
 -2006-02-10  Murray Cumming  <murrayc murrayc com
 -
 -	* Makefile.am: Install the logo used by the desktop file.
 -
 -2006-02-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: on_document_load(): When saving from an
 -	example, do not open the Save As dialog box in the examples directory,
 -	because it is usually read-only and it is not a wise place to put your
 -	own stuff. Also see the latest Bakery 2.3.17 for fixes to prevent Save As
 -	in read-only paths.
 -
 -0.9.4:
 -
 -2006-02-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutgroup.cc:
 -	* glom/data_structure/layout/layoutgroup.h:
 -	Added remove_relationship(), to remove any
 -	child items that use the relationship.
 -	* glom/document/document_glom.cc:
 -	remove_relationship(): Also remove any layout or report
 -	parts that use the relationship.
 -
 -2006-02-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutgroup.cc:
 -	* glom/data_structure/layout/layoutgroup.h: Added remove_field().
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: Added remove_field().
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	on_adddel_delete(): Call Document_Glom::remove_field() to prevent
 -	a crash when deleting a field that is used on a layout.
 -
 -2006-02-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc: get_lookup_value():
 -	Convert the key field value, in case the relationship's keys
 -	have different types.
 -
 -2006-02-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	save_to_document(): Actually add new relationships.
 -
 -2006-02-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/glomconversions.cc:
 -	* glom/data_structure/glomconversions.h: Added convert_value(),
 -	which attemps to convert between differing value types if
 -	necessary.
 -	* glom/mode_data/box_data_details.cc:  do_lookups():
 -	* glom/mode_data/box_data_list.cc: do_lookups(): Use
 -	convert_value() to avoid errors when looking up a value from
 -	a field with a different field type.
 -
 -0.9.3:
 -
 -2006-02-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/translatable_item.cc: get_title(): Really
 -	fall back to related translations. For instance, if you are in
 -	the German (Austria) locale, and there is no German (Austria)
 -	translation for a title, but there is one for German (Germany),
 -	use it.
 -
 -2006-02-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc:
 -	set_translation_original_locale(): Mark the document
 -	as modified so that this is saved.
 -	* glom/glom.glade: Use language everywhere instead of
 -	locale.
 -	* glom/translation/Makefile.am:
 -	* glom/translation/dialog_change_language.h:
 -	* glom/translation/dialog_identify_original.cc:
 -	* glom/translation/dialog_identify_original.h: Show the
 -	locale name, not the ID.
 -	* glom/translation/dialog_copy_translation.cc:
 -	* glom/translation/dialog_copy_translation.h:
 -	* glom/translation/window_translations.cc:
 -	* glom/translation/window_translations.h: Implement
 -	original locale identification and translation copying.
 -
 -2006-02-08  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc: Constructor:
 -	Call TranslatableItem::set_original_locale() so that
 -	TranslatableItem::set_title() does the right thing as early
 -	as possible. This means that the automatically-generated
 -	table titles will be visible when loading the document.
 -
 -2006-02-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/field.cc:
 -	* glom/data_structure/groupinfo.cc:
 -	* glom/data_structure/numeric_format.cc:
 -	* glom/data_structure/privileges.cc:
 -	* glom/data_structure/relationship.cc:
 -	* glom/data_structure/translatable_item.cc:
 -	Optimize the operator==() implementations, fixing
 -	Field::operator==() along the way, so that entered field titles
 -	when in non-original locales are used as translations for that
 -	locale.
 -	* glom/translation/combobox_locale.cc: Constructor:
 -	Hide the locale IDs because they are not human-readable.
 -
 -2006-02-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/iso_codes.cc:
 -	* glom/data_structure/iso_codes.h: Added get_locale_name(),
 -	moving some of get_list_of_locales() into it.
 -	* glom/data_structure/translatable_item.cc: get_title():
 -	If there is no translation then use the first translation with
 -	the same language (ignoring the country).
 -	* glom/translation/window_translations.cc: load_from_document():
 -	Use get_locale_name() to show the (believed) locale of the original
 -	strings.
 -	* glom/utils.cc:
 -	* glom/utils.h: Added locale_language_id() so we can reuse the code.
 -
 -2006-02-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/dialog_database_preferences.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/python_embed/python_module/py_glom_relatedrecord.cc:
 -	* glom/utils.cc: Put all field names in quotes too, to avoid
 -	crashes when using uppercase characters in field names.
 -
 -2006-02-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/connectionpool.cc:
 -	* glom/dialog_database_preferences.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/users/dialog_users_list.cc:
 -	* glom/navigation/box_tables.cc:
 -	* glom/python_embed/python_module/py_glom_relatedrecord.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	* glom/utils.cc: Put all table names in quotes in SQL statements,
 -	to avoid errors/crashes when using non-lowercase table names, and SQL keywords
 -	as table names.
 -
 -2006-02-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/iso_codes.cc: get_list_of_locales():
 -	Instead of just listing languages, get the full list of locale IDs from
 -	/usr/share/i18n/locales/ (hopefully this works everywhere. If not, let's
 -	have some configure.in stuff), and build the locale name from the language
 -	part and country part. So it now also parses iso_3166.xml from iso-codes
 -	to get translated country names.
 -	* glom/utils.cc:
 -	* glom/utils.h: Added locale_simplify() so we can ignore weird parts of
 -	locale IDs.
 -	* glom/data_structure/translatable_item.cc: get_current_locale(): Return
 -	a locale instead of just a language.
 -	* glom/translation/combobox_locale.cc: Try (unsuccessfully) to align the
 -	second column. Sort it by name.
 -	* glom/translation/window_translations.cc: load_from_document(): Prevent
 -	a crash when the document is 0.
 -
 -2006-02-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: Use string_escape_underscores when building
 -	the reports and tables menus.
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	* glom/utility_widgets/adddel/adddel.h:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	* glom/utils.cc:
 -	* glom/utils.h: Move string_escape_underscores() to here.
 -
 -2006-01-24  Clytie Siddall <clytie riverland net au>
 -
 -	* configure.in	Added vi in ALL_LINGUAS line.
 -
 -2006-01-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom: Add German translations.
 -	* glom/navigation/box_tables.cc: Avoid a null-sharedptr crash when
 -	doing a Save As Example.
 -
 -2006-01-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* Many: Use LayoutItems via sharedptr so we can translate the titles of
 -	groups, portals, and report parts. LayoutItems are now created during
 -	document loading, and by layout editing dialogs, but then just shared by the
 -	various widgets. This means that we no longer need to rebuild the whole layout
 -	from the widgets when a widget is changed - it is just shared, so we just
 -	mark the document as modified.
 -
 -2006-01-26  Murray Cumming  <murrayc murrayc com>
 -
 -	* Many: Use relationship via sharedptr so we can translate its title too.
 -        Derive LayoutItem_Field, LayoutItem_Portal, LayoutItem_Group, FieldFormatting
 -	from new UsesRelationship class to simplify the code.
 -
 -2006-01-25  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: Reuse the Translations window, so it shows the
 -	last-used locale when shown again.
 -
 -2006-01-25  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/box_reports.cc:
 -	* glom/box_reports.h:
 -	* glom/dialog_layout_report.cc:
 -	* glom/dialog_layout_report.h:
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	* glom/frame_glom.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/translation/window_translations.cc: Use Report via
 -	sharedptr<> so that Report title translations are used.
 -
 -2006-01-25  Murray Cumming  <murray murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/dialog_database_preferences.cc:
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	* glom/glom.glade:
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/mode_design/users/dialog_users_list.cc:
 -	* glom/navigation/box_tables.cc:
 -	* glom/navigation/box_tables.h:
 -	* glom/relationships_overview/relationships_canvas.cc:
 -	* glom/relationships_overview/table_canvasitem.cc:
 -	* glom/relationships_overview/table_canvasitem.h:
 -	* glom/translation/window_translations.cc: Use TableInfo via
 -	sharedptr<> so that Table title translations are used.
 -
 -2006-01-24  Murray Cumming  <murray murrayc com>
 -
 -	* glom/data_structure/translatable_item.h: Copy m_title
 -	(the original) in copy constructor and operator=(). This makes
 -	the table titles show up again and be saved.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: Save/load titles in
 -	load_after_translations() and save_before_translations() instead
 -	of separately.
 -	* glom/sharedptr.h: Added cast_dynamic<>, cast_static<>, and
 -	cast_const<>, based on RefPtr.
 -	* glom/glom.glade:
 -	* glom/translation/Makefile.am:
 -	* glom/translation/combobox_locale.cc:
 -	* glom/translation/combobox_locale.h: Added set_locale().
 -	* glom/application.cc:
 -	* glom/application.h:
 -	* glom/translation/dialog_change_language.cc:
 -	* glom/translation/dialog_change_language.h: New dialog
 -	used to choose a language to test temporarily.
 -	* po/POTFILES.in: Added dialog_change_language.cc.
 -
 -2006-01-24  Murray Cumming  <murray murrayc com>
 -
 -	* glom/data_structure/translatable_item.cc:
 -	* glom/data_structure/translatable_item.h: Added a new
 -	base class for all items that have a non-translated ID name and
 -	a translated title. This base class has a map of translated titles
 -	for locales.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: Added load_after_translations()
 -	and save_before_translations() and used it for fields, reports,
 -	tables, and layout items, so these XML nodes get a translations
 -	node if they have any translations.
 -	* glom/application.cc:
 -	* glom/base_db.cc:
 -	* glom/box_reports.cc:
 -	* glom/data_structure/Makefile.am:
 -	* glom/data_structure/field.cc:
 -	* glom/data_structure/field.h:
 -	* glom/data_structure/groupinfo.cc:
 -	* glom/data_structure/groupinfo.h:
 -	* glom/data_structure/layout/layoutgroup.cc:
 -	* glom/data_structure/layout/layoutgroup.h:
 -	* glom/data_structure/layout/layoutitem.cc:
 -	* glom/data_structure/layout/layoutitem.h:
 -	* glom/data_structure/relationship.cc:
 -	* glom/data_structure/relationship.h:
 -	* glom/data_structure/report.cc:
 -	* glom/data_structure/report.h:
 -	* glom/data_structure/tableinfo.cc:
 -	* glom/data_structure/tableinfo.h:
 -	* glom/dialog_database_preferences.cc:
 -	* glom/dialog_layout_report.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/navigation/box_tables.cc:
 -	* glom/utility_widgets/flowtablewithfields.cc: Use the base class
 -	API, removing superfluous API.
 -	* glom/translation/window_translations.cc:
 -	* glom/translation/window_translations.h: Store sharedptr<TranslatableItem>
 -	in the tree model.
 -	* po/POTFILES.in: Added the new files.
 -
 -2006-01-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	Just store a const reference (sharedptr) to the
 -	Field, instead of copying it.
 -
 -2006-01-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	Remove set_full_field_data_empty(). Instead, allow
 -	the field cache to be null and use m_name when
 -	there is no full data. Use a bool to mark when the
 -	cache is up-to-date, and do no try to use it when it
 -	is not up-to-date.
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/utils.cc: build_sql_select_with_where_clause():
 -	Cope with fields with no names, in case that happens.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: load_after_layout_item_field()
 -	and load_after_layout_item_field_formatting(): These functions
 -	now take the field type, and the table name that can be used to
 -	discover the field type if necessary. This is necessary in order
 -	to interperet default values and choices.
 -
 -2006-01-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	on_adddel_add(): Call on_adddel_changed() to save the
 -	guessed title into the document, even when the title is
 -	not edited by the user.
 -
 -2006-01-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* Many files: Use Field via sharedptr<Field>, to
 -	avoid unnecessary copying. However, LayoutItem_Field still
 -	copies it for now, to avoid conflicts.
 -	* glom/sharedptr.h: Various improvements, particularly to
 -	the nonconst->const cast, based on Glib::RefPtr.
 -
 -2006-01-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* po/POTFILES.in: Mention the desktop file.
 -
 -2006-01-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in:
 -	* glom.desktop: Removed
 -	* glom.desktop.in.in: Added .in.in file instead, based on
 -	the same thing in gnome-terminal, so that intltool can
 -	translate strings prefixed by underscores (_Name and _Comment),
 -	and so that configure.in can substitute the VERSION for
 -	bug-buddy.
 -	* glom.png:
 -	* Makefile.am: Actually install the application icon, and
 -	correct the install location for the .desktop file.
 -
 -2006-01-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* Makefile.am:
 -	* glom.applications: Removed .applications file because it is
 -	apparently the old way, for versions of GNOME with which Glom
 -	is not likely to work anyway.
 -
 -2006-01-20  Murray Cumming  <murrayc murrayc com>
 -
 -  * glom/data_structure/iso_codes.cc:
 -  * glom/data_structure/iso_codes.h: Added get_list_of_locales().
 -  The names will be translated.
 -	* configure.in:
 -	* glom/Makefile.am:
 -	* glom/application.cc:
 -	* glom/application.h:
 -	* glom/data_structure/field.h:
 -	* glom/data_structure/tableinfo.h:
 -	* glom/document/document_glom.cc:
 -	* glom/glom.glade:
 -	* glom/translation/Makefile.am:
 -	* glom/translation/combobox_locale.cc:
 -	* glom/translation/combobox_locale.h:
 -	* glom/translation/window_translations.cc:
 -	* glom/translation/window_translations.h: The beginnings of some UI
 -  to allow translation of field titles, table titles, etc. Not yet
 -  available via menus.
 -
 -0.9.2:
 -
 -2006-01-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* docs/website/screenshots/glom_data_details.png:
 -	* docs/website/screenshots/glom_data_details_related.png:
 -	* docs/website/screenshots/glom_data_list.png: Updated.
 -	* examples/example_smallbusiness.glom: Added more example data, and
 -	added a Position field to the Staff table.
 -
 -2006-01-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: init_menu_file(): Make the Save As Example menu
 -	item only available in Developer mode, to avoid confusing operators.
 -
 -2006-01-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Makefile.am:
 -	* glom/application.cc:
 -	* glom/glom.glade:
 -	* glom/dialog_progress_creating.cc:
 -	* glom/dialog_progress_creating.h: Try to show a pulsing progress dialog
 -	while recreating the example database, but it does not show up until the
 -	end.
 -	* glom/frame_glom.cc: alert_no_table(): Correct the message. It is about a
 -	lack of tables, not of databases, and it is not an error.
 -
 -2006-01-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: offer_new_or_existing(): Tell the document and the
 -	connection about the actually-used database name.
 -	* glom/base_db.cc: add_standard_tables(): Set the title from the document,
 -	if the document already has a database title.
 -	* glom/frame_glom.h:
 -	* glom/frame_glom.cc: set_databases_selected(): Show the database title
 -	when showing a new database.
 -	create_database(): Re-connect to the new database, instead of staying in
 -	template1, before creating the glom system tables. Set the title as
 -	provided in a function parameter.
 -
 -2006-01-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* NEWS:
 -	* glom/application.cc: offer_new_or_existing(): When creating a new file,
 -	discover and use an unused database name, based on the title.
 -	* glom/utils.cc:
 -	* glom/utils.h: Added create_name_from_title().
 -	* glom/dialog_new_database.cc:
 -	* glom/dialog_new_database.h:
 -	* glom/glom.glade: When creating a new file/database, do not ask the user
 -	for a database name - just guess one based on the human-readable title.
 -
 -2006-01-17  Murray Cumming <murrayc murrayc com>
 -
 -        * glom/exception.[h|cc]: Make what() const and throw(), so that it really
 -	overrides std::exception::what() so we get real text in the error dialogs.
 -	* glom/frame_glom.cc: create_database(): Call add_standard_tables() and
 -	add_standard_groups() to avoid the error/crash when adding a record to a new
 -	table in a new database.
 -
 -2006-01-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/field.cc: sql(): Move text escaping code into
 -	glom_escape_text() so it can be reused. For IMAGE fields, assume that
 -	get_binary() is already the escaped binary format, but escape it
 -	again as text, so we get the \\ needed for SQL commands.
 -	* glom/data_structure/glomconversions.cc: get_escaped_binary_data():
 -	Use one \, not \\ to separate byte numbers, because that's the format
 -	used by get/set_binary() in libgda at the moment.
 -	* glom/utility_widgets/imageglom.cc:
 -	get_value(): Use GlomConversions::get_escaped_binary_data() before
 -	set_binary() because Glom must assume elsewhere that it is escaped
 -	in all GdaValues. This workaround will all be unnecessary in libgda-2.0,
 -	which properly unescapes binary buffers.
 -	Images are now saved properly into examples, and inserted properly into
 -	the new databases that are created when examples are opened.
 -
 -2006-01-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/imageglom.cc:
 -	on_menupopup_activate_clear(): Emit the signal to actually update the database.
 -	on_menupopup_activate_paste(): Prevent crash when the received pixbuf is NULL.
 -	on_menupopup_activate_copy(): Prevent crash when the pixbuf is NULL.
 -
 -2006-01-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc: export_data_to_*(): Use specified table name,
 -	not the current table name, so that all tables are properly exported.
 -	* glom/base_db.[h|cc]: Add recalculate_next_auto_increment_value(),
 -	which does a SELECT MAX() on the table.
 -        * glom/application.cc: recreate_database():  Recalculate next auto-increment
 -	values, and create glom system tables and groups before adding data.
 -
 -2006-01-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	* glom/application.cc: on_menu_file_save_as_example():
 -	Put the example data in a string instead of a stringstream,
 -	because it was somehow truncating the data.
 -	* glom/base_db.cc: insert_example_data(): Really return true
 -	for success.
 -
 -2006-01-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/dialog_connection.cc:
 -	* glom/dialog_connection.h:
 -	* glom/document/document_glom.cc:
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h: When opening example documents,
 -	always save a copy and always create a database, choosing
 -	a new unused database name. Mark documents explicitly as examples.
 -	* glom/glom.glade: Rename Open Example button to
 -	New From Example.
 -
 -2006-01-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/application.h:
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h: Added half-working
 -	File / Save As Example menu item, which stores the
 -	data  in the .glom file, for use when creating the
 -	database from an example.
 -
 -2006-01-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/dialog_layout.cc:
 -	* glom/mode_data/dialog_layout_export.cc:
 -	* glom/mode_data/dialog_layout_export.h:
 -	* glom/glom.glade: Remove formatting button,
 -        so we _always_ export in iso format.
 -	* glom/filechooser_export.cc:
 -	* glom/filechooser_export.h: The Define Data Format
 -	button now works, though it opens in the background.
 -	It now exports only the requested fields.
 -
 -2006-01-14  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h: Add a File/Export menu item, for exporting the found set as
 -	comma-separated text.
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/box_db_table.cc:
 -	* glom/box_db_table.h:
 -	* glom/data_structure/glomconversions.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	* glom/filechooser_export.cc:
 -	* glom/filechooser_export.h:
 -	* glom/mode_data/Makefile.am:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_data/notebook_data.h:
 -	* glom/base_db.cc:
 -	* glom/base_db.h:Moved various folders into Base_DB so that Frame_Glom can use them.
 -	* glom/Makefile.am:
 -	* glom/mode_data/dialog_layout_export.cc:
 -	* glom/mode_data/dialog_layout_export.h: New layout UI for export field sequences,
 -	not yet finished or used.
 -
 -2006-01-13  Murray Cumming   <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Move get_find_where_clause_quick() from Frame_Glom to
 -	Base_DB so we can use it in Dialog_ChooseID.
 -	* glom/glom.glade:
 -	* glom/utility_widgets/dialog_choose_id.cc:
 -	* glom/utility_widgets/dialog_choose_id.h: Add the Quick Find feature
 -	to this dialog too.
 -
 -2006-01-13  Murray Cumming   <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom: Contacts: Add the web site
 -	field to the layout, and change it to text.
 -	* glom/mode_data/dialog_layout_details.cc: enable_buttons(): Properly
 -	enable/disable Up and Down for the first and last _child_ items.
 -	* glom/mode_data/dialog_layout_list.cc: enable_buttons(): Properly
 -	enable/disable Up and Down when adding fields.
 -
 -2006-01-12  Murray Cumming   <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.h:
 -	Define the placeholder row as the last row, whose existance we
 -	cause just by increasing the number of rows, so that iter_next_vfunc() gives
 -	one more row, instead of marking a boolean. This simplifies things and
 -	prevents extra placeholder rows being generated.
 -	* glom/base_db.cc:
 -	* glom/frame_glom.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h:
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_find/box_data_list_find.cc:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/imageglom.cc: Adapt to new API. And some changes to
 -	ensure that find results are shown in the appropriate view depending on whether
 -	there are >1 records found.
 -
 -2006-01-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	* glom/glom.glade: Added widgets at bottom-right to show
 -	the number of total and found records, with a Find All button
 -	when appropriate.
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_data/notebook_data.h: Added get_record_counts().
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.h: Added get_record_counts().
 -
 -2006-01-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc: Connect explicitly to the activate
 -	signal of the quick find entry, instead of using default widgets.
 -
 -2006-01-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	* glom/glom.glade: Add a Quick Find entry and button, only
 -	shown when in Find mode. It is probably inefficient, because
 -	it just ORs over all the fields.
 -
 -2006-01-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* .cvsignore:
 -	* Makefile.am:
 -	* autogen.sh:
 -	* configure.in:
 -	* docs/user-guide/.cvsignore:
 -	* docs/user-guide/C/Makefile.am:
 -	* docs/user-guide/C/glom-C.omf:
 -	* docs/user-guide/C/glom.xml:
 -	* docs/user-guide/Makefile.am:
 -	* docs/user-guide/de/de.po:
 -	* docs/user-guide/glom-C.omf.in:
 -	* gnome-doc-utils.make: Convert to the new
 -	gnome-doc-utils (xml2po) system, with a
 -	dummy de translation, though I get warnings about
 -	the path to the images in figures.
 -
 -2006-01-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* docs/postgres_gda_test.c: (main):
 -	* glom/base_db.cc:
 -	* glom/document/document_glom.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_data/notebook_data.h:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/navigation/box_tables.cc:
 -	* glom/python_embed/python_module/pygdavalue_conversions.c:
 -	(pygda_value_from_pyobject):
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	* glom/utility_widgets/combo_textglade.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	* glom/utility_widgets/flowtablewithfields.cc: Change all
 -	instances of can not to cannot. Bug #300139 from Adam Weinberger.
 -	This may or maynot be necessary.
 -
 -2006-01-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc: get_row():
 -	Do not crash if there is not model yet.
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h: Added set_primary_key_value_selected().
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_data/notebook_data.h: on_switch_page_handler():
 -	Refresh the list when showing it, trying to keep the same row selected.
 -	This means that new records (added in Details) show up. Thanks to
 -	Daniel Holbach and Greg Breland.
 -
 -2006-01-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/field.cc:
 -	Field::sql(): Also escape ; characters, because
 -	libgda seems to cause postgres to be confused by these.
 -	And allocate a big enough string for PQescapeString(), to
 -	avoid crashes. Now bug #323266 seems to really be fixed.
 -	* glom/utils.cc:
 -	* glom/utils.h: Added inefficient string_replace() for use
 -	by Field::sql().
 -
 -2006-01-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* docs/user-guide/C/glom.xml: Add IDs for
 -	sections, to make sub-menu links work.
 -	Patch from Jorge Gonzalez in bug #313107.
 -
 -2006-01-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/field.cc: Field::sql():
 -	Use a copy of the PQescapeString() function from
 -	Posrgres, instead of gda_value_stringify() to really
 -	escape text for SQL. This should fix bug #323266
 -	(crash when typing quote) from Nicolas Chevreux.
 -
 -2005-12-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* po/POTFILES.in: Added glom/connectionpool.cc.
 -
 -2005-09-04  Josep Puigdemont  <josep puigdemont gmail com>
 -
 -	* configure.in: Added 'ca' to ALL_LINGUAS.
 -
 -2005-08-24  Pawan Chitrakar  <pchitrakar gmail com>
 -
 -	* configure.in: Added ne in ALL_LINGUAS
 -
 -2005-08-17  Murray Cumming <murrayc murrayc com>
 -
 -	* docs/user-guide/Makefile.am: Removed new es SUBDIR because it
 -	does not have a Makefile.am and that breaks the build. This
 -	might need changing to the new gnome-doc-utils system anyway.
 -
 -2005-08-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* po/POTFILES.in: Added glomconversions.cc, because it now
 -	contains translatable strings.
 -
 -2005-08-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: connect(): Reimplement with
 -	get_and_connect().
 -	handle_error(): Reimplement with
 -	ConnectionPool::handle_error().
 -	* glom/connectionpool.cc:
 -	* glom/connectionpool.h: Added get_and_connect().
 -	Added handle_error().
 -	* glom/frame_glom.cc: Frame_Glom::create_database():
 -	Do not show the error dialog here because it is already shown
 -	by the calling function in application.cc.
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/python_embed/python_module/py_glom_relatedrecord.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	Call handle_error() to show a dialog when there is a
 -	database error.
 -
 -2005-08-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* docs/postgres_gda_test.c: (main): call get_errors()
 -	when database creation fails, so we know why.
 -
 -2005-08-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* docs/postgres_gda_test.c: (main): Try to create a
 -	database, because that seems to fail sometimes, possibly
 -	depending on the type of authentication used, and possibly
 -	not failing in the psql command-line tool.
 -
 -2005-07-30  Daniel Holbach <dh mailempfang de>
 -
 -	* glom/main.cc: Changed the gnome_program_init() call again.
 -	Apparently it was crashing on AMD64, though we do not know
 -	why.
 -
 -0.9.0:
 -
 -2005-07-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc: show_table_title():
 -	Use pango markup to show a big title.
 -	* glom/utility_widgets/imageglom.cc:
 -	on_menupopup_activate_select_file(): Give the filter a name.
 -
 -2005-07-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Added show_warning_no_records_found(),
 -	using the code from Frame_Glom::on_notebook_find_criteria(),
 -	so it can be reused.
 -	* glom/frame_glom.cc:
 -	* glom/mode_data/box_data.cc: on_Button_Find(): Warn the user
 -	if they have not entered any criteria.
 -	* glom/mode_find/box_data_details_find.cc:
 -	* glom/mode_find/box_data_details_find.h: Override
 -	on_flowtable_field_edited(), to stop it adding new records during
 -	finds.
 -	* glom/utility_widgets/dialog_choose_id.cc: on_box_find_criteria():
 -	show a warning if no records were found.
 -
 -2005-07-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc: on_flowtable_field_edited():
 -	Really add a new record when entering data on a blank record.
 -
 -2005-07-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h: Added
 -	confirm_delete_record() based on the code
 -	in box_data_list.cc
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h: on_button_del():
 -	Use confirm_delete_record(), already used in list view.
 -	fill_from_database(): When no primary key value is
 -	specified, fill the fields with empty values, instead
 -	of preserving whatever was there last time.
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h: Use
 -	confirm_delete_record() in the base class instead of
 -	the existing code.
 -
 -2005-07-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/fieldformatting.h:
 -	Removed unimplemented get_editable_and_allowed() function.
 -	* glom/mode_data/dialog_layout_details.cc: on_button_field_formatting():
 -	get/set the editableness from the specific column, not from the formatting
 -	column, so we actually save the change.
 -
 -2005-07-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: Added
 -	get/set_layout_current() and
 -	get/set_layout_record_viewed() for remembering
 -	(not saving in the document) information about
 -	the last-viewed records and layouts.
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h: Added get_layout_name().
 -	* glom/mode_data/box_data_details.cc: fill_from_database():
 -	Remember the record.
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_data/notebook_data.h: Override on_switch_page_handler()
 -	so we can remember the last-viewed layout.
 -	init_db_details(): Open the last-viewed record and switch to the
 -	last-viewed layout.
 -	* glom/notebook_glom.h: Make on_switch_page_handler() virtual.
 -
 -2005-07-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h: Added
 -	get_primary_key_value_first()
 -	* glom/mode_data/notebook_data.cc: init_db_details(): Show the first
 -	record from the list in the detauls.
 -	* glom/notebook_glom.cc: on_switch_page_handler():
 -	Do not call load_from_document() on the child page. It is
 -	superfluous.
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	get_key_value(): Retrieve the data from the database
 -	if necessary. Previously we always called get_value()
 -	first.
 -
 -2005-07-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/field.cc:
 -	* glom/data_structure/field.h: Added sql_find(), like sql(),
 -	but with wildcards.
 -	* glom/glom.glade: Added a dialog for finding an ID.
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/dialog_choose_id.cc:
 -	* glom/utility_widgets/dialog_choose_id.h: Added dialog.
 -	* glom/mode_data/box_data.cc: get_find_where_clause():
 -	Use sql_find() to do a substring search.
 -	* po/POTFILES.in: Added the new .cc file.
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h: Added set_read_only()
 -	to prevent editing when the list is only for selection.
 -	Added set_open_button_title() which delegates to the DbAddDel.
 -	* glom/mode_find/box_data_details_find.cc:
 -	* glom/mode_find/box_data_details_find.h:
 -	* glom/mode_find/notebook_find.cc: Override init_db_details(),
 -	without a primary key parameter.
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/datawidget.h: Added
 -	offer_related_record_id_find() and a Find button next to
 -	fields used in relationships. This opens a secondary dialog
 -	with the Find UI.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	Added set_open_button_title() so we can use Select instead
 -	of Open in the Find ID dialog.
 -	* glom/utility_widgets/db_adddel/db_adddel_withbuttons.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel_withbuttons.h:
 -	Override set_allow_view_details() to show/hide the open
 -	button.
 -
 -0.8.37:
 -
 -2005-07-26  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc: fill_layout_field_details():
 -	Handle portals, so we do not lose field information for portals
 -	when editing the whole layout.
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	Dialog_Layout_Details::fill_group(): Handle portals.
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -
 -2005-07-25  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Depend on latest libgdamm.
 -	* glom/utility_widgets/imageglom.cc:
 -	* glom/data_structure/field.cc: Change for latest libgdamm
 -	API change.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: Remove unused
 -	set_relationship_data_layout_groups().
 -	* glom/mode_data/box_data_details.cc: on_flowtable_layout_changed():
 -	Actually save the new layout in the document. For instance, really
 -	save portal layout changes.
 -
 -2005-07-25  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/cellrenderer_button.cc:
 -	* glom/utility_widgets/db_adddel/cellrenderer_button.h:
 -	signal_clicked(): Add path parameter, so we know what row
 -	was clicked.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	Open the clicked row, not just the selected row.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/datawidget.h:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/flowtablewithfields.h: Add an Open
 -	button next to foreign keys, when a unique non-hidden record is
 -	indicated.
 -
 -2005-07-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h: Added virtual
 -	enable_buttons(), and moved some code there to stop the
 -	base class from making the Open button visible again for
 -	hidden-table related records.
 -	* glom/utility_widgets/db_adddel/db_adddel_withbuttons.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel_withbuttons.h:
 -	Added a show_all_vfunc() implementation in case a
 -	show_all() would show the hidden buttons.
 -
 -2005-07-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/cellrenderer_button.cc:
 -	Constructor: Use the OPEN stock item instead of EDIT for
 -	viewing details. Set mode to activatable so it actually
 -	responds to clicks.
 -
 -2005-07-22  Murray Cumming  <set EMAIL_ADDRESS environment variable>
 -
 -	* glom/mode_data/box_data_list.cc: Call
 -	DbAddDel::set_allow_view_details() so we get the open button
 -	and the row open button.
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h: Change
 -	*use_row_button to *allow_view_details.
 -	on_button_press_event_Popup(): Do not handle double-click on
 -	the row to open the details, because it is too easy to
 -	double-click when single-clicking to edit a cell.
 -	* glom/utility_widgets/db_adddel/db_adddel_withbuttons.cc:
 -	setup_buttons(): Just hide the buttons when necessary,
 -	instead of adding and removing them.
 -
 -2005-07-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: Added get_table_is_hidden().
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h: Handle signal_record_details_requested on the
 -	Notebook_Data, to show a specific record in another table.
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h: Added
 -	signal_requested_related_details, emitted when a FlowTable emits
 -	its own signal_requested_related_details.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h: Added
 -	set_use_row_button().
 -	* glom/mode_data/box_data_list_related.cc: init_db_details():
 -	If the related table is not hidden, then add a button on each
 -	row, to navigate to the related record.
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_data/notebook_data.h: Catch the signal from
 -	Box_Data_Details, and emit
 -	signal_details_requested signal_record_details_requested.
 -	Added show_details(), so the parent Frame can specify a
 -	record.
 -	* glom/utility_widgets/db_adddel/Makefile.am:
 -	* glom/utility_widgets/db_adddel/cellrenderer_button.cc:
 -	* glom/utility_widgets/db_adddel/cellrenderer_button.h: New
 -	derived CellRenderer, which is just an icon at the moment.
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/flowtablewithfields.h: Added
 -	signal_requested_related_details.
 -
 -0.8.36:
 -
 -2005-07-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/fieldformatting.cc:
 -	* glom/data_structure/layout/fieldformatting.h:
 -	Added change_field_name() and change_relationship_name(),
 -	to update choices when these change.
 -	* glom/data_structure/layout/layoutgroup.cc:
 -	Update field formatting too.
 -	* glom/document/document_glom.cc:
 -	change_relationship_name(), change_field_name():
 -	Update all the default formatting too.
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h:
 -	on_adddel_user_requested_add(): Do not try to add
 -	related records to portals that have no columns,
 -	avoiding a database error.
 -
 -2005-07-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutgroup.cc:
 -	* glom/data_structure/layout/layoutgroup.h:
 -	* glom/data_structure/layout/layoutitem_portal.cc:
 -	* glom/data_structure/layout/layoutitem_portal.h:
 -	Inherit from LayoutGroup instead of LayoutItem, so we
 -	can store the related records layout inside it, instead
 -	of in a separate hacked-up layout node in the document.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	Save LayoutItem_Portal layout groups.
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/mode_data/dialog_layout_list_related.h:
 -	* glom/mode_data/treestore_layout.h:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	Pass the whole LayoutItem_Portal around instead of just
 -	the relationship name, and don't try to store the
 -	portal layout separately in the document.
 -
 -2005-07-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutgroup.cc:
 -	* glom/data_structure/layout/layoutgroup.h: Added
 -	change_relationship_name() to update the layout
 -	when a relationship is renamed.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: Added
 -	change_relationship_name().
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	save_to_document(): Detect a rename and call
 -	Document_Glom::change_relationship_name() so it does not
 -	break the layout.
 -
 -2005-07-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutgroup.cc:
 -	* glom/data_structure/layout/layoutgroup.h: Added
 -	change_related_field_item_name(). change_field_item_name():
 -	Process child groups and self-related fields.
 -	* glom/document/document_glom.cc: change_field_name():
 -	Process all tables, to change related fields in layouts and
 -	reports.
 -
 -2005-07-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/dialog_choose_field.cc: Constructor:
 -	The list is now sorted alphabetically.
 -	* glom/utils.cc: build_sql_select_with_where_clause():
 -	Prefix aliases with relationship_ to avoid conflicts with table
 -	names.
 -
 -2005-07-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: Base_DB::set_database_preferences(): Save
 -	the title into the document as well as the database, for the
 -	window title, and for database recreation.
 -
 -2005-07-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/relationship.cc:
 -	* glom/data_structure/relationship.h: Added get/set_allow_edit()
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	get_editable_and_allowed(): Also check the relationship, if any.
 -	* glom/document/document_glom.cc: Load/Save the allow_edit of
 -	the relationship.
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	* glom/mode_design/box_db_table_relationships.h: Add a column
 -	for allow_edit, so relationships can prevent editing of
 -	related fields.
 -
 -2005-07-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc: fill_layout_field_details():
 -	Get field details from the appropriate table, even if it is a
 -	related field. This stops us losing related fields on layouts.
 -
 -2005-07-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utils.cc: build_sql_select(): Use AS to create an
 -	alias name for the related table, so we can use two
 -	relationships to the same table.
 -
 -0.8.35:
 -
 -2005-07-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc: set_field_value_in_database():
 -	Use the related table name if it is a related table.
 -	add_related_record_for_field(): Added some warnings.
 -	* glom/mode_data/box_data_details.cc:
 -	get_primary_key_value_selected(): Actually return the field,
 -	instead of a null field.
 -	get_field_primary_key(): Return true instead of false, to
 -	indicate success. This fixes automatic related-field setting.
 -	* glom/utility_widgets/imageglom.cc:
 -
 -2005-07-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	* glom/mode_design/box_db_table_relationships.h: Add a suitable
 -	capitalized title when adding a relationship name.
 -
 -2005-07-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc:
 -	get_data_layout_groups_plus_new_fields(): Create a more useful
 -	default details layout, with overview and details sections.
 -	* glom/utility_widgets/flowtable.cc:
 -	get_minimum_column_height(): Change a < to <= so we check
 -	all widgets, so that multi-column FlowTables work when they
 -	have only one item.
 -
 -2005-07-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutgroup.cc:
 -	* glom/data_structure/layout/layoutgroup.h: add_item():
 -	Return a pointer to the added item.
 -	* glom/navigation/box_tables.cc: on_adddel_Add(): Add
 -	a description and comments field as well as an ID field
 -	when creating new tables.
 -
 -2005-07-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/treestore_layout.cc: Prevent items from being
 -	dragged directly under themselves, preventing a crash.
 -
 -2005-07-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc: get_suitable_width()
 -	* glom/utility_widgets/datawidget.cc: constructor:
 -	Give images the same width as text fields, with an equal height,
 -	so they line up more, though this might be too big.
 -
 -2005-07-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/imageglom.cc: Do not crash when reading bad
 -	image data from the database.
 -
 -0.8.34:
 -
 -2005-07-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.cc: Contacts table: Made the ID
 -	autoincrement again and added choice for Title. This got lost
 -	somehow. Changed database name again to avoid clash with already-
 -	created examples.
 -	* glom/utility_widgets/imageglom.cc:
 -	* glom/utility_widgets/imageglom.h: Added a Clear context menu item.
 -
 -2005-07-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc: Comment out the debug query output on
 -	stdout, because it slows us down when we use lots of image data.
 -	* glom/data_structure/glomconversions.cc: Tried to use
 -	PQescapeBytea() instead of my custom (slow) encoding code, without
 -	success, so left that code commented-out.
 -	* glom/utility_widgets/imageglom.cc:
 -	* glom/utility_widgets/imageglom.h: Implemented copy/paste.
 -
 -2005-07-14  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc:on_flowtable_field_edited():
 -	Special case to avoid calling set_value() with a _correct_
 -	GdaValue, because we expect the current broken binary GdaValue.
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/imageglom.cc:
 -	* glom/utility_widgets/imageglom.h: Images show up again after
 -	loading, and after retrieval from database. Nifty.
 -
 -2005-07-14  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/imageglom.cc:
 -	* glom/utility_widgets/imageglom.h: Put the Gtk::Image in a
 -	Gtk::Frame so we can see it when it is empty. Added a context
 -	menu for user mode, and restricted the file chooser to pixbuf
 -	types.
 -
 -2005-07-14  Murray Cumming  <murrayc.com>
 -
 -	* glom/data_structure/field.cc: sql(): Handle TYPE_IMAGE
 -	fields.
 -	* glom/data_structure/glomconversions.cc:
 -	* glom/data_structure/glomconversions.h: Add
 -	get_escaped_binary_data() and parse_escaped_binary_data(),
 -	using a a copy of the PQunescapeBytea() function from
 -	Postgres, because gda_value_get_binary() does not unescape
 -	the data yet.
 -	* glom/utility_widgets/datawidget.cc: Connect to the
 -	LayoutWidgetField signals for the ImageGlom widget.
 -	* glom/utility_widgets/imageglom.cc:
 -	* glom/utility_widgets/imageglom.h: set_value():
 -	Use our copy of PQunescapeBytea().
 -	* glom/utility_widgets/layoutwidgetfield.cc:
 -	* glom/utility_widgets/layoutwidgetfield.h: Added
 -	get_has_original_data() for later optimisation.
 -
 -2005-07-12  Murray Cumming  <murrayc murryac com>
 -
 -	* glom/data_structure/field.h: Document the IMAGE type
 -	as always being stored as PNG.
 -	* glom/utility_widgets/imageglom.cc:
 -	* glom/utility_widgets/imageglom.h: Implement set_value(),
 -	though I'm still not sure how to get/set it in SQL.
 -
 -2005-07-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/imageglom.cc:
 -	* glom/utility_widgets/imageglom.h: Scale images down to fit the
 -	allocated size of the Image widget.
 -
 -2005-07-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/imageglom.cc:
 -	* glom/utility_widgets/imageglom.h: Use a derived Image widget
 -	so we can catch button_press_events on it.
 -
 -2005-07-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/field.cc:
 -	* glom/data_structure/field.h:
 -	- Added map of possible field conversions, and
 -	get_conversion_possible().
 -	- Added TYPE_IMAGE, which maps to "bytea" in SQL and
 -	Gnome::Gda::Value::TYPE_BINARY.
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	Don't cast the data if it is not possible.
 -	* glom/utility_widgets/datawidget.cc: Constructor: Create a
 -	Gtk::Image widget for image fields.
 -
 -2005-07-11  Daniel Holbach <dh mailempfang de>
 -
 -	* glom/main.cc: Pass G_PARAM_NONE to gnome_program_init() to
 -	avoid a crash at startup.
 -
 -0.8.33:
 -
 -2005-07-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/dialog_layout_details.cc: on_cell_data_name():
 -	Allow group names to be changed.
 -
 -2005-07-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: get_table_names(): Added optional bool
 -	ignore_system_tables parameter
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	fill_from_database(): Hide the system tables.
 -
 -2005-07-09  Murray Cumming  <set EMAIL_ADDRESS environment variable>
 -
 -	* configure.in: Depend on gnome-vfsmm 2.11, instead of just
 -	the version that bakery needs, because we need
 -	Uri::make_from_shell_arg().
 -	* glom/navigation/box_tables.cc: load_from_document(): Really
 -	hide the glom_system_* tables.
 -
 -2005-07-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: Added get_first_table().
 -	* glom/frame_glom.cc: on_dialog_tables_hide(): If the current
 -	table was deleted, show the default or first table.
 -
 -0.8.32:
 -
 -2005-07-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/glomconversions.cc: Really use GDate
 -	to parse dates that the C++ facet can not parse.
 -
 -2005-07-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/main.cc: Allow the filename to be specified
 -	even without a --file option name. And convert
 -	the filename to a URI so it actually works.
 -
 -2005-07-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc: remove_table():
 -	Prevent infinite loop.
 -
 -2005-07-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.h: Made fill_tables_menu() public.
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h: When the tables dialog is hidden,
 -	in developer mode, update the tables menu, in case the
 -	list has changed.
 -
 -2005-07-08  Murray Cumming <murrayc murrayc com>
 -
 -	* docs/Makefile.am:
 -	* docs/postgres_gda_test.c: Added a libgda test
 -	to test whether the installed libgda works.
 -
 -2005-07-04  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/applications.cc:
 -	App_Glom::on_document_load(): Add a Save As button
 -	to the dialog that warns when an example is
 -	read only.
 -
 -0.8.31:
 -
 -2005-06-16  Murray Cumming <murrayc murrayc com>
 -
 -	* examples/Makefile.am:
 -	Install the examples in <prefix>/share/glom/doc/,
 -	which I guess is correct.
 -	* glom/Makefile.am:
 -	* glom/application.cc: offer_new_or_existing():
 -	* glom/glom.glade:
 -	Add an Open Examples button that goes straight to
 -	the installed examples.
 -	* configure.in: Depend on bakery 2.3.14, to get
 -	changed API for this.
 -
 -2005-05-25  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtable.cc: Commented out
 -	a g_warning that was causing a compiler warning.
 -
 -0.8.30:
 -
 -2005-05-25  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/layout_item_dialogs/box_formatting.cc:
 -	* glom/layout_item_dialogs/dialog_field_layout.cc:
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	Make Box_Formatting a sub-view so it has access
 -	to the document, so we can use choices from
 -	related tables again.
 -
 -0.8.29:
 -
 -2005-05-18  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc:
 -        set_node_attribute_value_as_bool/as_decimal():
 -	Save lots of space by writing/interpreting
 -	non-existant attributes as false or zero.
 -
 -2005-05-18  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/dialog_layout_report.cc: constructor:
 -	Position the available parts hierarchically, to
 -	indicate their expected relationship.
 -
 -2005-05-18  Murray Cumming <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom: Add default
 -	field formatting, instead of custom formatting.
 -	* glom/base_db.cc:
 -	* glom/data_structure/field.cc:
 -	* glom/data_structure/field.h: Added default_formatting.
 -	* glom/data_structure/layout/Makefile.am:
 -	* glom/data_structure/layout/fieldformatting.cc:
 -	* glom/data_structure/layout/fieldformatting.h:
 -	Added FieldFormatting to hold numeric formatting,
 -	text formatting, and the various choices.
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	Replace individual formatting members with a
 -	FieldFormatting, and added boolean to specify
 -	use of the default.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	Save/load the formatting as a whole node, and save
 -	Field default formatting.
 -	* glom/glom.glade: Move field formatting into a
 -	VBox that can be used in both the field definition
 -	dialog and the field layout dialog for custom
 -	formatting.
 -	* glom/layout_item_dialogs/Makefile.am:
 -	* glom/layout_item_dialogs/box_formatting.cc:
 -	* glom/layout_item_dialogs/box_formatting.h:
 -	Added derived VBox for the formatting.
 -	* glom/layout_item_dialogs/dialog_field_layout.cc:
 -	* glom/layout_item_dialogs/dialog_field_layout.h:
 -	Use Box_Formatting instead of the individual
 -	formatting widgets.
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	Use the appropriate formatting, using custom formatting
 -	if specified.
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	* glom/mode_design/fields/dialog_fielddefinition.h:
 -	Moved Extras tab into the main tab. Added Default
 -	Formatting tab.
 -	* glom/utility_widgets/comboentryglom.cc:
 -	* glom/utility_widgets/comboglom.cc:
 -	* glom/utility_widgets/comboglomchoicesbase.cc:
 -	* glom/utility_widgets/comboglomchoicesbase.h:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/entryglom.cc:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/textviewglom.cc:
 -	* glom/utils.cc:
 -	Use the default formatting, if specified.
 -
 -0.8.28:
 -
 -2005-05-16  Murray Cumming <murrayc murrayc com>
 -
 -	* xslt/print_report_to_html.xsl:
 -	* glom/base_db.cc: build_report(): Left align most fields and
 -        right-align numeric fields, though this is a bit of a hack.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h: load_after_layout_group():
 -	Corrected loading of groupby secondary fields.
 -        update_cached_relationships(): Do not save the document while
 -	doing this.
 -
 -2005-05-16  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/box_db_table.cc:
 -	* glom/layout_item_dialogs/dialog_group_by.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	Do not call fill_from_database() if the connection is not
 -	ready, to prevent misleading g_warnings.
 -
 -2005-05-15  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/data_structure/layout/report_parts/layoutitem_groupby.cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_groupby.h:
 -	* glom/document/document_glom.cc:
 -	* glom/glom.glade:
 -	* glom/layout_item_dialogs/Makefile.am:
 -	* glom/layout_item_dialogs/dialog_group_by.cc:
 -	* glom/layout_item_dialogs/dialog_group_by.h:
 -	* glom/layout_item_dialogs/dialog_groupby_secondaryfields.cc:
 -	* glom/layout_item_dialogs/dialog_groupby_secondaryfields.h:
 -	* glom/mode_data/dialog_layout.cc:
 -	* glom/utility_widgets/comboglomchoicesbase.cc:
 -	* xslt/print_report_to_html.xsl:
 -	Added secondary_fields to the GroupBy report part, so we can show,
 -	for instance, a contact name as well as the contact id that we
 -        group by.
 -
 -2005-05-15  Murray Cumming <murrayc murrayc com>
 -
 -	* po/POTFILES.in: Mention new files.
 -
 -2005-05-15  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/base_db.cc: build_report_fields(): For numeric fields
 -	create a <field_numeric> instead of <field> node.
 -	* xslt/print_report_to_html.xsl: Handle <field_numeric>, like
 -	<field>, but with align=right in the HTML <td>. Hopefully there is
 -	a better way to do this.
 -
 -2005-05-15  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	report_build_summary(): Implemented, so summary parts show up in
 -	reports.
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	Added get_title_or_name(), delegating to the member Field.
 -	* glom/data_structure/layout/report_parts/layoutitem_fieldsummary.cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_fieldsummary.h:
 -	Override get_title_or_name() to mention the summary type. Added
 -	get_layout_display_name_field() to get just the field part. Corrected
 -	the copy constructor and operator== to use the summary type too.
 -	* glom/dialog_layout_report.cc:
 -	Show the field name and summary type properly.
 -	* glom/document/document_glom.cc:
 -	Save the summary type of LayoutItem_FieldSummary parts.
 -	* glom/layout_item_dialogs/dialog_field_summary.cc:
 -	* glom/utils.cc: build_sql_select_with_where_clause(): If the LayoutItem_Field
 -	is actually a LayoutItem_FieldSummary, use a summary function instead of just
 -	getting the field value.
 -	* xslt/print_report_to_html.xsl: Added a block for the summary part.
 -
 -2005-05-14  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/data_structure/field.h:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/dialog_layout.h:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_list.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.h:
 -	* glom/utils.cc:
 -	* glom/utils.h:
 -	type_vecLayoutItems now stores sharedptr<LayoutItem_Field>s
 -	instead of by-value copying. This allows us to use the
 -        LayoutItem_Field polymorphically as well as improving
 -        performance.
 -
 -2005-05-14  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	Moved report_build_* methods from Frame_Glom to
 -	Base_DB, so they can be used in Box_Data_List.
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 -	Overrode print_layout() and created a non-grouping
 -	report on the fly, to implement File/Print for Lists.
 -	* xslt/print_report_to_html.xsl:
 -	Handle ungrouped_fields, a bit like group_by.
 -
 -2005-05-14  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/report_parts/Makefile.am:
 -	* glom/data_structure/layout/report_parts/layoutitem_fieldsummary.c
 -	c:
 -	* glom/data_structure/layout/report_parts/layoutitem_fieldsummary.h
 -	: Add a LayoutPart for the field summary report parts.
 -	* glom/dialog_layout_report.cc:
 -	* glom/dialog_layout_report.h:
 -	Disable the Add button when inappropriate parts are selected.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	Save/Load the Summary parts.
 -	* glom/glom.glade:
 -	* glom/layout_item_dialogs/Makefile.am:
 -	* glom/layout_item_dialogs/combo_summarytype.cc:
 -	* glom/layout_item_dialogs/combo_summarytype.h:
 -	* glom/layout_item_dialogs/dialog_field_summary.cc:
 -	* glom/layout_item_dialogs/dialog_field_summary.h:
 -	Added UI fo rthe summary parts.
 -	* po/POTFILES.in: Mention the new files.
 -
 -2005-05-11  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/glom.glade:
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/textviewglom.cc:
 -	Use SHADOW_IN for ScrolledWindows. The HIG
 -	wants that.
 -
 -0.8.27:
 -
 -2005-05-11  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/report_parts/Makefile.am:
 -	Fixed a distcheck problem.
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	on_menu_report_selected(): Add field headings, and
 -	recurse into sub-groupbys.
 -	* po/POTFILES.in: Updated.
 -	* xslt/print_report_to_html.xsl: Added class names for
 -	the various parts, and added a little inline css to
 -	use them. Used select with apply-templates to put
 -	sub-groupbys in the right place.
 -
 -2005-05-11  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	Moved get_layout_item_table_name() here from
 -	box_data. Added fill_full_field_details().
 -	* glom/document/document_glom.cc:
 -	update_cached_relationships(): Fill in the
 -	relationships in the report layouts too.
 -        Also call this at the start of save_before(),
 -	to ensure that relationships are always up to
 -	date.
 -	* glom/frame_glom.cc: on_menu_report_selected():
 -	Do a GROUP BY sql SELECT and then a WHERE sql
 -	SELECT for each value, creating nodes for each
 -	value.
 -	* xslt/print_report_to_html.xsl: Show field
 -	headings, and group-by details.
 -
 -2005-05-11  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutgroup.cc:
 -	* glom/dialog_layout_report.cc:
 -	* glom/dialog_layout_report.h:
 -	* glom/document/document_glom.cc:
 -	* glom/frame_glom.cc:
 -	* glom/mode_data/dialog_layout.h:
 -	Fix various problems with loading/saving
 -	report parts.
 -
 -2005-05-10  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	Added offer_field_list(), moved from B
 -	* glom/data_structure/layout/report_parts/layoutitem_groupby.cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_groupby.h:
 -	Added set_field_group_by() and set_field_sort_by().
 -	* glom/dialog_layout_report.cc:
 -	* glom/dialog_layout_report.h:
 -	on_button_edit(): show Dialog_GroupBy to change properties.
 -	* glom/document/document_glom.cc:
 -	load_after_layout_group(), save_before_layout_group(): Handle
 -	the GroupBy part so we really save the report items.
 -	* glom/glom.glade:
 -	* glom/layout_item_dialogs/Makefile.am:
 -	* glom/layout_item_dialogs/dialog_group_by.cc:
 -	* glom/layout_item_dialogs/dialog_group_by.h:
 -	Added dialog for GroupBy part properties.
 -
 -2005-05-10  Murray Cumming <murrayc murrayc com>
 -
 -	* Makefile.am:
 -	* configure.in:
 -	* glom/Makefile.am:
 -	* glom/dialog_layout_report.cc:
 -	* glom/layout_item_dialogs/Makefile.am:
 -	* glom/layout_item_dialogs/dialog_field_layout.cc:
 -	* glom/layout_item_dialogs/dialog_field_layout.h:
 -	* glom/mode_data/Makefile.am:
 -	* glom/mode_data/dialog_field_layout.cc:
 -	* glom/mode_data/dialog_field_layout.h:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_list.cc:
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/utility_widgets/datawidget.cc:
 -	Moved dialog_field_layout.[h|cc] from mode_data/
 -	to the new layout_item_dialogs/ directory.
 -
 -2005-05-10  Murray Cumming,,,  <murrayc murrayc com>
 -
 -	* glom/Makefile.am:
 -	* glom/data_structure/glomconversions.cc:
 -	* glom/data_structure/glomconversions.h:
 -	* glom/utils.cc:
 -	* glom/utils.h: Added utils.[h|cc] with some functions from
 -	GlomConversions:: and some from xsl stuff from Box_Data.
 -	* glom/data_structure/layout/report_parts/layoutitem_groupby.cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_groupby.h:
 -	Add sort_by field.
 -	* glom/frame_glom.cc: on_menu_report_selected():
 -	Beginnings of report generation.
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	Use functions from GlomUtils::.
 -	* xslt/Makefile.am:
 -	* xslt/print_report_to_html.xsl:
 -	Added xsl transformation for reports.
 -
 -2005-05-09  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/application.h:
 -	fill_menu_tables(), fill_menu_reports(): Use UIManager::remove_ui()
 - 	to remove the previous tables, so we really lose removed/renamed
 -	report names.
 -	* glom/box_reports.cc:
 -	Handle, and save, title changes.
 -	* glom/data_structure/layout/report_parts/layoutitem_groupby.cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_groupby.h:
 -	* glom/data_structure/layout/report_parts/layoutitem_summary.cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_summary.h:
 -	Add get_layout_part_name() overrides so they show up in the
 -	list of available parts.
 -	* glom/dialog_layout_report.cc:
 -	* glom/dialog_layout_report.h:
 -	Added get_report() and get_original_name().
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	Added signal_hide handlers for the report list and report layout
 -	dialogs, to rebuild the report menu and save the report details.
 -
 -2005-05-09  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/box_reports.cc:
 -	Set changes in the document.
 -	* glom/data_structure/report.cc:
 -	* glom/data_structure/report.h:
 -	Added get_title_or_name().
 -	* glom/data_structure/tableinfo.cc:
 -	* glom/data_structure/tableinfo.h:
 -	Added get_title_or_name().
 -	* glom/frame_glom.cc: fill_menu_tables(),
 - 	fill_menu_reports():
 -	Show the name if the title is empty.
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	* glom/utility_widgets/adddel/adddel.h:
 -	Added remove_item_by_key().
 -
 -2005-05-08  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/application.h:
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h: Added Reports menu,
 -	like the new Tables menu.
 -
 -2005-05-08  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/application.h:
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	Changed the Navigation menu to a Tables menu,
 -	with dynamic menu items for each non-hidden
 -	table. The full tables dialog is now only for
 -	developers, available from the Edit Tables
 -	menu item.
 -
 -2005-05-08  Murray Cumming <murrayc murrayc com>
 -
 -	* configure.in:
 -	* glom/Makefile.am:
 -	* glom/glom.glade:
 -	* glom/box_reports.cc:
 -	* glom/box_reports.h:
 -	* glom/dialog_layout_report.cc:
 -	* glom/dialog_layout_report.h:
 -	Beginnings of UI to add/remove reports, and to edit them.
 -	* glom/data_structure/Makefile.am:
 -	* glom/data_structure/layout/Makefile.am:
 -	* glom/data_structure/layout/layoutgroup.cc:
 -	* glom/data_structure/layout/report_parts/Makefile.am:
 -	* glom/data_structure/layout/report_parts/layoutitem_groupby.cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_groupby.h:
 -	* glom/data_structure/layout/report_parts/layoutitem_summary.cc:
 -	* glom/data_structure/layout/report_parts/layoutitem_summary.h:
 -	* glom/data_structure/report.cc:
 -	* glom/data_structure/report.h:
 -	Beginnings of data structure for reports and their parts.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	API to get/set reports, and load/save them.
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	Use the new UI bits for reports.
 -
 -2005-05-06  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/Makefile.am:
 -	* glom/application.cc:
 -	* glom/data_structure/layout/layoutgroup.cc:
 -	* glom/data_structure/layout/layoutgroup.h:
 -	* glom/data_structure/layout/layoutitem.h:
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	* glom/data_structure/layout/layoutitem_portal.cc:
 -	* glom/data_structure/layout/layoutitem_portal.h:
 -	* glom/dialog_layout_report.cc:
 -	* glom/dialog_layout_report.h:
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	* glom/glom.glade:
 -	* glom/main.cc:
 -	* glom/mode_data/dialog_layout.cc:
 -	* glom/mode_data/dialog_layout.h:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* po/POTFILES.in:
 -	Added a Developer/Reports menu item, with non-working
 -	beginnings of a simple layout dialog, with available
 -	parts on the left, and chosen parts on the right.
 -
 -2005-05-04  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/base_db.cc: get_table_privileges(): Really give full
 -	rights to members of the developer group, whatever rights
 -	that group has saved.
 -
 -2005-05-04  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/frame_glom.cc: Show the organisation name as well as
 -	the system name.
 -	* glom/navigation/box_tables.cc: Check for glom_system_*
 - 	tables and do not show them.
 -
 -2005-05-04  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	Pass the where_clause when calling refresh_from_database()
 -	on the model.
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.h:
 -	refresh_from_database(): Take where_clause parameter as
 -	well as in the constructor. clear() existing records before
 -	getting them again.
 -
 -2005-05-04  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/base_db.cc: get_next_autoincrement_value():
 -	Really increment the value.
 -
 -2005-05-04  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	Added auto_increment_insert_first_if_necessary()
 -	by moving some code from get_auto_increment_next_value().
 -	* glom/dialog_database_preferences.cc:
 -	* glom/dialog_database_preferences.h:
 -	load_from_document(): Iterate over all fields and
 -	call auto_increment_insert_first_if_necessary() for all
 -	primary keys, so they all show up in the dialog.
 -
 -2005-05-04  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/base_db.cc: get_table_privileges():
 -	Reverted a search/replace that broke parsing of
 -	user rights.
 -
 -2005-05-03  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h: Added
 -        get_next_auto_increment_value()
 - 	add_standard_table(): add the
 -	glom_system_autoincrements table.
 -	* glom/dialog_database_preferences.cc:
 -	* glom/dialog_database_preferences.h:
 -	Read and write to the autoincrement table.
 -	* glom/mode_data/box_data.cc:
 -	* glom/standard_table_prefs_fields.h:
 -	Added structure for glom_system_autoincrements
 -	table.
 -
 -2005-05-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/application.h:
 -	* glom/base_db.cc:
 -	* glom/box_db.cc:
 -	* glom/box_db.h:
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	* glom/glom.glade:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_find/box_data_details_find.cc:
 -	* glom/mode_find/box_data_list_find.cc:
 -	* glom/notebook_glom.cc:
 -	* glom/notebook_glom.h:
 -	Move Mode label to the bottom of the window.
 -	Show the system name at the top, from the
 -	database preferences. Remove crufty hints
 -	stuff.
 -
 -2005-05-03  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/Makefile.am:
 -	* glom/dialog_database_preferences.cc:
 -	* glom/dialog_database_preferences.h:
 -	* glom/glom.glade:
 -	Added dialog to show system-wide details
 -	and next auto-increment values.
 -	* glom/data_structure/Makefile.am:
 -	* glom/data_structure/system_prefs.cc:
 -	* glom/data_structure/system_prefs.h:
 -	New class to hold system-wide preferences.
 -	* glom/standard_table_prefs_fields.h:
 - 	Added list of #defines for the standard
 -	table database structure.
 -	* glom/application.cc: recreate_database():
 -	Call new add_standard_tables() method to
 -	hold system-wide preferences.
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	Move some of recreate_database() into
 -	create_table() and reused it in new
 -	add_standard_tables() method.
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	Add Developer/Database Preferences menu
 -	item and handle it.
 -
 -2005-05-02  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	Use ScrolledWindow::set_policy(POLICY_AUTOMATIC) so
 -	we do not get useless scrollbars.
 -
 -2005-05-02  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_find/box_data_list_find.cc:
 -	* glom/mode_find/box_data_list_find.h:
 -	Override some signal handlers from the base class, to
 -	prevent adding new rows to the database.
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	get_value_vfunc(): Check the count of columns, not the
 -	count of columns in the data model, so we can show
 -	an empty placeholder row without database data, for
 -	instance in Find mode.
 -
 -2005-05-02  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/application.h:
 -	Added set_mode_find().
 -	* glom/frame_glom.cc:
 -	on_notebook_find_criteria(): Show a dialog
 -	when no records were found, and offer to
 -	return to find mode. Show the mode in the
 -	Mode menu when programatically changing mode.
 -
 -2005-05-02  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/box_db_table.cc:
 -	* glom/box_db_table.h:
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	* glom/main.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h:
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_data/notebook_data.h:
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	* glom/mode_design/box_db_table_relationships.h:
 -	* glom/mode_design/dialog_design.cc:
 -	* glom/mode_design/dialog_design.h:
 -	* glom/mode_design/dialog_fields.cc:
 -	* glom/mode_design/dialog_fields.h:
 -	* glom/mode_design/dialog_relationships.cc:
 -	* glom/mode_design/dialog_relationships.h:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/fields/box_db_table_definition.h:
 -	* glom/mode_find/box_data_details_find.cc:
 -	* glom/mode_find/box_data_details_find.h:
 -	* glom/mode_find/box_data_list_find.cc:
 -	* glom/mode_find/box_data_list_find.h:
 -	* glom/mode_find/notebook_find.cc:
 -	* glom/mode_find/notebook_find.h:
 -	* glom/navigation/box_tables.cc:
 -	* glom/navigation/box_tables.h:
 -	init_from_database(), fill_from_database(), and
 -	refresh_from_database() now return a bool. This should
 -	let us detect empty results from finds.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.h:
 -	Add AddDel::refresh_from_database(), and
 -	DbTreeModel::refresh_from_database() so we can build
 -	the structure separately and refill it repeatedly with
 -	data.
 -
 -2005-05-01  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/data_structure/field.cc:
 -	* glom/data_structure/field.h: Added
 -	sql_find_operator()
 -	* glom/mode_data/box_data.cc: Use it instead
 -	of LIKE.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	Fix crash due to use of old key column.
 -
 -0.8.25:
 -
 -2005-04-29  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/data_structure/field.cc:
 -	* glom/data_structure/field.h:
 -	Added get_has_calculation() for performance.
 -	* glom/mode_data/Makefile.am:
 -	* glom/mode_data/calcinprogress.cc:
 -	* glom/mode_data/calcinprogress.h:
 - 	Added data structure for fields being calculated.
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	- Added m_FieldsCalculationInProgress, so we can
 -	maintain the state of all ongoing calculations
 -	when calculating fields.
 -	- Added calculate_field() which calculates and
 -	sets a calculated field and any calculated fields
 -	that it needs. Whenc called recursively, it
 -	is aware of existing calculations in
 -	m_FieldsCalculationInProgress.
 -	- do_calculations(),
 -	* glom/mode_data/box_data_details.cc:
 - 	- recalculate_fields_for_related_records():
 -	Use calculate_field() to simplify the code.
 -
 -2005-04-26  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	construct_columns(): Right-align numeric fields.
 -
 -2005-04-26  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/utility_widgets/comboentryglom.cc:
 -	* glom/utility_widgets/comboentryglom.h:
 -	* glom/utility_widgets/entryglom.cc:
 -	* glom/utility_widgets/entryglom.h:
 -	Right-align number fields.
 -	* glom/utility_widgets/layoutwidgetbase.h:
 -	Make set_layout_item() virtual so we can
 -	change parts of the derived widget according to
 -	the layout details.
 -
 -2005-04-26  Murray Cumming <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom: Make comments
 -	multiline formatted on Details views.
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	Added get/set_text_format_multiline().
 -	* glom/document/document_glom.cc:
 -	load_after(), save_before(): load/save the multiline
 -	text formatting bool.
 -	* glom/mode_data/dialog_field_layout.cc:
 -	load/save the multiline checkbox setting.
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/textviewglom.cc:
 -	* glom/utility_widgets/textviewglom.h:
 -	Added TextViewGlom which is a TextView in a
 -	ScrolledWindow. Use it for multiline text.
 -	* glom/utility_widgets/flowtable.cc:
 -	Expand the second item to take the remaining
 -	columns width, like single items already do,
 -	where specified.
 -
 -2005-04-26  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/comboentryglom.h:
 -	* glom/utility_widgets/comboglomchoicesbase.cc:
 -	* glom/utility_widgets/comboglomchoicesbase.h:
 -	* glom/utility_widgets/entryglom.cc:
 -	* glom/utility_widgets/entryglom.h:
 -	* glom/utility_widgets/layoutwidgetfield.cc:
 -	* glom/utility_widgets/layoutwidgetfield.h:
 -	Move get/set_value() and signal_edited() into
 -	a new LayoutWidgetField base class.
 -	* glom/utility_widgets/datawidget.cc: Use
 -	LayoutWidgetField instances polymorphically via
 -	the base class, simplifying the code.
 -
 -2005-04-25  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc: Use #defines
 -	for XML node and attribute names, to avoid
 -	errors when repeating them.
 -
 -0.8.24:
 -
 -2005-04-23  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/main.cc:
 -	Remove debug code that hardcoded one filepath.
 -	* glom/utility_widgets/cellrendererlist.cc:
 -	* glom/utility_widgets/comboentryglom.cc:
 -	* glom/utility_widgets/comboglom.cc:
 -	Attempt to left-align second combo column,
 -        unsuccessfully.
 -
 -0.8.23:
 -
 -2005-04-23  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/utility_widgets/comboentryglom.cc:
 -	* glom/utility_widgets/comboentryglom.h:
 -	* glom/utility_widgets/comboglomchoicesbase.cc:
 -	* glom/utility_widgets/datawidget.cc:
 -	Actually use the Combo* constructors that take
 -	a second LayoutItem_Field column.
 -
 -2005-04-23  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/dialog_layout_details.cc:
 -	on_button_add_field(): Make fields editable
 -	by default.
 -
 -2005-04-23  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/box_db_table.cc:
 -	* glom/box_db_table.h:
 -	* glom/dialog_invalid_data.cc:
 -	* glom/dialog_invalid_data.h:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h:
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_find/box_data_details_find.cc:
 -	* glom/mode_find/box_data_list_find.cc:
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	* glom/utility_widgets/comboentryglom.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/entryglom.cc:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	Rename fill_from_database_layout() to
 -	create_layout(), refresh_db_details() to
 -	refresh_data_from_database() and describe how
 -	these and the other 2 methods work together in
 -	the class documentation for Box_Data.
 -
 -2005-04-23  Murray Cumming<murrayc murrayc com>
 -
 -	* glom/box_db_table.cc:
 -	* glom/box_db_table.h:
 -	Remove fill_fields(). It has no use here.
 -	Its equivalent is the new fill_database_layout()
 - 	in Box_Data, a derived class.
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	Add virtual fill_database_layout() so the
 -	derived implementations can be called from
 -	init_db_details().
 -	* glom/mode_data/box_data_details.cc:
 -	fill_database_layout() is now called by the
 -	base class, at the appropriate time, so we
 -        do not need to call it from fill_database().
 -	refresh_db_details(): Call fill_from_database()
 -	instead of init_db_details() so we do not
 -	unnecessarily rebuild the whole layout UI.
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 -        fill_fields(): Rename to fill_database_layout(),
 -	which is now called from the base class.
 -	fill_from_database(): Do not call fill_fields/
 -	fill_database_layout() unnecessarily here.
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_data/notebook_data.h:
 -	Rename on_Details_user_requested_details() to
 -	on_list_user_requested_details() because that it is
 -	a signal on list, not details.
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	fill_from_database(): Call fill_fields() because
 -	the base class does not call it anymore.
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	add_layout_item_at_position(). When adding
 -	a Box_Data_List_Related portal, call add_view()
 -	before init_db_details() because the latter needs
 -	the document.
 -
 -2005-04-22  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list.cc:
 -	Add the DbAddDel as a view with add_view(), so
 -	it has the document.
 -	* glom/utility_widgets/cellrendererlist.cc:
 -	* glom/utility_widgets/cellrendererlist.h:
 -	Handle the editing_started signal to add the
 -	second column.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	Fill the second choices column of the
 -	CellRendererList.
 -
 -2005-04-22  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/data_structure/glomconversions.cc:
 -	Added some warnings for when relationships are
 -	unexpectedly empty.
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	get_has_choices(). Return false if the choices
 -	information is empty, so we have no empty dropdown
 -	menus.
 -	* glom/data_structure/layout/layoutitem_portal.cc:
 -	* glom/data_structure/layout/layoutitem_portal.h:
 -	Store the whole Relationship information here.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	Use a more explicit data structure for layouts,
 -	clearly marking related (portal) layouts.
 -	update_relationships(): Update related (portal)
 -	layouts too.
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	on_button_formatting(): Specify the correct
 -	table name, so we get choices from the
 -	related table, not the parent table.
 -
 -2005-04-22  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/glom.glade:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_details.h:
 -	* glom/mode_data/treestore_layout.h:
 -	Details Layout: Add a Formatting button,
 -	because I can not yet implement a context
 -	menu for a GtkComboBox, and because nothing
 -	should be available only via a context menu
 -	anyway.
 -
 -2005-04-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Makefile.am:
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/adddel/Makefile.am:
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	* glom/utility_widgets/adddel/cellrendererlist.cc:
 -	* glom/utility_widgets/adddel/cellrendererlist.h:
 -	Move cellrendererlist out of adddel into
 -	utlity_widgets, because it is also used by
 -	DbAddDel.
 -	* glom/utility_widgets/cellrendererlist.cc:
 -	* glom/utility_widgets/cellrendererlist.h:
 -	* glom/utility_widgets/comboentryglom.cc:
 -	* glom/utility_widgets/comboentryglom.h:
 -	* glom/utility_widgets/comboglomchoicesbase.cc:
 -	* glom/utility_widgets/comboglomchoicesbase.h:
 -	Add ComboGlom and ComboGlomChoicesBase which is
 -	a base class for ComboGlom and ComboEntryGlom.
 -	* glom/utility_widgets/datawidget.cc:
 -	Use ComboGlom instead of ComboEntryGlom when
 -	the choices should be restricted.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	Restrict the choices when specified, using
 -	CellRendererCombo::property_has_entry().
 -
 -2005-04-21  Murray Cumming <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	Add drop down choices for name_title.
 -	* glom/data_structure/field.h:
 -	* glom/data_structure/glomconversions.cc:
 -	get_text_for_gda_value(): Prevent use of
 -	values that do not have the expected type.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	Added get/set_attribute_value_as_value()
 -	for convenience.
 -	load_after(), save_before(): load/save the
 -	custom choices.
 -	* glom/mode_data/dialog_field_layout.cc:
 -	* glom/mode_data/dialog_field_layout.h:
 -	Really save/load the custom choices, by
 -	storing and using the correct column index.
 -
 -2005-04-21  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/data_structure/glomconversions.cc:
 -	* glom/data_structure/glomconversions.h:
 -	Add get_choice_values(), with code moved
 -	from DataWidget.
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	Use a CellRendererCombo on the List view,
 -	if the field layout has choices. However, it
 -	only shows the first column so far.
 -	* glom/base_db.cc:
 -	* glom/box_db.cc:
 -	* glom/dialog_connection.cc:
 -	* glom/dialog_connection.h:
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	* glom/frame_glom.cc:
 -	* glom/main.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/dialog_field_layout.cc:
 -	* glom/mode_data/dialog_layout.cc:
 -	* glom/mode_data/dialog_layout.h:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_list.cc:
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	* glom/mode_find/box_data_details_find.cc:
 -	* glom/navigation/box_tables.cc:
 -	Use get_document() from the View base class
 -	instead of another member variable. Use add_view()
 -	and remove_view() in some more places.
 -
 -2005-04-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	Added update_cache_relationship() and call it from
 -	set_relationship() and load_after() instead of
 -	filling-in relationship details along the way.
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	* glom/utility_widgets/comboentryglom.cc:
 -	* glom/utility_widgets/comboentryglom.h:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/datawidget.h:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	Show data from the second related field in the
 -	drop down choice.
 -
 -2005-04-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	Invoice details: Added choice of contacts dropdown.
 -	* glom/data_structure/glomconversions.cc:
 -	util_trim(): reverse iterate from rbegin to rend,
 -	not the other way around. This avoids accessing
 -	invalid memory too.
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	Add members and methods for choices drop-downs.
 -	* glom/document/document_glom.cc:
 -	Load/Save the choices details for LayoutItem_Fields.
 -	* glom/glom.glade:
 -	* glom/main.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/dialog_choose_relationship.cc:
 -	* glom/mode_data/dialog_choose_relationship.h:
 -	* glom/mode_data/dialog_field_layout.cc:
 -	* glom/mode_data/dialog_field_layout.h:
 -	* glom/mode_data/dialog_layout.h:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_list.cc:
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	* glom/utility_widgets/adddel/adddel.h:
 -	* glom/utility_widgets/adddel/adddel_withbuttons.cc:
 -	* glom/utility_widgets/adddel/adddel_withbuttons.h:
 -	* glom/utility_widgets/comboentryglom.cc:
 -	* glom/utility_widgets/comboentryglom.h:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/datawidget.h:
 -	* glom/utility_widgets/entryglom.cc:
 -	* glom/utility_widgets/entryglom.h:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/layoutwidgetbase.cc:
 -	* glom/utility_widgets/layoutwidgetbase.h:
 -	In the Layout Properties dialog, show a second tab
 -	for choices, either a custom list or a list from
 -	a related record. Only works on Details so far.
 -	* glom/frame_glom.cc:on_menu_developer_users(),
 -	* glom/mode_data/box_data_list_related.cc: destructor,
 -	* glom/mode_data/box_data.cc: destructor,
 -	Call remove_view() before deleting the dialog.
 -
 -
 -2005-04-19  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	Add m_TableFields and fill it in
 -	fill_database(), as a cache instead of
 -	repeatedly getting it from the document.
 -        get_lookup_fields(), get_calculated_fields(),
 -	* glom/mode_data/box_data_details.cc:
 -	recalculate_fields_for_related_records(),
 -        Examine all table fields, via m_TableFields,
 -        instead of just shown fields.
 -
 -2005-04-19  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/application.cc:
 -	* glom/box_db_table.cc:
 -	* glom/document/document_glom.cc:
 -	* glom/frame_glom.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_find/box_data_details_find.cc:
 -	* glom/mode_find/box_data_list_find.cc:
 -	* glom/navigation/box_tables.cc:
 -	More use of Field methods instead of getting the
 -	FieldAttributes and using its methods. This should be
 -	more efficient.
 -
 -2005-04-19  Murray Cumming,,,  <murrayc murrayc com>
 -
 -	* glom/data_structure/field.cc:
 -	* glom/data_structure/field.h:
 -	Add get_primary_key(), get_unique_key(),
 -        get_default_value(), etc, so we do not always need
 -	to copy the whole FileAttributes member just to get
 -	a little information.
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	Use the Field methods instead of getting the
 -	FieldAttributes and using its methods. This should be
 -	more efficient.
 -
 -0.8.22:
 -
 -2005-04-18  Murray Cumming <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	Remove 0 and NULL default values.
 -	* glom/document/document_glom.cc:
 -	Save default values with
 -	GlomConversions::get_text_for_gda_value(), in
 -	iso-format, instead of Gda::Value::to_string().
 -	This stops empty default values being changed
 -	to 0s and NULLs.
 -	* glom/mode_data/box_data_list.cc:
 -	Specify the list row when calling
 -        set_field_value_in_database() so that lookups/
 -	calcs actually happen.
 -
 -2005-04-18  Murray Cumming <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	product: Add vat_percent field.
 -	invoice_lines: Lookup vat_percent along with
 -	the other product information.
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h:
 -	* glom/mode_data/box_data_list.cc:
 -	Always use set_field_value_in_database()
 -	instead of custom UPDATE sql queries,
 -	and do all dependent recalcs/lookups/etc in
 -	set_field_value_in_database().
 -
 -2005-04-18  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_design/dialog_fields.cc:
 -	* glom/mode_design/dialog_relationships.cc:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/mode_find/notebook_find.cc:
 -	Added View_Composite::remove_view() calls before
 -	deleting widgets that have been add_view()ed. This
 -	fixes a crash when reopening the field definition
 -	details dialog.
 -
 -2005-04-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	Add VAT fields to invoice_lines and invoices,
 -	with calculations.
 -	* glom/data_structure/layout/layoutitem.cc:
 -	* glom/data_structure/layout/layoutitem.h:
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	Add operator==().
 -	* glom/glom.glade:
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/mode_data/dialog_layout_list_related.h:
 -	Add a Formatting button, as already in the regular
 -	List Layout dialog.
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	do_calculations(),
 -	* glom/mode_data/box_data_details.cc:
 -	recalculate_fields_for_related_records(): Recalculated
 -	fields that depend on the just-recalculated fields, with
 -	some attempt to prevent circular fields. The dependency-
 -	sequence needs to be figured out all at once, however -
 -	see the TODO>
 -	* glom/python_embed/python_module/pygdavalue_conversions.c:
 -	(pygda_value_as_pyobject): Return a PyFloat for a GdaNumeric,
 -	instead of a PyLong.
 -
 -2005-04-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h:
 -	Emit the signal_record_changed signal when
 -	deleting related records, to cause
 -	field recalculations.
 -
 -2005-04-17  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc: record_new(): Iterate
 -	from begin to end, not begin to begin, so we actually
 -	set default values and calculate initial values.
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	set_field(): Monitor changes to the dynamically-created
 -	default value widget, not just the rest, so that
 -	changes to the default value enable the Save button.
 -
 -2005-04-17  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list.cc:
 -	fill_from_database(): Call
 - 	DbAddDel::set_where_clause(), so that
 -	related records portals show only the related
 -	records instead of all records.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	Added set_where_clause(), and used it when
 -	creating the treemodel.
 -	get_is_placeholder(): Cope with invalid
 -	iterators.
 -	* po/POTFILES.in:
 -	Updated.
 -
 -2005-04-17  Murray Cumming <murrayc murrayc com>
 -
 -	* docs/website/index.html: Updated.
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h:
 -	* glom/mode_design/fields/dialog_fieldcalculation.cc:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/flowtablewithfields.h:
 -	Add FlowTable::signal_related_record_changed() and
 -	Box_Data_List_Related::signal_record_changed() to allow
 -	the Box_Data_Details to recalculate fields that use
 -	the relationship whose records have changed.
 -
 -2005-04-16  Murray Cumming <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	Add count and total_price (calculated) fields to invoice_lines.
 -	Add price_total (calculated) field to invoices.
 -	* glom/data_structure/field.cc:
 -	* glom/data_structure/field.h:
 -	Add get_calculation_relationships() to discover what relationships
 -	are used by a calculation.
 -	* glom/data_structure/glomconversions.cc:
 -	Change example value for numbers to 1 from 123, so we are more
 -	likely to find related records when testing calculations.
 -	* glom/python_embed/python_module/py_glom_record.cc:
 -	* glom/python_embed/python_module/py_glom_record.h:
 -	Remove the unused m_gda_connection member variable.
 -	* glom/python_embed/python_module/py_glom_relatedrecord.cc:
 -	Add sum(), count(), min(), and max() python methods. For instance,
 -	record["invoice_lines"].sum("total_price");
 -
 -2005-04-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	Forward get/set_name() to m_field instead of
 -	using m_name from the base class.
 -	* glom/document/document_glom.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	Remove set_name() where we also set m_field with
 -	an identical name.
 -
 -2005-04-16  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/python_embed/python_module/py_glom_relatedrecord.cc:
 -	RelatedRecord_tp_as_mapping_getitem():
 -	Actually execute the SQL so that it actually gets the data.
 -	And also handle various errors and give interesting warnings.
 -
 -2005-04-16  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_design/fields/dialog_fieldcalculation.cc:
 -	* glom/python_embed/glom_python.cc:
 -	* glom/python_embed/glom_python.h:
 -	* glom/python_embed/python_module/Makefile.am:
 -	* glom/python_embed/python_module/py_glom_module.cc:
 -	* glom/python_embed/python_module/py_glom_module.h:
 -	* glom/python_embed/python_module/py_glom_record.cc:
 -	* glom/python_embed/python_module/py_glom_record.h:
 -	* glom/python_embed/python_module/py_glom_related.cc:
 -	* glom/python_embed/python_module/py_glom_related.h:
 -	* glom/python_embed/python_module/py_glom_relatedrecord.cc:
 -	* glom/python_embed/python_module/py_glom_relatedrecord.h:
 -	Added record.related[relationship_name][field_name] syntax for
 -	calculated fields, though it is not working yet.
 -	* glom/python_embed/python_module/pygdavalue_conversions.c:
 -	* glom/utility_widgets/adddel/eggcolumnchooser/eggcolumnchooserdial
 -	og.c:
 -	* glom/utility_widgets/adddel/eggcolumnchooser/eggcolumnmodel.c:
 -	Extra C casts needed for g++ 3.4.
 -
 -2005-04-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/python_embed/glom_python.cc:
 -	* glom/python_embed/python_module/py_glom_record.cc:
 -	* glom/python_embed/python_module/py_glom_record.h:
 -	Access field values via record[] instead of
 -	record.fields[].get().
 -	* glom/data_structure/field.cc:
 -        get_calculation_fields(): Revise for the new syntax.
 -	* glom/python_embed/python_module/
 -	Added py_glom_related.[h|cc], which will, soon,
 -	provide access to related records.
 -	Added py_glom_module.[h|cc]: Added, and moved the
 -	module init stuff into here.
 -
 -0.8.21:
 -
 -2005-04-14  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: Updated copyright year.
 -	* glom/frame_glom.cc: Use US spelling of
 -	canceled. Bug #300139.
 -
 -2005-04-14  Murray Cumming <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	Invoice details: Show the related, calculated,
 -        Full Name instead of the individual name parts, now that
 -       calculated fields work.
 -	* glom/data_structure/layout/layoutgroup.h:
 -	Make the items map public so we can change it more
 -	efficiently.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	Add fill_layout_field_details() to fill layout groups
 -	with full field information.
 -	* glom/glom.glade:
 -	* glom/mode_data/dialog_layout_list.cc:
 -	* glom/mode_data/dialog_layout_list.h:
 -	Added a Formatting button to show the now-separate
 -	formatting dialog.
 -	set_document(): Get the full field information from
 -	the document.
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/entryglom.cc:
 -	* glom/utility_widgets/layoutwidgetbase.cc:
 -	Move action creation into the base class instead of
 -	duplicating it.
 -
 -2005-04-14  Murray Cumming <murrayc murrayc com>
 -
 -	* docs/website/screenshots/glom_data_details.png:
 -	* docs/website/screenshots/glom_design_layout_field_formatting.png:
 -	* docs/website/screenshots/glom_select_field.png:
 -	* docs/website/screenshots/index.html:
 -	Updated some screenshots and pictures.
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	Added get_record_field_values(), get_calculated_fields(), and
 -	do_calculations() which use them.
 -	* glom/mode_data/box_data_details.cc: on_flowtable_field_changed():
 -	* glom/mode_data/box_data_list.cc: on_adddel_user_changed():
 -	Call do_calculations() to update calculated field values.
 -
 -2005-04-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* docs/website/screenshots/glom_design_fields_dialog_calculated.png
 -	: Updated the screenshot to show these changes.
 -	* examples/example_smallbusiness.glom:
 -	Added a name_full fields to contacts, as a simple calculated-field
 -	test.
 -	* glom/data_structure/field.cc:
 -	* glom/data_structure/field.h:
 -	Added get_caculation_fields() - it parses the python code and
 -	guesses what fields are used in the calculation.
 -	* glom/data_structure/glomconversions.cc:
 -	* glom/data_structure/glomconversions.h:
 -	Added get_example_value(), so we have some field values for the
 -	calculation test dialog.
 -	* glom/glom.glade:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_design/fields/dialog_fieldcalculation.cc:
 -	* glom/mode_design/fields/dialog_fieldcalculation.h:
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	Show the (according to our parsing) used fields, and show that
 -	we import the glom module implicitly.
 -
 -2005-04-13  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/python_embed/glom_python.cc:
 -	glom_evaluate_python_function_implementation()
 -	Correctly check whether the result is a gda.Value
 -	and process it appropriately. This now works.
 -
 -2005-04-13  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/python_embed/python_module/Makefile.am:
 -	Link the module to the glom dependencies, to
 -	avoid undefined symbols when using it from python.
 -
 -2005-04-13  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/python_embed/python_module/Makefile.am:
 -	Use pyexec_* instead of pkpyexec_* so that the
 -	module is not installed in a package sub-directory,
 -	so that it can be imported.
 -
 -2005-04-13  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/Makefile.am:
 -	* glom/python_embed/python_module/Makefile.am:
 -	Create glom.la, not libglom.la. That seems to be what
 -	python modules do.
 -	* glom/python_embed/python_module/py_glom_record.cc:
 -	* glom/python_embed/python_module/py_glom_record.h:
 -	Rename the initglomRecord() method to initglom(), in
 -	case that is what python is looking for. Still does
 -	not work though.
 -
 -2005-04-13  Murray Cumming <murrayc murrayc com>
 -
 -	* configure.in:
 -	* glom/Makefile.am:
 -	* glom/python_embed/Makefile.am:
 -	* glom/python_embed/glom_python.cc:
 -	* glom/python_embed/python_module/Makefile.am:
 -	* glom/python_embed/python_module/py_glom_record.cc:
 -	* glom/python_embed/python_module/py_glom_record.h:
 -	Put the python module in a sub directory, making the
 -	build easiert. Rename the python module from pyglom
 -	to glom, and import that. But python still says that
 -	the module does not exist when we import it.
 -
 -2005-04-13  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc: record_new(),
 -	* glom/mode_design/fields/dialog_fieldcalculation.cc:
 -	on_button_test(): Pass some test fields values to
 -	glom_evaluate_python_function_implementation().
 -	* glom/python_embed/Makefile.am:
 -	Try to actually build and install the glom python
 -	module.
 -	* glom/python_embed/glom_python.cc:
 -	* glom/python_embed/glom_python.h:
 -	glom_evaluate_python_function_implementation() now
 -	receives a map of field values to be used by the
 -	python function.
 -	* glom/python_embed/py_glom_record.cc:
 -	Add the fields attribute.
 -
 -2005-04-12  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/python_embed/glom_python.cc: Get access to
 -	the python gda.Value type and use it instead of
 -	the hack.
 -
 -2005-04-12  Murray Cumming <murrayc murrayc com>
 -
 -	* configure.in: pkg-config check for pygtk-2.0,
 -	because we need the header to access the internals
 -	of the gda.Value object.
 -	* glom/python_embed/glom_python.cc:
 -	Handle the result as a gda.Value.
 -
 -2005-04-10  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 -	on_adddel_user_added(): Call
 -	on_adddel_user_changed() to do lookups.
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	DbAddDel::signal_user_added(): Pass the column
 -	index of the field that was filled-in to create
 -	the new row.
 -
 -2005-04-10  Murray Cumming <murrayc murrayc com>
 -
 -	* po/POTFILES.in: Added files that I think
 -	Christian Rose removed accidentally.
 -
 -2005-04-09  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	Add get/set_hidden(), so we can add a hidden list
 -	column for keys, without showing them in the UI.
 -	* glom/mode_data/box_data_list.cc:
 -	Do not create rows in the AddDel from the database -
 -	allow it (the model) to fill itself.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	Use the new explicit get_last_row() method of the model
 -	instead of iterating back from end().
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.h:
 -	Constructor: create rows from the database automatically,
 -	as well as allowing creating of new empty rows.
 -
 -2005-04-08  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	* glom/data_structure/relationship.cc:
 -	* glom/data_structure/relationship.h:
 -	Added Relationship::get_name_not_empty() and used it,
 -	for performance, instead of getting the whole string
 -	just to see if it is empty.
 -	* glom/glom.glade:
 -	* glom/mode_data/Makefile.am:
 -	* glom/mode_data/dialog_choose_field.cc:
 -	* glom/mode_data/dialog_choose_field.h:
 -	* glom/mode_data/dialog_field_layout.cc:
 -	* glom/mode_data/dialog_field_layout.h:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_details.h:
 -	Moved formatting options to their own dialog.
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/datawidget.h:
 -	* glom/utility_widgets/entryglom.cc:
 -	* glom/utility_widgets/entryglom.h:
 -	* glom/utility_widgets/layoutwidgetbase.h:
 -	Added a context menu item for the new layout
 -	properties dialog.
 -
 -0.8.20:
 -
 -2005-04-07  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/python_embed/: Remove the (huge) boost
 -	directory. boost::python is not worth the trouble for now,
 -	so I will use the C API instead.
 -
 -2005-04-07  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	Add set_columns_ready(). Only when this is called will
 -	the columns actually be constructed. This prevents
 -	multiple unnecessary data retrievals.
 -	* glom/mode_data/box_data_list.cc: fill_column_titles():
 -	Call DbAddDel::set_columns_ready().
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.h:
 -	create(): Add a where_clause parameter. Add a datamodel
 -	member variable and fill it from a SQL SELECT statement.
 -	The result is not actually used yet, but could be used to
 -	get rows only on demand when iterating.
 -
 -2005-04-07  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/python_embed/Makefile.am:
 -	Do not try to build the boost sub-directory. We do not
 -	use it anymore.
 -
 -2005-04-07  Murray Cumming <murrayc murrayc com>
 -
 -	* Makefile.am:
 -	* configure.in:
 -	Depend explicitly on libxslt. Stop using boost::python.
 -	* glom/python_embed/py_glom_record.cc:
 -	* glom/python_embed/py_glom_record.h:
 -	Stop using boost::python, because it is too difficult to build ,
 -	inside glom, and is huge, and is not really necessary here.
 -	Add some more code for the PyGlomRecord object.
 -	* glom/python_embed/glom_python.cc:
 -	Pass a PyGlomRecord object to the python method.
 -	* glom/application.cc:
 -	App_Glom::init(): Add a print menu item. It is just a
 -	proof of concept at the moment.
 -	* glom/mode_data/box_data_details.cc:
 -	Added print_layout_group(), which creates an XML format
 -	for the data, and then converts it to HTML using an XSLT
 -	stylesheet, using libxslt.
 -	* xslt/ Added this directory, with .xslt which is
 -	installed for use by the application.
 -	* glom/base_db.cc:
 -	* glom/data_structure/glomconversions.cc:
 -	* glom/data_structure/glomconversions.h:
 -	Add util_build_sql_select_with_where_clause(), moved from
 -	Box_Data(), so that the Db_AddDel can use it in future, to
 -	do on-demand data retrieval.
 -	* glom/data_structure/iso_codes.cc:
 -	Catch the exception if the iso_codes XML file can not be
 -	found, and then just return an empty list. This prevents
 -	a crash when iso_codes is not properly installed. For instance,
 -	Ubuntu Hoary currently installs an (obviously) incorrect .pc file.
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	Cache the whole Relationship details here, instead of just storing
 -	the relationship_name. This means that code that uses this does not
 -	need to access the document to lookup the full details.
 -	* glom/dialog_connection.cc:
 -	* glom/document/document_glom.cc:
 -	* glom/frame_glom.cc:
 -	* glom/frame_glom.h:
 -	* glom/glom.glade:
 -	Made ScrolledWindows use automatic mode for scrollbars,
 -	so they are only shown when necessary. Remove the unused
 -	information dialog.
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtable.h:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	Make methods const.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.h:
 -	Store LayoutItem_Fields for each column, not just Fields.
 -	* glom/main.cc:
 -	* glom/mode_data/Makefile.am:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.h:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/dialog_choose_field.cc:
 -	* glom/mode_data/dialog_choose_relationship.cc:
 -	* glom/mode_data/dialog_layout.cc:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_list.cc:
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/mode_data/notebook_data.cc:
 -	* glom/mode_data/notebook_data.h:
 -	* glom/mode_data/treestore_layout.h:
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	* glom/mode_design/dialog_design.cc:
 -	* glom/mode_design/dialog_fields.cc:
 -	* glom/mode_design/dialog_relationships.cc:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/fields/combo_fieldtype.cc:
 -	* glom/mode_design/fields/dialog_fieldcalculation.cc:
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/mode_design/users/dialog_user.cc:
 -	* glom/mode_design/users/dialog_users_list.cc:
 -	* glom/mode_find/box_data_details_find.cc:
 -	* glom/mode_find/box_data_list_find.cc:
 -	* glom/mode_find/notebook_find.cc:
 -	* glom/navigation/box_tables.cc:
 -	* glom/notebook_glom.cc:
 -	* glom/notebook_glom.h:
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/entryglom.cc:
 -	* glom/data_structure/field.cc:
 -	Include glibmm/i18n.h instead of libintl.h in .cc files,
 -	so we can use _() instead of gettext().
 -
 -2005-04-01  Steve Murphy  <murf e-tools com>
 -
 -        * configure.in: Added "rw" to ALL_LINGUAS.
 -
 -0.8.19:
 -
 -2005-03-31  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/python/embed/boost/mpl/: Added extra directories
 -	from boost, to fix the build.
 -
 -2005-03-31  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtable.h:
 -	The optional add() expand parameter now works for first
 -	items, so related records portals now take up the full
 -	column width.
 -
 -2005-03-31  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/data_structure/iso_codes.cc:
 -	Use the correct name with dgettext(), using a _
 -	instead of a -. Currency names are therefore now
 -	translated.
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtable.h:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	Add optional expand parameter to FlowTable::add() and
 -	use it for portals and groups in FlowTableWithFields.
 -	Does not quite work yet though.
 -
 -2005-03-30  Murray Cumming <murrayc murrayc com>
 -
 -	* configure.in:
 -	Depend on latest bakery, so we can use util_bold_message().
 -	* glom/application.cc:
 -	* glom/base_db.cc:
 -	* glom/frame_glom.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_list.cc:
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/mode_design/dialog_fields.cc:
 -	* glom/mode_design/dialog_relationships.cc:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/mode_design/users/dialog_users_list.cc:
 -	* glom/navigation/box_tables.cc:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	Use util_bold_message() to avoid marking pango markup for
 -	translation.
 -
 -2005-03-30  Christian Rose  <menthos menthos com>
 -
 -	* glom/glom.glade: Removed unnecessary trailing spaces from
 -	translateable messages (bug #172109).
 -
 -2005-03-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/python_embed/py_glom_record.h:
 -	Comment-out the boost python stuff until I can get it to build.
 -
 -2005-03-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/python_embed/: Added boost/, containing lots of the
 -	boost files, needed by the boot::python library. We must
 -	copy the files instead of depending on a shared library,
 -	because the API is unstable.
 -
 -2005-03-30  Murray Cumming <murrayc murrayc com>
 -
 -	* configure.in:
 -	* glom/Makefile.am:
 -	* glom/box_db_table.cc:
 -	* glom/glom_python.cc:
 -	* glom/glom_python.h:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_design/fields/dialog_fieldcalculation.cc:
 -	* glom/python_embed/Makefile.am:
 -	* glom/python_embed/glom_python.cc:
 -	* glom/python_embed/glom_python.h:
 -	Move glom_python.* to the python_emded subdirectory,
 -	where I plan to put more stuff.
 -
 -2005-03-30  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/data_structure/glomconversions.cc:
 -	* glom/data_structure/glomconversions.h:
 -	Added util_trim_string().
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	on_treeview_cell_edited(): Use the numeric_format
 -	when parsing.
 -	* glom/utility_widgets/entryglom.cc:
 -	get_value(), check_for_change(): Use the
 -	numeric_format when parsing the value, so that currency
 -	symbols can be ignored.
 -
 -2005-03-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* config.h.in:
 -	* configure.in:
 -	Depend on iso-codes and define the prefix for its files in
 -	config.h.
 -	* glom/Makefile.am:
 -	* glom/data_structure/Makefile.am:
 -	* glom/data_structure/glomconversions.cc:
 -	* glom/data_structure/glomconversions.h:
 -	* glom/data_structure/iso_codes.cc:
 -	* glom/data_structure/iso_codes.h:
 -	Added a Currency class, and get_list_of_currency_symbols().
 -	* glom/mode_data/dialog_choose_field.cc:
 -	* glom/mode_data/dialog_choose_field.h:
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/comboentry_currency.cc:
 -	* glom/utility_widgets/comboentry_currency.h:
 -	Use a ComboBoxEntry for the currencies on the
 -	Field Layout dialog.
 -	* glom/utility_widgets/entry_numerical.cc:
 -	* glom/utility_widgets/entry_numerical.h:
 -	Removed this, because it's not used.
 -
 -2005-03-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	* glom/data_structure/numeric_format.cc:
 -	* glom/data_structure/numeric_format.h:
 -	Add a currency_symbol member.
 -	* glom/document/document_glom.cc:
 -	Load/Save the currency symbol part of the
 -	numeric format.
 -	* glom/glom.glade:
 -	* glom/mode_data/dialog_choose_field.cc:
 -	* glom/mode_data/dialog_choose_field.h:
 -	Add a currency_symbol ComboBoxEntry. It
 -	is not used yet.
 -
 -2005-03-29  Murray Cumming <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	* glom/glom.glade:
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/mode_data/dialog_layout_list_related.h:
 -	Allow layout field editing (editable, numeric formatting,
 -	etc) of related records lists, like we already have for
 -	normal lists.
 -
 -2005-03-29  Murray Cumming <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	* glom/base_db.cc:
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/mode_data/dialog_layout_list_related.h:
 -	When creating default related records layouts, get
 -	the list of fields from the related table, not the
 -	parent table. Store the related records layout in
 -	the parent table's table part of the document,
 -	instead of pretending that it is a special table.
 -
 -2005-03-29  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc: get_table_fields_to_show():
 -	When creating default layouts, do not use the 1000s
 -	separator with primary key IDs.
 -
 -2005-03-29  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/data_structure/Makefile.am:
 -	* glom/data_structure/numeric_format.cc:
 -	* glom/data_structure/numeric_format.h:
 -	New class to represent the numeric format.
 -	* glom/data_structure/glomconversions.cc:
 -	* glom/data_structure/glomconversions.h:
 -	Do special std:: stream stuff to format numbers
 -	as needed by the NumericFormat.
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	Add a NumericFormat member.
 -	* glom/document/document_glom.cc:
 -	Load/Save the numeric format information with the
 -	LayoutItem.
 -	* glom/glom.glade:
 -	Add UI for the Numeric Format.
 -	* glom/mode_data/dialog_choose_field.cc:
 -	* glom/mode_data/dialog_choose_field.h:
 -	Use the Numeric Format UI. It is only shown for
 -	numeric fields.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	Use the Numeric format for the list.
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/entryglom.cc:
 -	Use the numeric format for details views.
 -
 -2005-03-24  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/glom.glade:
 -	* glom/mode_design/users/dialog_users_list.cc:
 -	* glom/mode_design/users/dialog_users_list.h:
 -	The beginnings of UI for numeric formatting,
 -	hidden for now.
 -	* glom/utility_widgets/Makefile.am:
 -	* glom/utility_widgets/combo_textglade.cc:
 -	* glom/utility_widgets/combo_textglade.h:
 -	Moved these here from glom/mode_design/fields/.
 -
 -2005-03-24  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_design/users/dialog_users_list.cc:
 -	on_button_user_add(): Revoke all user
 -	privileges when adding a user to a group, so
 -	that all the user privileges come from the group.
 -
 -0.8.18:
 -
 -2005-03-23  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/Makefile.am: Install the glom file.
 -	In 0.8.16 I mistakenly made it not install,
 -	when preventing the installation of a test.
 -
 -0.8.17:
 -
 -2005-03-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	Change the database name, adding v2 at the
 -	end, to force the database to be recreated
 -	when previous glom users open the example
 -	again.
 -
 -2005-03-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 -	fill_from_database(): Disable the Add and Delete
 -	buttons if the current user does not have those
 -	priviliges.
 -
 -2005-03-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	Store priv_view when we store priv_edit.
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	Do not get records if the table may not be viewed
 -	by the current user.
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/datawidget.h:
 -	Make field contents non-visible if necessary,
 -	though we do not even fill them with data in
 -	that case anyway.
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	When setting view to false, set everything else
 -	to false too, because anything else would be
 -	stupid.
 -
 -2005-03-22  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/frame_glom.cc:
 -	on_menu_userlevel_Developer(): Prevent
 -	developer mode if the user is not in the
 -	developer group.
 -
 -2005-03-22  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_design/users/dialog_user.cc:
 -	* glom/mode_design/users/dialog_user.h:
 -	* glom/mode_design/users/dialog_users_list.cc:
 -	When editing a user, show the group (though
 -	we can not edit it here yet), and update the
 -	password in the connection if it is the
 -	current user.
 -
 -2005-03-22  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/mode_design/users/dialog_groups_list.h:
 -	Add a description of the special developers group.
 -	* glom/mode_design/users/dialog_users_list.cc:
 -	* glom/mode_design/users/dialog_users_list.h:
 -	Prevent removal of the last developer.
 -
 -2005-03-22  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/data_structure/layout/layoutitem.h:
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	Store the privileges in the LayoutItem_Field,
 -	filling them in when we get the field information
 -	from the database. Make widgets for non-editable
 -	fields to non-editable.
 -	* glom/frame_glom.cc:
 -	Update the layout when the Users window closes,
 -	to show changes.
 -
 -2005-03-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	Added the table_privs.
 -	* glom/document/document_glom.cc:
 -	Do not use an invalid map iterator, to
 -	prevent a crash.
 -
 -2005-03-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: recreate_database():
 -	Add the developer group and make the user a
 -	member of it.
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	Added get_current_privs().
 -	* glom/data_structure/Makefile.am:
 -	* glom/data_structure/groupinfo.cc:
 -	* glom/data_structure/groupinfo.h:
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	Moved GroupInfo class out of Document_Glom.
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	Set the groups in the document when we get
 -	them from the database. But just in case
 -	we need to recreate the database from the
 -	document.
 -
 -2005-03-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	* glom/glom_document.dtd:
 -	Add API to get/set the groups, and load/save
 -	them in the XML. Not used yet.
 -
 -2005-03-21  Murray Cumming <murrayc murrayc com>
 -
 -	* docs/website/screenshots/glom_design_groups.png:
 -	* docs/website/screenshots/index.html:
 -	Add a section to show the Groups window.
 -	* glom/glom.glade:
 -	Use SCROLLBARS_AUTOMATIC on some ScrolledWindows.
 -
 -2005-03-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	Remove nonsense table information.
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	Add add_standard_groups() - it ensures that
 -	there is always a developer group.
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	load_from_document(): Call add_standard_groups() to ensure
 -	that the developer group always exists.
 -	on_button_group_new(): Provide sensible default privilieges
 -	for new groups.
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	Add remove_table() and remove_relationship().
 -	* glom/navigation/box_tables.cc: on_adddel_Delete():
 -	Remove tables from the document as well as the database
 -	server.
 -
 -2005-03-21  Murray Cumming <murrayc murrayc com>
 -
 -	* configure.in:
 -	* glom/Makefile.am:
 -	* glom/application.cc:
 -	* glom/base_db.cc:
 -	* glom/base_db.h:
 -	* glom/box_db.h:
 -	* glom/data_structure/Makefile.am:
 -	* glom/data_structure/tableinfo.h:
 -	* glom/document/document_glom.cc:
 -	* glom/document/document_glom.h:
 -	* glom/frame_glom.cc:
 -	* glom/glom.glade:
 -	* glom/mode_design/Makefile.am:
 -	* glom/mode_design/dialog_user.cc:
 -	* glom/mode_design/dialog_user.h:
 -	* glom/mode_design/dialog_users_list.cc:
 -	* glom/mode_design/dialog_users_list.h:
 -	* glom/mode_design/fields/combo_textglade.cc:
 -	* glom/mode_design/fields/combo_textglade.h:
 -	* glom/mode_design/users/Makefile.am:
 -	* glom/mode_design/users/dialog_choose_user.cc:
 -	* glom/mode_design/users/dialog_choose_user.h:
 -	* glom/mode_design/users/dialog_groups_list.cc:
 -	* glom/mode_design/users/dialog_groups_list.h:
 -	* glom/mode_design/users/dialog_new_group.cc:
 -	* glom/mode_design/users/dialog_new_group.h:
 -	* glom/mode_design/users/dialog_user.cc:
 -	* glom/mode_design/users/dialog_user.h:
 -	* glom/mode_design/users/dialog_users_list.cc:
 -	* glom/mode_design/users/dialog_users_list.h:
 -	* glom/navigation/box_tables.cc:
 -	* glom/utility_widgets/adddel/adddel.cc:
 -	User management is now group-based, with
 -	users in groups, and permissions for each group.
 -
 -2005-03-19  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/Makefile.am:
 -	* glom/frame_glom.cc:
 -	* glom/glom.glade:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_design/Makefile.am:
 -	* glom/mode_design/dialog_user.cc:
 -	* glom/mode_design/dialog_user.h:
 -	* glom/mode_design/dialog_users_list.cc:
 -	* glom/mode_design/dialog_users_list.h:
 -	Added very simple user administration, available
 -	from the Developer menu.
 -
 -2005-03-18  Murray Cumming <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	* glom/Makefile.am:
 -	* glom/data_structure/layout/layoutitem_portal.h:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/treestore_layout.h:
 -	* glom/mode_design/dialog_relationships.cc:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/datawidget.h:
 -	* glom/utility_widgets/entryglom.cc:
 -	* glom/utility_widgets/entryglom.h:
 -	* glom/utility_widgets/flowtable.cc:
 -	* glom/utility_widgets/flowtable.h:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/flowtablewithfields.h:
 -	* glom/utility_widgets/layoutwidgetbase.cc:
 -	* glom/utility_widgets/layoutwidgetbase.h:
 -	Details view: You can now right-click on a Field
 -	Entry, to add a field, group, or related records
 -	portal after the clicked field.
 -
 -0.8.16:
 -
 -2005-03-15 Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h:
 -	* glom/mode_data/box_data_list.cc:
 -	Moved the related record creation/warning
 -	code from
 -	Box_Data_Details::on_flowtable_field_edited()
 -	into the base Box_Data class, as
 -	Box_Data::add_related_record_for_field(), and
 -	used it from
 -	Box_Data_List::on_adddell_user_changed().
 -	This means that automatic creation of related
 -	records works from the List view too.
 -
 -2005-03-15  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc:
 -	confirm_discard_unstored_data(): The buttons
 -	argument of MessageDialog is not a flag - really
 -	show both buttons.
 -	* glom/mode_data/box_data_details.cc:
 -	fill_from_database(): Call set_unstored_data(false)
 -	at the end. If there really is some unstored data
 -	then it is too late at this point.
 -
 -2005-03-15  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list.cc:
 -	on_adddel_user_requested_add(): When the primary
 -	key value does not exist yet, call
 -	on_adddel_user_added() regardless of whether the
 -	field is autoincremented. This makes record
 -	adding work again if the primary key is not
 -	auto-increment.
 -
 -2005-03-15  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/data_structure/glomconversions.cc:
 -	* glom/data_structure/glomconversions.h:
 -	* glom/mode_data/box_data.cc:
 -	generate_next_auto_increment(): unbreak
 -	this, so that adding records works again
 -	if the primary key is auto incremented.
 -
 -2005-03-14  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.cc:
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.h:
 -        Glom_Db_TreeModel::on_treeview_cell_edited():
 -	Do not set a bogus key value when a column is the
 -	first to get a value, and do not mark it as no
 -	longer a placeholder. This prevents a crash
 -	when adding two field values without yet entereing
 -	a primary value. But the primary key value is still
 -	not used when it is entered.
 -
 -2005-03-14  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/box_db_table.h:
 -	* glom/data_structure/field.h:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -        Box_Data_Details::on_flowtable_field_edited():
 -        When it's a related field that was edited,
 -	create a related record, where allowed by the
 -	relationship, and where possible, with warnings
 -	where not. This is quite a lot of code - it
 -	should be abstracted so it can be used for the
 -	list too.
 -
 -2005-03-14  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	* glom/glom_document.dtd:
 -	* glom/document/document_glom.cc:
 -	* glom/data_structure/relationship.cc:
 -	* glom/data_structure/relationship.h:
 -	Add get/set_auto_create() to specify whether
 -	details and lists view should automatically
 -	create related fields when the user enters
 -	data into a record that does not yet exist.
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	* glom/mode_design/box_db_table_relationships.h:
 -	on_adddel_user_activated(): Do not clear the
 -	to_field when the user clicks on it.
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	If allow_add is false, deactivate the Add
 -	context menu item, and do not add new-record
 -	placeholder rows.
 -	* glom/mode_data/box_data_list_related.cc:
 -        Set DbAddDel::set_allow_add() according to the
 -	relationship.
 -
 -0.8.15:
 -
 -2005-03-14  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h:
 -	* glom/mode_data/box_data_list.cc:
 -	Box_Data_List::refresh_related_fields(): Now
 -	related fields are updated in the details view
 -	when the key value changes in the record.
 -	Dialog_Layout_List: The edit button now edits the
 -	properties of the current layout field.
 -
 -2005-03-14  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list.cc:
 -        refresh_related_fields(): The list view now updates
 -	the displayed value of related fields when you
 -	change the related key value in the current record.
 -
 -2005-03-14  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	Db_AddDel::get_column_index() now returns a
 -	list of indexes, so that set_value() updates
 -	the value in all columns when a field is present
 -	more than once.
 -
 -2005-03-14  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	Db_AddDel::set_value(), and get_value() now
 -	identify the column by a LayoutItem_Field
 -	instead of a numerical index, so at least
 -	the inefficient index discovery is restricted
 -	to one method in Db_AddDel.
 -
 -2005-03-14  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 - 	on_adddel_user_changed(): Editing of related fields
 -	in the list view now works, using mostly copy/pasted
 -	code from Box_Data_List::on_flowtable_field_edited().
 -
 -2005-03-14  Murray Cumming, <murrayc murrayc com>
 -
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/dialog_choose_field.cc:
 -	* glom/mode_data/dialog_layout_list.cc:
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	LayoutItem_Field: Add get_has_relationship_name()
 -	and use it instead of !get_has_relationship().empty()
 -	to reduce unnecessary string copying.
 -
 -2005-03-14  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	Editing of related fields on the details view
 -	now works.
 -
 -2005-03-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/box_db_table.cc:
 -	* glom/box_db_table.h:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_details.h:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 -	* glom/mode_design/box_db_table_relationships.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.cc:
 -	* glom/utility_widgets/db_adddel/db_adddel.h:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/flowtablewithfields.h:
 -	FlowTableWithFields and Db_AddDel: Now identify
 -	fields via LayoutItem_Field rather than just Field,
 -	so related fields do not get confused with regular
 -	fields. This should allow me to make editing of
 -	related fields work soon.
 -
 -2005-03-13  Murray Cumming <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	* glom/mode_data/box_data.cc:
 -	build_sql_select_with_where_clause():
 -	Use a LEFT OUTER JOIN for the related fields,
 -	because this does not hide records from
 -	the parent table when the key values are bogus,
 -	and does not give us duplicate records.
 -
 -2005-03-13  Murray Cumming <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	* glom/data_structure/layout/layoutitem.h:
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	* glom/document/document_glom.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/dialog_choose_field.cc:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_list.cc:
 -	* glom/mode_data/dialog_layout_list.h:
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/mode_data/dialog_layout_list_related.h:
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/datawidget.h:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -	* glom/utility_widgets/flowtablewithfields.h:
 -	* glom/utility_widgets/layoutwidgetbase.cc:
 -	* glom/utility_widgets/layoutwidgetbase.h:
 -	Stop storing the table name in the layoutitem,
 -	and saving it in the document.
 -	It was a nasty hack, and it's better to cache it
 -	in the LayoutWidgetBase. It's only needed anyway
 -	for right-click layout editing.
 -	Moved SQL-building code into a reusable method
 -	in Box_Data and used it from both Box_Data_List and
 -	Box_Data_Details. This means that the List view can
 -	now also show related fields. Editing of related
 -	fields does not work yet, and the SELECT statement
 -	is not quite right - it sometimes gets duplicate
 -	records.
 -
 -2005-03-13  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_list_related.cc:
 -        get_fields_to_show(): Reduce code duplication
 -	by calling the code in Box_Data.
 -
 -2005-03-12  Murray Cumming <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	* glom/box_db_table.cc:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/dialog_choose_field.cc:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/datawidget.h:
 -	* glom/utility_widgets/flowtablewithfields.cc:
 -        The Field Chooser dialog now offers fields from
 -	relationships, and the field data will be properly
 -	displayed on the details view. Editing of related
 -	fields does not work yet, and the list view can not
 -	do this yet.
 -
 -2005-03-12  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/box_db.cc:
 -	* glom/box_db_table.cc:
 -	* glom/box_db_table.h:
 -	* glom/mode_data/box_data.cc:
 -	* glom/mode_data/box_data.h:
 -	* glom/mode_data/box_data_details.cc:
 -	* glom/mode_data/box_data_list.cc:
 -	* glom/mode_data/box_data_list.h:
 -	* glom/mode_data/box_data_list_related.cc:
 -	* glom/mode_data/box_data_list_related.h:
 -	* glom/mode_data/dialog_layout.cc:
 -	* glom/mode_data/dialog_layout.h:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_details.h:
 -	* glom/mode_data/dialog_layout_list.cc:
 -	* glom/mode_data/dialog_layout_list.h:
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	* glom/mode_design/fields/box_db_table_definition.h:
 -	* glom/mode_find/box_data_details_find.cc:
 -	* glom/mode_find/box_data_list_find.cc:
 -        Store vector of layouts instead of vector of fields
 -        for list and details views. Field Chooser dialog
 -        also uses layout items so it can edit the full
 -        field information, including the relationship,
 -        and the formatting in future.
 -
 -2005-03-12  Murray Cumming <murrayc murrayc com>
 -
 -	* glom/mode_data/dialog_choose_field.cc:
 -	* glom/mode_data/dialog_choose_field.h:
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	Changing the selected relationship when
 -	choosing a field now changes the list of
 -	available fields.
 -
 -2005-03-12  Murray Cumming <murrayc murrayc com>
 -
 -	* examples/example_smallbusiness.glom:
 -	* glom/data_structure/layout/layoutgroup.h:
 -	* glom/data_structure/layout/layoutitem_field.cc:
 -	* glom/data_structure/layout/layoutitem_field.h:
 -	* glom/document/document_glom.cc:
 -	* glom/glom.glade:
 -	* glom/glom_document.dtd:
 -	* glom/mode_data/dialog_choose_field.cc:
 -	* glom/mode_data/dialog_choose_field.h:
 -	* glom/mode_data/dialog_layout.h:
 -	* glom/mode_data/dialog_layout_details.cc:
 -	* glom/mode_data/dialog_layout_details.h:
 -	* glom/mode_data/dialog_layout_list.cc:
 -	* glom/mode_data/dialog_layout_list.h:
 -	* glom/mode_data/dialog_layout_list_related.cc:
 -	* glom/mode_data/dialog_layout_list_related.h:
 -	* glom/mode_data/treestore_layout.h:
 -	* glom/mode_design/fields/combo_textglade.cc:
 -	* glom/mode_design/fields/combo_textglade.h:
 -	* glom/utility_widgets/datawidget.cc:
 -	* glom/utility_widgets/datawidget.h:
 -        LayoutItem_Fields now contain an optional relationship_name.
 -        When choosing fields, you can choose the relationship.
 -
 -2005-03-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* Lots of use of Gtk::MessageDialog::set_secondary_text() to make
 -	dialogs more HIGy, plus use of set_transient_for().
 -
 -2005-03-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/main.cc: Attempt to use Glib::Option from glibmm 2.6, to
 -	provide a --file option, for debugging. But it does not work,
 -	probably because of conflicts with the libgnomeui and libgda uses of
 -	argc and argv.
 -
 -2005-03-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom now depends on gtkmm 2.6.
 -	* glom/utility_widgets/adddel/cellrendererlist.[h|cc]: Derive from
 -	the Gtk::CellRendererCombo in gtkmm 2.6, instead of implementing
 -	all this ourselves.
 -
 -0.8.14:
 -
 -2005-03-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list.cc: get_primary_key(): Return true
 -	for success, so that Box_Data::record_delete() works again, so that
 -	deleting records really deletes them from the database again.
 -
 -2005-03-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* docs/website/: Redid the screenshots and put them on a page.
 -
 -2005-03-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.cc: record_new(): Avoid specifying the same
 -	field data twice to the database.
 -
 -0.8.13:
 -
 -2005-03-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_small_business.glom: Invoices Lines: Lookup up the
 -	product name and price from the products table.
 -
 -2005-03-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtable_withfields.[h|cc]: Use a list of
 -	field info instead of a map, and search through it all instead of
 -	using the map key, so we can have the same field more than once in
 -	a group. Otherwise, people change a field and see it disappear if it
 -	is already there.
 -
 -2005-03-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc: on_flowtable_layout_changed():
 -	Update the data as well as the structure, because updating the
 -	structure clears the widgets.
 -
 -2005-03-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/entry_glom.[h|cc]: Show a Choose Field context menu
 -	when in developer mode, and signal to the DataWidget when it has been
 -	selected.
 -	* glom/mode_data/dialog_choose_field.[h|cc]: set_document(): Select
 -	the current field at the start. Make double-click choose a field.
 -
 -2005-03-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/datawidget.[h|cc]: Attempt to add a context menu
 -	to choose the field. Not working yet. Some EventBox problem maybe.
 -
 -2005-03-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* examples/example_small_business.glom: Invoices table: Make the
 -	contact name lookup a name from the contacts table.
 -
 -2005-03-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/: More use of the stored primary key fields
 -	instead of getting them from the list of fields via their index. This
 -	means that the primary key can still be used when it is not shown.
 -	* glom/mode_data/box_data_list_related.cc: Set the foreign key value
 -	even if it is not shown. This means that related records portals
 -	no longer need to show the primary key or the foreign key, both of
 -	which are uninteresting to most operators.
 -
 -2005-03-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.[h|cc]: Remove as_value
 -	from method names because they are all by value. Added
 -	get/set_key_field() so it is easy to know the primary key for the
 -	table.
 -	* glom/utility_widgets/db_adddel/glom_db_treemodel.[h|cc]: create()
 -	now takes a list of fields - one for each column. This should allow
 -	us to construct a SQL query from the model itself in future.
 -	* glom/mode_data/box_data_list.[h|cc]: Store the primary key field
 -	in the AddDel.
 -	* glom/mode_data/box_data_details.[h|cc]: Store the primary key field
 -	in a member variable, instead of iterating for it every time.
 -
 -2005-03-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtable_withfields.cc: get_portals():
 -	Actually add relevant portals to the list.
 -	* glom/mode_data/box_data_list_related.cc: on_record_added(): When
 -	the to_field key is not auto-generated, really set it to the
 -	foreign key value, not to null. This makes adding of related records
 -	work, but so far only when all key fields are shown in the layout.
 -
 -2005-03-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/adddel/adddel.cc, db_adddel/db_adddel.cc:
 -	on_treeview_button_press_event(): Test the bool return from
 -	TreeView::get_path_at_pos to avoid using an invalid path. This
 -	stops the warning when right clicking where there is no row.
 -
 -2005-03-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/box_db_table_relationship.[h|cc]: Show/edit the
 -	relationship titles here too.
 -	* glom/mode_data/box_data_list_related.cc: on_dialog_layout_hide():
 -	Update the relationship title in case it has changed.
 -
 -2005-03-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Document/document_glom.[h.cc]: Load/save relationship titles.
 -	* glom/data_structure/Relationship.[h|cc]: Added get/set_title() and
 -	get_title_or_name().
 -	* glom/mode_data/dialog_layout_list_related.[h|cc]: Actually choose
 -	fields from the related table.
 -
 -
 -2005-03-06  Murray Cumming  <murrayc localhost localdomain>
 -
 -	* glom/mode_data/box_data_list_related.cc: Constructor: Set a new
 -	layout name, so that the portals layouts are not confused with the
 -	standard layouts for those tables in the document. Use the new
 -	layout dialog.
 -	* glom/mode_data/: Add dialog_layout_list_related.[h|cc].
 -	* glom/glom.glade: Define the new dialog.
 -
 -2005-03-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_db_list.cc: on_adddel_user_requested_delete():
 -	Ask the user whether he really wants to delete the record.
 -	* glom/utilities/db_adddel.[h|cc]: Add a layout item to the right
 -	click menu, so that people can right click to edit list layouts and
 -	related records layouts. Still need to give related records layouts
 -	an id other than their underlying table.
 -
 -2005-03-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: on_document_load(): Warn if the user recreates
 -	a database using a read-only installed example file.
 -	* glom/frame_glom.cc: on_menu_userlevel_Developer(): If developer
 -	mode is not possible then warn the user and set it back to operator
 -	mode.
 -
 -0.8.12:
 -
 -2005-02-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/connection_pool.cc: connect(): Do not forget the DATABASE=
 -	part of the connection string when connecting to the default templat1
 -	database. Otherewise it gets added to the password. Stupid me.
 -	* glom/application.cc: recreate_database() Added a user_cancelled
 -	output parameter, so we only show the error dialog when it's a real
 -	error.
 -	* glom/glom_frame.cc: create_database(): Added more error checking
 -	and debug output to investigate problems.
 -
 -2005-02-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_addel/glom_db_treemodel.[h|cc]: Make this
 -	actually work, by calling row_inserted(), row_deleted(), and
 -	row_changed() in the appropriate places. This needs some speed
 -	optimisation and probably has some memory leaks of the GlueItems.
 -
 -2005-02-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/db_adddel.[h|cc]: Use the
 -	Gda::Value-based treemodel. It almost works.
 -
 -2005-02-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_addel/: Added a Gda::Value-based custom
 -	treemodel, but it's not used yet.
 -
 -2005-02-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/db_adddel/: Removed sources that are duplicated
 -	in adddel, and just include them from there. We can not using the
 -	custom popup cellrenderer anyway when we start using gtkmm 2.6.
 -
 -2005-02-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/adddel/: No longer uses Fields and Gda::Values
 -	at all.
 -	* glom/utility_widgets/db_addel/: A version of AddDel that deals with
 -	Fields and their Gda::Values, and nothing else.
 -	* glom/mode_data/box_data_list.[h|cc]: Use DbAddDel instead of AddDel,
 -	which deals with Values directly.
 -	* glom/data_structure/glomconversions.cc: parse_data() Prevent
 -	0 days and months, to avoid postgres errors.
 -
 -0.8.11:
 -
 -2005-02-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list.cc, box_data_details.cc:
 -	init_db_details(): Get shared connection earlier and keep it longer,
 -	so that we make fewer individual connections when getting data from
 -	the database. This make things faster.
 -
 -2005-02-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/addedel/adddel.cc: get_column_field(): Return
 -	the id, which is the field name, not the name, which is the field
 -	title. This allows data entry in the list view when field titles
 -	are not equal to the names.
 -
 -2005-02-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/connectionpool.cc: Actually use the host details, so people
 -	can connect to postgres servers that are not on the local host.
 -
 -2005-02-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/connection_pool.cc: connect(): Specify the template1 default
 -	database when we do not want to specify a database, because that seems
 -	to fail with newer versions of postgres, or on some systems, though
 -	I am not sure where it works and where it does not. Hopefully this
 -	template1 name is used on all distros.
 -
 -2005-01-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* Makefile.am: Add intltool-extract.in, intltool-merge.in,
 -	intltool-update.in to EXTRA_DIST, possibly fixing the build on some
 -	platforms. Bug #162932.
 -
 -2004-12-26  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list_related.cc: constructor: Show the
 -	AddDel widget so that it actually appears on the Details layout.
 -	Put the AddDel in a HIG-style frame.
 -
 -2004-12-25  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtable.[h|cc]: Added a remove() override, so
 -	we remove the widget from the list in flowtable as well as from the
 -	base GtkContainer list. Do an extra reference() before calling
 -	gtk_widget_parent() if the widget is managed, like
 -	Gtk::Container::remove() does, so that this container acts like other
 -	gtkmm containers.
 -
 -2004-12-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtable_withfields.[h|cc]: Keep a list of
 -	the portals, so we don't have to dynamic_cast the standard children()
 -	list so much. Use Bakery::View::remove_view() and delete in
 -	remove_all().
 -
 -2004-12-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_connection.cc: #included libintl.h to fix build on some
 -	systems. Bug 161936 from Mike Castle.
 -
 -2004-12-22  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/base_db.[h|]cc], and all its derived classes:
 -	init_db_details(): Remove the database_name parameter, because we
 -	only every use one database now, and it is specified in the connection.
 -	Also split init_db_details() into init_db_details() and
 -	refresh_init_details(), so we can refresh the data without
 -	rebuilding the whole structure.
 -	* glom/mode_data/box_data_list_related.[h|cc]: Added
 -	get_relationship().
 -	* glom/utility_widgets/flowtable_withfields.[h|cc]: Added protected
 -	get_portals() to get all the related records portals whose from_key
 -	is the specified field. set_field_value(): Look for portals that
 -	should refresh when the field value changes, and refresh them.
 -	Make FlowTableWithFields inherit from View_Composite_Glom, so that
 -	it can be a sub-view, so that it can access the document, so that it
 -	can get the full Relationship details instead of just the relationship
 -	name.
 -
 -2004-12-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/dialog_layout_details.cc: save_to_document(): Set
 -	the sequences of top-level groups, so they do not all get the default
 -	zero, so that they all get loaded again, without replacing each other.
 -	* glom/glom.glade: dialog_design_layout: Added an Add Related button.
 -	Added dialog_choose_relationship.
 -	* glom/mode_data/treestore_layout.[h|cc]: Change the is_group model
 -	column to a enumed type column, so that items can be 1 of more than
 -	2 things.
 -	* glom/mode_data/dialog_layout_details.cc: Use the Add Related button,
 -	and the changed model column type.
 -	* glom/mode_data/: Added dialog_choose_relationship.[h|cc].
 -	* glom/data_structures/: Added layoutitem_related.[h|cc].
 -	* glom/document/document_glom.[h|cc]: save_before(), load_after():
 -	Load and save the new layout item type.
 -	* glom/navigation/box_tables.cc: fill_from_database(): Show the table
 -	title instead of the name when in operator mode.
 -
 -2004-12-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* docs/Makefile: Upload to my dreamhost account instead of sourceforge,
 -	so I can stop using sourceforge altogether.
 -
 -2004-12-08  Christian Krause  <chkr plauener de>
 -
 -	* Patch to fix Glib::wrap() build error with gcc 3.4.3.
 -	Bug #160245.
 -
 -0.8.10:
 -
 -2004-12-06  Murray Cumming  <murrayc murrayc_debian>
 -
 -	* glom/glom.glade: Gave lots of dialogs default buttons.
 -
 -2004-12-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/glom_conversions.cc: get_text_for_gda_value():
 -	return empty string instead of NULL, because this the result is meant
 -	for user display, not for SQL.
 -	* glom/data_structure/field.cc: sql(): Return NULL for non-text null.
 -
 -2004-12-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Document/document_glom.cc: load_after_layout_group(): Check for
 -	null pointers to avoid crash when opening some documents.
 -
 -2004-12-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: offer_new_or_existing(): Remove double delete
 -	of the dialog, to stop crash when creating new documents.
 -
 -2004-12-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.[h|cc]: Add recreate_database() and use it from
 -	on_document_load() instead of showing the not-yet-implemented dialog.
 -
 -2004-12-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/connection_pool.[h|cc]: Define ExceptionConnection, derived
 -	from std::exception. connect(): When attempting to connect to a
 -	specific database, try to connect to the server in general. Throw
 -	an exception that tells the caller that the connection details are OK,
 -	but that the database does not exist yet.
 -	* glom/application.cc: on_document_load(): If the connection fails
 -	only because the database does not exist yet, then offer to recreate
 -	it. Recreation is not actually implemented, however.
 -	Return true/false (requires bakery 2.3.11) so that the document
 -	will be closed if the user cancels a dialog during loading.
 -
 -0.8.9:
 -
 -2004-11-30  Murray Cumming  <murrayc murrayc_debian>
 -
 -	* glom/application.cc: offer_new_or_existing(): Respond to cancel of
 -	the new-database dialog.
 -	* glom/frame_glom.cc: alert_no_table(): Update the message. See the
 -	TODO.
 -
 -2004-11-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/frame.cc create_database(): Show an informative dialog if the
 -	connection fails.
 -	* glom/glom.glade: Add the dialog_error_connection dialog.
 -	* glom/mode_data/box_data_list.cc: on_adddel_user_requested_add():
 -	Prevent crash when there is only one field and it is auto-generating.
 -	And actually add a row in this case without requiring data entry.
 -
 -2004-11-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/connection_pool.cc: connect(): specify the database name in the
 -	connection string, when it is wanted, instead of using
 -	change_database(), because libgda needs that.
 -
 -2004-11-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/connection_pool.[h|cc]: Added get/set_database()
 -	because postgres seems to need this specified at connection time.
 -	* glom/dialog_connection.cc: Use ConnectionPool::set_database().
 -	* Removed several extra ;s that g++ 3.4 complains about.
 -
 -2004-11-21  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.[h|cc]: Override Bakery::App::init_menus_file to
 -	remove useless Save and Save-As menu items.
 -	offer_new_or_existing(): Prefix new databases with glom_. The whole
 -	name could maybe be autogenerated in future. Start with an unprefixed
 -	name based on the filename.
 -	Offer a database name and title based on the filename.
 -	* glom/Document/document_glom.[h|cc]: Added get/set_database_title(), and
 -	save/load it in save_before() and load_after().
 -	* configure.in: Depend on bakery 2.3.9 because we need the new
 -	behaviour of Bakery::Document::get_name() for the default database
 -	name. Increase version.
 -
 -2004-11-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/: Added dialog_new_database.[h|cc], to request database name
 -	and title.
 -	* glom/: Added dialog_connection.[h|cc]: to replace
 -	glom/navigation/box_databases.[h|cc].
 -	* glom/frame.[h|cc]: Added create_database().
 -	* glom/application.[h|cc]: Ask for a new database name when creating
 -	new documents, and do not allow the user to navigate to a different
 -	database.
 -	* glom/glom.glade: UI for the 2 new dialogs.
 -
 -2004-11-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* utility_widgets/Makefile.am: Use noinst_PROGRAMS instead of
 -	bin_PROGRAMS so that my little test does not get installed.
 -
 -2004-11-14  Murray Cumming  <murrayc murrayc com>
 -
 -	* utility_widgets/flowtable.[h|cc]: Draw some simple dotted lines
 -	between the items to make the design mode look different than the data
 -	mode.
 -	* mode_data/box_data_details.[h|cc]: Override on_userlevel_changed()
 -	to call FlowTable::set_design_mode(), to show or hide the lines. This
 -	doesn't quite work - it draws more lines immediately after switching
 -	to developer mode, but less when just switching tabs.
 -	* Document_Glom::get_table_info_with_add(): Set the table name of the
 -	new info when it adds, so that we actually remember new tables.
 -
 -2004-11-06  Amanpreet Singh Alam <aalam redhat com>
 -
 -	* configure.in: pa [Punjabi] is added tp ALL_LINGUAS
 -
 -2004-10-29  Mike Castle  <dalgoda ix netcom com>
 -
 -	* Added lots of libintl.h includes to fix build on some platforms.
 -
 -2004-10-18  Baris Cicek <baris teamforce name tr>
 -
 -	* configure.in:  Added tr to ALL_LINGUAS
 -
 -2004-08-20  Francisco Javier F. Serrador  <serrador cvs gnome org>
 -
 -	* configure.in: Added es to ALL_LINGUAS
 -
 -2004-08-11  Ankit Patel <ankit redhat com>
 -
 -	* configure.in : Added "gu" to ALL_LINGUAS.
 -
 -0.8.8:
 -
 -2004-08-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/: Added layouts sub-directory, and moved layout
 -	classes into it. Created a polymorphic heirarchy of layout items -
 -	currently LayoutItem_Field and LayoutGroup for fields and groups of
 -	fields.
 -	* glom/data_structure/layoutgroup.[h|cc]: Removed m_others. Designers
 -	must put fields in a top-level group with no title, and that's the
 -	default.
 -        * glom/document/document_glom.[h}cc]: Allow nested layout groups.
 -	* glom/mode_data/dialog_layout_details.[h|cc]: Use only one TreeView
 -	instead of 2, using a TreeStore instead of a ListStore, to show fields
 -	inside groups, and with nested groups. Allow the user to specify the
 -	number of columns for the groups.
 -	* glom/mode_data/: Added treestore_layout.[h|cc], so that we can
 -	override the vfunc to control whether items can be dragged into other
 -	items.
 -
 -2004-07-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtablewithfields.cc: add_field():
 -	Right-align the labels. TODO: Does not actually work.
 -
 -2004-07-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* docs/user-guide/C/glom.xml: Explain how to use glom as an Operator
 -	and as a Developer.
 -
 -2004-07-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/field.cc: sql(): Create sql text representation
 -	depending on the expected value type rather than the actual value
 -	type, to prevent SQL errors when using relationships between fields of
 -	different types.
 -
 -2004-07-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/tables_relationships.[h|cc]: Actually delete
 -	relationships when the Delete button is pressed.
 -
 -0.8.7:
 -
 -2004-07-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Depend on bakery 2.3.8, because that has a fix to
 -	prevent the crash when changing user levels on the details view when
 -	there are related records.
 -
 -2004-07-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtable.cc: get_item_max_width(): Don't
 -	ignore the vertical padding between widgets, so that this does not
 -	incorrectly report that more items could be in the column.
 -	on_size_allocate(): Use = instead of += when using the single_items
 -	width to get the maximum width, to prevent a big gap between the
 -	first and second columns.
 -
 -2004-07-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc: save_before(): Store the layout item
 -	sequence, so that the layout is not lost after a couple of saves.
 -
 -2004-07-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.cc: load_after(): Load the field
 -	calculation from the field node rather than the lookup node, because
 -	that is where we saved it.
 -
 -2004-07-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/main.cc, application.[h|cc]: Make the application quit if the
 -	user presses cancel on the new-or-existing dialog.
 -
 -2004-07-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glom_python.cc: Make
 -	glom_evaluate_python_function_implementation() return a Value instead
 -	of a string, and take a field type parameter.
 -	* glom/box_db_table.cc: Remove record_new().
 -	* glom/mode_data/box_data.cc: Rename record_new_from_entered() to
 -	record_new() with an optional use_entered bool parameter, and use this
 -	everywhere instead of record_new_from_entered. This means that the
 -	first value entered in a new record in the list view will not be
 -	forgotten. Also, this now sets the default value from calculations
 -	where that is specified.
 -
 -2004-07-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/: Added datawidget.[h|cc]: This widget can hold
 -	either an EntryGlom or a checkbox, depending on the field type. Used
 -	this in the Field Definition dialog and the FlowTableWithFields for the
 -	Details view.
 -
 -2004-07-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/glomconversions: parse_value(): Return success
 -	when parsing empty date, time, and numbers as nulls.
 -	* glom/mode_design/fields/dialog_fielddefinition.cc:
 -	on_combo_lookup_relationship_changed(): Clear the list of fields
 -	before adding more.
 -	* glom/utility_widgets/flowtablewithfields.cc: Add a checkbox instead
 -	of an entryglom if it is a boolean field.
 -
 -2004-07-07  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/navigation/box_tables.cc: fill_from_database(): make the window
 -	bigger when in developer mode, because there is more to see.
 -	* glom/mode_design/fields/dialog_fielddefinition.[h|cc]: Use an
 -	EntryGlom instead of an Entry for the default value, so that it gets
 -	validated and internationalized and so that the value does not get
 -	interpreted as a string. This should deal with NULL properly.
 -	* glom/utilty_widgets/entryglom.[h|cc]: Add methods to get and set
 -	values so that code does not need to get the specific widget.
 -	* glom/data_structure/field.[h|cc]: Have both canonical and
 -	translated field type names, and make this clearer in the API. This
 -	allows us to use the english names in the XML document, but show the
 -	translated names in the user-interface.
 -
 -2004-07-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* Embed python for calculated fields:
 -	* scripts/macros.m4: GLOM_ARG_ENABLE_WARNINGS: Add -Wno-long-long so
 -	that the C++ compiler does not complain about the long longs in the
 -	python headers.
 -	* Added acinclude.m4, copied from pygtk, with additions from the
 -	version in Plannet. Used the AM_CHECK_PYTHON_INCLUDES macro in
 -	configure.in to detect the python headers and libs.
 -	* glom/glade.glom: Added widgets for field calculation to the
 -	Field Definition dialog.
 -	* glom/mode_design/fields/dialog_fielddefinition.[h|cc]: Load and save
 -	the field calculation.
 -	* glom/mode_design/fields/: Added dialog_fieldcalculation.[h|cc] that
 -	can be opened from the Field Definition window to edit and test the
 -	python code.
 -	* glom/: Added glom_python.[h|cc]: With a function that can evaluate
 -	arbitrary python code as if it is a python function definition.
 -	* glom/main.cc: Intialize and terminate the python runtime.
 -
 -0.8.6:
 -
 -2004-07-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/main.cc: Accept a URI on the command line, and use it
 -	to open an existing document if any.
 -	* glom/application.[h|cc]: Add URI parameter to init(), and use it.
 -	* glom/data_structure/layoutgroup.[h|cc]: Add boolean m_others
 -	member variable and use it instead of checking the group name.
 -
 -2004-07-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/navigation/box_databases.cc: Use the UNIX user name by default,
 -	because it is often the same as the postgres user name.
 -
 -2004-07-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.[h|cc]: Add intermediate signal handlers for the
 -	User Level menu items because use of sigc::bind with RefPtrs might be
 -	causing crashes.
 -
 -2004-07-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/navigation/box_tables.cc: fill_from_database(): Correct typo so
 -	that the hidden status is shown correctly.
 -
 -2004-07-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glade.glom: In Table Navigation, change Cancel button to a close
 -	button, because this window is opened to edit as well as to navigate.
 -	* glom/navigatin/box_tables.cc: Make sure that changes are saved to
 -	the document immediately, because we no longer automatically ask
 -	all views to save into the document before writing to disk.
 -
 -2004-07-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/Document_Glom.cc: set_modified(): Call save_before()
 -	and write_to_disk() instead of save() because that gets all the data
 -	from the views again.
 -
 -2004-07-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/Document_Glom.cc: set_modified(): Do nothing if the
 -	modified status is already what it would be set to, to prevent
 -	infinite loops.
 -	* glom/application.cc offer_new_or_existing(): Keep offering if the
 -	user cancels at some stage.
 -
 -2004-07-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/Document_Glom.cc: When in developer mode, save all
 -	changes immediately and automatically. Lets see how much disk activity
 -	this creates.
 -
 -2004-07-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/applciation,cc init_layout(): Do not create the toolbar,
 -	because it is not useful for this application.
 -
 -2004-07-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/navigation/box_db_tables.cc: save_to_document(): Only save
 -	something when something has been modified.
 -
 -2004-07-04  Christophe Merlet  <redfox redfoxcenter org>
 -
 -	* configure.in: Added "fr" (French) to ALL_LINGUAS.
 -
 -2004-07-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/Document_Glom.[h|cc]: Cache all the data in
 -	member variables and only deal with the XML DOM when loading and
 -	saving, in overrides of load_before() and save_after(). This makes the
 -	code nicer and faster.
 -
 -2004-07-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* Renamed all the ugly on_AddDel_* methods to slightly less ugly
 -	on_adddel_* methods.
 -
 -2004-07-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* Added glom.keys and glom.mime, and added rules in Makefile.am to
 -	install them. This is for the old MIME-type registration system,
 -	because GNOME 2.6 seems to need both the old and new systems.
 -
 -0.8.5:
 -
 -2004-07-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/adddel/adddel_withbuttons.cc: Use a stock
 -	Open button instead of one that says Edit. It's nicer.
 -	* glom/mode_find/box_data_list_find.cc: Make the Find button position
 -	sensible.
 -
 -2004-07-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_find/box_data_list_find.cc fill_from_database(): Save the
 -	fields into m_Fields, so that get_WhereClause() knows about them. Find
 -	in the List view now works.
 -
 -2004-07-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtablewithfields: Handle field_edited
 -	signal of sub-flowtables so that glom responds to editing of a field
 -	in a group on the Details view.
 -
 -2004-07-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data.[h|cc] and derived classes: Change
 -	get_Entered_Field to get_entered_field_data() which takes a Field and
 -	returns a Gnome::Gda::Value. This makes Find mode work for the Details
 -	view at least.
 -
 -2004-07-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_find/: Make the find mode show some widgets, by
 -	re-activating some old code and adding the boxes and notebooks to the
 -	Bakery composite View so that they know about the document.
 -
 -2004-07-01  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/navigation/box_db_tables.cc: on_AddDel_changed(): Update the
 -	document properly when a table is renamed, so that glom does not
 -	complain that it knows nothing about the table. Also, update the
 -	AddDel with the new table name as they key, so that it does not try
 -	to operate on the old table name.
 -
 -0.8.4:
 -
 -2004-06-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtable.cc on_size_allocate(): Correct x
 -	posititioning of 2nd column when using single items.
 -	get_field(): Put the recursive stuff in the field(sting id) overload,
 -	because that's the one that gets called by the field(field) overload.
 -
 -2004-06-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtablewithfields.cc: Added add_group() and
 -	used it in mode_data/box_table_data.cc fill_layout(). Layout groups
 -	are now shown inside a HIG-style frame.
 -	* glom/navigation/box_tables.cc on_AddDel_add(), and
 -	  glom/mode_design/fields/box_db_tabledefnition.cc on_AddDel_add():
 -	Create a default title for tables and fields.
 -
 -2004-06-29  Gareth Owen  <gowen72 yahoo com>
 -
 -	* configure.in: Added en_GB to ALL_LINGUAS
 -
 -2004-06-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtable.cc: get_minimum_column_height(),
 -	get_column_height(): Make single items take up the whole width,
 -	instead of affecting the width of the first sub-column.
 -
 -2004-06-26  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/box_db.[h|cc]: Add get_default_button() virtual method, and
 -	add implementation in glom/navigation/box_databases.cc, and used it in
 -	constructor Dialog_Glom, so that the connect button is the default
 -	button, so you can just press return in the password box to connect.
 -
 -2004-06-25  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in: Removed AC_CONFIG_AUX_DIRS(), which was causing
 -	problems.
 -
 -2004-06-24  Duarte Loreto <happyguy_pt hotmail com>
 -
 -	* configure.in: Added Portuguese (pt) to ALL_LINGUAS.
 -
 -0.8.2:
 -
 -2004-06-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.[h|cc]: Added on override of on_menu_help_init() to
 -	merge in a menu item for the user guide. Called gnome_help_display() in
 -	the menu signal handler to show the docs.
 -	* glom/main.cc: Call gnome_program_init() so that gnome_help_display()
 -	has the information that it needs. Hopefully this coexists with our
 -	Gtk::Main initialisation.
 -	* configure.in: Depend on libgnome, because that is where
 -	gnome_help_display is. That is not good but at least it is not
 -	libgnomeui.
 -	* Makefile.am: Add some defines needed by gnome_program_init() - see
 -	comments in Makefile.am.
 -
 -2004-06-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* configure.in, docs/user-guide: Added skeleton for the user guide.
 -
 -2004-06-20  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_design/fields/box_db_table_definition.cc:
 -	get_field_definition(): Prevent crash - do not try to use a
 -	TreeModel::iterator as the index to a vector.
 -
 -2004-06-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* Added glom.applications, to register glom as capable of opening
 -	glom files.
 -	* Makefile.am: Install glom.applications in the applications-registry.
 -	* glom/navigation/box_tables.cc: fill_from_database(): Show tables
 -	that are in the database, but not in the document, as hidden, if in
 -	developer mode.
 -	* glom/utility_widgets/adddel/adddel.cc : set_column_choices(): Get the
 -	cellrenderer for the view column, not the model column. Among other
 -	things, this makes the Relationships dialog work again.
 -	* glom/mode_design/dialog_relationships.[h|cc]: Add an on_hide()
 -	override to actually save the relationships when the dialog is closed.
 -
 -0.8.2:
 -
 -2004-06-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_details.cc fill_from_database(): Make
 -	auto-increment fields non-editable.
 -
 -2004-06-18  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/adddel.cc add_column(Field): Make the column
 -	non-editable if it is an auto-increment field, because the user should
 -	never change or create those values.
 -	* glom/glom.glade: Create a HIG information dialog. Use it in
 -	glom/frame_glom.cc show_ok_dialog().
 -	* glom/mode_design/box_db_tabledefinition.cc: on_AddDel_del(): Correct
 -	for loop, so that we actually delete the field.
 -	* glom/base_db: get_fields_for_table(): Ignore any fields that are no
 -	longer in the database. Among other things, this makes the field
 -	definition window update correctly after deleting a field.
 -	* glom/frame_glom.cc: Update the data view when the fields window
 -	is closed, because the structure might have changed.
 -	* glom/data_structure/glomconversions.cc: parse_value(): When parsing
 -	a string as a number, create a GdaNumeric-based GdaValue instead of a
 -	float, because that is the numeric type that we are using eveywhere.
 -	Actually, maybe it's not the best type.
 -	* All over the place: Fixed lots of primary_key arguments to be
 -	Gnome::Gda::Values rather than strings, and therefore made sure that
 -	Field::sql() was used with them.
 -
 -2004-06-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/document/document_glom.[h|cc]: Added get_default_table().
 -	* glom/frame_glom.cc: on_Box_Databases_selected(): open the default
 -	table instead of showing the list of tables, if there is a default
 -	table.
 -
 -2004-06-17  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/glade.glom, glom/mode_design/fields/dialog_fielddefinition.cc:
 -	Moved Default Value into its own Notebook tab, with new Lookup widgets.
 -	* glom/mode_data/box_data_list.cc: Make the rows have alternating
 -	colors when the theme does that. Among other things, this makes the
 -	data list look different to the field list.
 -	* The lookup details are not actually used yet to do any lookups.
 -
 -2004-06-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/adddel/adddel.[h|cc]: Simplifified the code for
 -	the placeholder row a bit.
 -	* glom/navigation/box_db_tables.cc,
 -	glom/mode_design/fields/box_table_field_definitions.cc: Fixed some odd
 -	focus errors (hopefully) caused by rebuilding the TreeModel in a
 -	CellRenderer signal handler.
 -	* glom/mode_design/fields/box_table_field_definitions.cc:
 -	get_field_definition(): Store the field title in the result, not in
 -	the temporary field instance, so that new titles are really saved.
 -
 -2004-06-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/navigation/box_tables.cc: on_AddDel_changed(): Implement
 -	renaming of tables.
 -
 -2004-06-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/mode_data/box_data_list.cc: Corrected problems with the
 -	AddDel changes: Adding a record works again, and editing a list record
 -	shows the correct record in the Details view.
 -
 -2004-06-15  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/adddel.[h|cc]: add_item(), remove_item(),
 -	get_row() now use a key value instead of the value in the first column.
 -	This is a hidden TreeModel column. There is also a bool placeholder
 -	column, used to mark the blank row that is for the user to add a new
 -	row. This scheme should make it easier to handle reorderered rows, and
 -	it allows us to get a unique identifier for a changed row even when
 -	responding to a change an it is the first row (such as a field name)
 -	that has changed.
 -
 -2004-06-14  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/adddel.[h|cc]: The API now uses Gtk::TreeModel
 -	iterators instead of integer indexes. The previous API was an
 -	abstraction layer that is no longer required now that we have
 -	Gtk::TreeView and plan to keep using it.
 -	* other files: Adapted accordingly.
 -
 -0.8.1:
 -
 -2004-06-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: show_hint(): Do not show the help hints at the
 -	bottom - they are just annoying and not really necessary anymore.
 -
 -2004-06-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/glomconversions.cc: Simplify the time_get and
 -	time_put code by using the default template iterators.
 -
 -2004-06-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/glomconversions.cc: Various corrections from
 -	Daniel Elstner (king of C++). Also fallback to parsing time in the C
 -	locale, because parsing in the current locale never seems to work.
 -	* glom/utility_widgets/adddel/adddel.cc: on_treeview_celledited(),
 -	  glom/utility)widgets/entryglom: check_changed(): Update the entry
 -	with the text as it would be displayed in the locale, after editing,
 -	so that the user gets immediate feedback.
 -
 -2004-06-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/dialog_data_invalid.[h|cc}, glom.glade: New dialog to show
 -	when the user enters incorrect data, with advice, and offer to revert.
 -	glom/utility_widgets/entryglom.cc: check_for_changes(): Show the new
 -	dialog, and put the focus back in the entry if the user tries again.
 -	* glom/utility_widgets/adddel/adddel.cc: on_treeview_cell_edited():
 -	Do the same, though the cell is obviously not reactivated properly.
 -
 -2004-06-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/entryglom.cc: check_for_change(): Complain
 -	about unparseable data (such as dates and times) instead of sending
 -	garbage to the database. This dialog should be improved (see comments)
 -	and we need the same thing for the List view.
 -
 -2004-06-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* Moved generic parse/format routines to
 -	glom/data_structure/glomconversions.[h|cc] from
 -	glom/utility_widgets/entryglom.[h|cc].
 -	* glom/utility_widgets/adddel/adddel.[h|cc]: Add add_column() override
 -	that takes a Field. Add set_value(Gda::Value) and get_value_as_value()
 -	methods that use the glomconversions.
 -	* glom/mode_data/box_data_list.cc: fill_from_database(),
 -	on_adddel_changed(): Use the GdaValue-based AddDel API so that dates,
 -	times, and numbers are shown and parsed as per the locale.
 -
 -2004-06-12  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtable_withfields.cc: Change all parsing to
 -	use C++ streams and facets, and rearranged them into generic
 -	conversion routines that can be used elsewhere and should be moved
 -	elsewhere too. Added conversions to ISO formats, fo use in SQL
 -	statments.
 -	* glom/data_structure/field.cc: sql(): Use these conversion routines
 -	to get text representations for SQL.
 -
 -2004-06-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtable_withfields.cc: get_suitable_width():
 -	Use static locale-specific conversion function from EntryGlom to get
 -	example text so that the number, date, and time fields have suitable
 -	widths in all locales.
 -
 -2004-06-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* po/: Update it.po from Albert Paro.
 -	* configure.in: Re-enabled it.po now that the invalid multibyte
 -	sequences are fixed.
 -
 -2004-06-11  Murray Cumming  <murrayc  com>
 -
 -	* Do locale-specific display and parsing of dates, times, and numbers
 -	in the Data Details.
 -	* glom/utility_widgets/entryglom.[h|cc]: Added Gda::Value-based
 -	get_value() and set_value(), which show and parse the text based on
 -	the field type and the locale, though there are still some TODOS in
 -	the code.
 -	* glom/mode_data/box_data_details.cc: Use EntryGlom::set/get_value()
 -	instead of set/get_text(), so we delegate parsing/representation to
 -	the EntryGlom.
 -
 -2004-06-10  Adam Weinberger  <adamw gnome org>
 -
 -	* configure.in: Added en_CA to ALL_LINGUAS.
 -
 -2004-06-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/entryglom.[h|cc]: Started to add validation,
 -	depending on the field type.
 -
 -2004-06-11  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/data_structure/: Removed fieldtype.[h|cc] to simplify things,
 -	moving some of the static functions into the Field class.
 -
 -2004-06-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/utility_widgets/flowtable_withstyles.[h|cc]: Use PangoLayout to
 -	calculate an appropriate width for fields of different types. Need to
 -	do locale-specific stuff here though.
 -
 -2004-06-10  Gustavo Noronha Silva  <kov debian org>
 -
 -	* configure.in: added pt_BR to ALL_LINGUAS
 -
 -2004-06-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* Added macros/macros.m4, and used the macro in configure.in, to add
 -	--enable-warnings configure options, and used them by default in
 -	autogen.sh. So now it builds with warnings by default.
 -
 -2004-06-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/navigation/box_tables.cc: Handle AddDel::signal_user_changed so
 -	that changes are saved immediately. It does not update the list of
 -	non-hidden tables properly yet though. The AddDel columns are no
 -	longer editable when in operator mode.
 -	* glom/frame_glom.[h|cc]: Do not allow the user to design fields,
 -	relationships, or layouts if no table has been selected.
 -	* glom/application.cc, frame_glom.[h|cc]: on_menu_userlevel_*():
 -	Use sigc::bind to send the RadioAction to the signal handler, so we
 -	can check if it is active, because the signal seems to be sent both
 -	when the menu item is un-activated (as a result of another radioaction
 -	being activated) and when it is activated.
 -
 -2004-06-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/box_db.[h|cc]: Move the database stuff into the Base_DB class to
 -	make the code a bit clearer. Connect to the signal of the document in
 -	a set_document() override instead of the on_load_document() override.
 -
 -2004-06-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* po/il.po: Italian translation from Alberto Paro.
 -	* various headers: Alberto Paro added includes for libintl.h because
 -	he says gettext() is not defined without them. It is strange that it
 -	works for me, but they do no harm. I need to look at this properly.
 -
 -2004-06-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* po/de.po: German translation from Hendrik Brandt.
 -
 -2004-06-09  Murray Cumming  <murrayc murrayc com>
 -
 -	* Mode menu: removed the Design Mode.
 -	* Developer menu: Added Fields, Relatationships, Users, and Layout, to
 -	show the same functionality in secondary windows.
 -
 -2004-06-09  Christian Rose  <menthos menthos com>
 -
 -	* configure.in: Added "sv" to ALL_LINGUAS.
 -
 -2004-06-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.[h|cc], glom/Document/Document_Glom.[h|cc], and
 -	others: The AppState (User Level) is now dependent on the document so
 -	different instances (each with 1 document) can have different
 -	user levels. And the user level is Operator if the file is read-only.
 -	* glom/Navigation/Box_DB_Tables.cc: Enable/Disable the extra UI in
 -	fill_from_database() instead of the constructor, so that they are
 -	changed when the user level changes. The table title is not yet shown
 -	instead of the table name when in operator mode.
 -
 -2004-06-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* Changed all source code filenames to lowercase, because it was
 -	getting ugly, and imported into GNOME cvs.
 -
 -0.8.0:
 -
 -2004-06-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/application.cc: init_menus(): Give Mode/Find a control-F
 -	shortcut. Find does not work yet.
 -	* glom/Mode_Design/Box_Table_FieldDefinitions: Show the field titles
 -	in the list of fields.
 -	* Changed all std::strings to Glib::ustrings. Thanks regexxer.
 -	* glom/Document/Document_Glom.cc set_data_layout_groups(): Really save
 -	the groups.
 -
 -2004-06-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Data_Structure/Field.cc: sql(): Put quotes around dates and
 -	time, so that entering them works in Date mode.
 -
 -2004-06-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Document/Document_Glom.cc: set_tables(): Removed old code that
 -	caused tables to always be marked as hidden.
 -	* glom/Mode_Data/Box_Data_Details.cc: Change Related Records frame to
 -	HIG-style.
 -
 -2004-06-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Mode_Data/Box_Data.cc: get_fields_to_show(): Remove any fields
 -	that are no longer in the database. This method is horribly
 -	inefficient.
 -	* glom/Mode_Data/Box_Data_Details.cc: fill_related(): Do not try to
 -	show records from a relationship that uses a field that does not exist
 -	any longer in the other table.
 -	* Detail and List use Filed::value_to_string(), which deals with NULLs
 -	instead of filling them with the text NULL.
 -
 -2004-06-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Frame_Glom.cc: on_userlevel_changed(): Really switch to data
 -	mode if the current mode is not allowed for the new userlevel.
 -
 -2004-06-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Utility_Widgets/: Added EntryGlom, which is an Entry with an
 -	edited signal that is only emitted when the user finishes editing.
 -	* glom/Utility_Widgets/flowtable_withfields.[h|cc]: Use EntryGlom
 -	instead of Gtk::Entry.
 -	* glom/application.cc: init_menus(): Put the standard bakery save and
 -	saveas actions in the list of developer-mode actions, so that they
 -	will be disabled when in operator mode. Actually, I need to remove
 -	save anyway, because it should save automatically.
 -	* Added standard GPL copyright headers to all files.
 -
 -2004-06-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* Data Details changing of data now works, though it is doing an
 -	insane amount of UPDATE commands.
 -
 -2004-06-04  Murray Cumming  <murrayc murrayc com>
 -
 -	* Data Layouts now show newly-added fields.
 -
 -2004-06-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Mode_Data/Box_Data_Details.cc: Reordering the fields in the
 -	Data Layout really works now.
 -
 -2004-06-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* Show the table title in the Data Layout dialog, and on the main
 -	window.
 -
 -2004-06-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Utility_Widgets/flow_table.cc: on_allocate(): Fixed awful
 -	calculation bug, so the Data Details view now shows itself properly.
 -
 -2004-06-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Document/Document_Glom.h: Changed get/set_hidden_tables() to
 -	get/set_tables(), using the new TableInfo class, so that we can
 -	save table titles.
 -
 -2004-06-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* application.cc: init(): If it is a default empty document, offer
 -	a choice of opening an existing document, or starting a new document,
 -	to make it clearer that you need a document to work with the database.
 -
 -2004-06-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* Navigation: The user can not open a table that the document does not
 -	know about. We really need up-to-date information in the document, so
 -	in future we must automatically-save it.
 -	* List entry: Works again. Instead of using the postgres
 -	serial/auto-increment field type, I have added a hack that does a
 -	max() to get the next value. Maybe we can fix libgda to make it
 -	work with serial.
 -
 -2004-06-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* Box_DB_Data::get_fields_for_table() now gets some information from
 -	the document - the information that libgda does not tell us.
 -
 -2004-06-01  Murray Cumming  <murrayc murrayc com>
 -
 -	* All field information is now saved in the document when a table is
 -	opened, and auto_increment information from the database is ignored,
 -	because libgda does not give us that information.
 -
 -2004-05-31  Murray Cumming  <murrayc  com>
 -
 -	* glom/Mode_Data/Box_Data_List::Fill(): Fixed some awful bugs - the
 -	list view now shows all the fields and stores changes properly.
 -
 -2004-05-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Document/Document_Glom.[h|cc]: get/set_data_layout*(): Removed
 -	the hidden_fields argument - now the LayoutItems have a m_hidden
 -	member instead.
 -
 -2004-05-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Mode_Design/Box_DB_Table_Definition.cc:postgres_change_column():
 -	Use to_date(), to_number(), and to_timestamp(), when CAST does not
 -	work. So now all field type conversions work.
 -
 -2004-05-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* Layout groups can not have duplicate names.
 -
 -2004-05-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* Layout groups are now saved too.
 -
 -2004-05-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* Layouts are now saved.
 -
 -2004-05-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* The beginnings of the Data Layout dialog.
 -
 -2004-05-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* Added Notebook_Glom::merge_special_menus() so that modes can have
 -	their own extra menus.
 -	* Added Box_Data::show_layout_dialog().
 -
 -2004-05-16  Murray Cumming  <murrayc murrayc com>
 -
 -	* FlowTable: Fixed several position problems.
 -
 -2004-05-14  Murray Cumming  <murrayc murrayc com>
 -
 -	* Combo_FieldType: made get give what you set.
 -
 -2004-05-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* The Field Definition dialog is now done via libglademm.
 -
 -2004-05-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Mode_Design/Fields/Combo_Type: Now derives from ComboBox instead
 -	of Combo.
 -
 -2004-05-13  Murray Cumming  <murrayc murrayc com>
 -
 -	* Added Data_Structure/FieldType, which defines some simple Glom-only
 -	types, and what underlying types to use for these. From now on, Glom
 -	can not be used on databases that do not use these simple types. It
 -	will refuse to edit fields that use other types.
 -
 -2004-05-10  Murray Cumming  <murrayc murrayc com>
 -
 -	* Box_Data_List: Gets specific fields (specified by document) instead
 -	of all fields.
 -
 -2004-05-08  Murray Cumming  <murrayc murrayc com>
 -
 -	* FlowTable now has 2 widgets in each row of each column. Kind of
 -	works.
 -
 -2004-05-06  Murray Cumming  <murrayc murrayc com>
 -
 -	* AppState: Added userlevel_changed signal.
 -
 -2004-05-05  Murray Cumming  <murrayc murrayc com>
 -
 -	* Changing the field type works sometimes.
 -
 -2004-05-03  Murray Cumming  <murrayc murrayc com>
 -
 -	* Added FlowTableWithFields, and used it a bit.
 -
 -2004-05-02  Murray Cumming  <murrayc murrayc com>
 -
 -	* glom/Utility_Widgets:/ Addded FlowTable container.
 -
 -2004-05-01  Murray Cumming  <murrayc murrayc com>
 -
 -	* App_Glom and Frame_Glom are now instantiated from glom.glade,
 -	with get_widget_derived().
 -
 -2004-04-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* Information about which tables are hidden is now saved in the
 -	document.
 -
 -2004-04-30  Murray Cumming  <murrayc murrayc com>
 -
 -	* Replaced Connection with ConnectionPool which does more appropriate
 -	sharing of the connection.
 -
 -2004-04-29  Murray Cumming  <murrayc murrayc com>
 -
 -	* AddDel: Used an AddDelColumnInfo field to simplify it a bit.
 -
 -2004-04-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* Box_Databases now loads its UI from a libglade file.
 -
 -2004-04-28  Murray Cumming  <murrayc murrayc com>
 -
 -	* Added FieldTypes class and used it to get the actual GdaValueTypes
 -	and therefore show the correct field type in the Table Definition.
 -	* Added User Level menu.
 -
 -2004-04-27  Murray Cumming  <murrayc murrayc com>
 -
 -	* AddDel: Used derived TreeViewColumn so we can store extra column
 -	information, so we can deal with reordered view columns.
 -
 -2004-04-24  Murray Cumming  <murrayc murrayc com>
 -
 -	* Creating tables works, though defining them does not. Creating
 -	databases does not work.
 -
 -2004-04-23  Murray Cumming  <murrayc murrayc com>
 -
 -	* Initial port from mysqlcppapi to libgdamm. It doesn't do much but
 -	you can navigate to a table with postgressql.
 -
 -2004-04-19  Murray Cumming  <murrayc murrayc com>
 -
 -	* Updated for gtkmm 2.4 API.
 -
 -0.7.0:
 -
 -2003-02-15  Murray Cumming  <murrayc usa net>
 -
 -	* glom/Dialog_Glom.[h|cc]: Inherit from Gtk::Dialog instead of
 -	Gtk::Window and use the action_area.
 -
 -2003-02-15  Murray Cumming  <murrayc usa net>
 -
 -	* Users can now see full Details of Related Records by choosing Edit.
 -
 -2003-02-15  Murray Cumming  <murrayc usa net>
 -
 -	* glom/Utility_Widgets/AddDel/AddDel.cc: Respected m_bHasRowTitles in
 -	get_value() and set_value(). This means that the Related Records pane
 -	in Data/Details now works again.
 -
 -2003-02-15  Murray Cumming  <murrayc usa net>
 -
 -	* Updated for latest mysqlcppapi API - using shared, reference-counted
 -	objects.
 -
 -0.6.0:
 -
 -2003-01-20  Murray Cumming <murrayc usa net>
 -
 -	* Did some funky TreeView on_button_press_event() stuff to fix the
 -	context-menu and Design/Relationships popups.
 -
 -2003-01-20  Murray Cumming  <murrayc usa net>
 -
 -	* Now uses true bool model column types. This was achieved with some
 -	unpleasantly lengthy new/delete and switch/case stuff.
 -
 -2003-01-14  Murray Cumming <murrayc usa net>
 -
 -	* Data_Details works.
 -	* Adding new records works.
 -	* Used more stock buttons.
 -
 -2003-01-13  Murray Cumming  <murrayc usa net>
 -
 -	* Opening of database when opening old documents works again - the
 -	Bakery API had changed so on_Document_load() needed to be changed to
 -	on_document_load() so that it was an override.
 -	* Data_Details kind of works.
 -
 -2003-01-13  Murray Cumming  <murrayc usa net>
 -
 -	* popup columns now work.
 -
 -2003-01-13  Murray Cumming  <murrayc usa net>
 -
 -	* Column titles are now set properly.
 -	* Field definition editing works via the Edit dialog.
 -	* Added CellRendererList, from the gtkmm examples - doesn't quite
 -	work yet.
 -
 -2003-01-12  Murray Cumming  <murrayc usa net>
 -
 -	* Updated for Bakery 1.3.7, with no gnomemm dependency.
 -
 -2002-12-26  Murray Cumming  <murrayc usa net>
 -
 -	* configure.in, Makefile.am: Used intltool, like the gnomemm_hello
 -	build files. The intl, macros, and scripts directories are no longer
 -	used.
 -	* Updated for latest libxml++ API.
 -	* Added std:: prefixes where necessary.
 -
 -2002-11-19  Murray Cumming  <murrayc usa net>
 -
 -	* Used Bakery::Document_XML now that it is part of Bakery itself, and
 -	use libxml++ API instead of Xerces-C++ because that is what it uses.
 -	This means that there are no more --with- options needed by the
 -	configure script.
 -
 -2002-09-20  Murray Cumming  <murrayc usa net>
 -
 -	* Disabled part of Notebook_Find to prevent warnings and segfault
 -	on exit. It didn't do anything yet anyway.
 -
 -2002-09-19  Murray Cummign  <murrayc usa net>
 -
 -	* Dialog_FieldDefinition: Show()ed the child notebook, so field
 -	definition editing works again.
 -
 -2002-09-18  Murray Cumming  <murrayc usa net>
 -
 -	* Notebook_Glom: The signal handlers were hiding the base class
 -	implementations.
 -	* Frame_Glom::show_ok_dialog(): Now use Gtk::MessageDialog.
 -
 -2002-09-13  Murray Cumming  <murrayc usa net>
 -
 -	* AddDel widget: Adding of items now works, so Glom can create new
 -	databases and tables again.
 -
 -2002-08-07  Murray Cummign  <murrayc usa net>
 -
 -	* Updated for latest Menu::popup() API.
 -
 -2002-07-27  Murray Cumming  <murrayc localhost localdomain>
 -
 -	* Updated for latest pack_start enum and use new TreeView editable
 -	cells method.
 -
 -2002-07-12  Murray Cumming  <murrayc usa net>
 -
 -	* Updated for changed gtkmm2 pack_start() and TreeView APIs.
 -
 -2002-03-19  Murray Cumming  <murrayc usa net
 -
 -	* Used pkg-config checks instead of the various old .m4 macros,
 -	and changed Xerces C++ version to 1.7.
 -	* Replaced gtk-- 1.2 includes with gtkmm2 includes.
 -	* Prefixed Xerces C++ includes with xercesc, as required by 1.7.
 -	* Changed e.g. clicked.connect(SigC::slot(this to
 -	signal_clicked.connect(SigC::slot(*this.
 -	* Replaced use of Gnome::Dialog with Gtk::MessageDialog.
 -	* Replaced use of Gnome::PropertyBox with a similar, but custom Window
 -	class.
 -	* Changed Gtk::wrap() to Glib::wrap(), and gtkobj() to gobj().
 -   * Changed Gtk::Widget::set_usize() to set_default_size().
 +	get_stringstream_precision_default(): Simplify this fu
- 	
diff --cc NEWS
index 2f477e8,a13c5b8..fa1a5db
--- a/NEWS
+++ b/NEWS
@@@ -1,21 -1,23 +1,41 @@@
 +1.15.1 (unstable):
 +
- * Uses Gnome::Gda::SqlBuilder in most places to avoid manually building SQL 
++* Uses Gnome::Gda::SqlBuilder in most places to avoid manually building SQL
 +  query strings. This should be more robust and safer.
 +  (Murray Cumming)
 +* Correct the position of "Records / Found" labels.
 +  (Daniel Borgmann)
 +* Find:
 +  - Make Find mode a toggle and move it to the Edit menu.
 +  - Fix a crash when using find mode.
 +  (Daniel Borgmann)
 +* List view:
 +  - Don't add a new row when cancelling editing of a placeholder row.
 +  - Don't allow placeholder rows to be delteted.
 +  (Daniel Borgmann)
 +* Build libglom and pyglom API documentation.
 +  (Murray Cumming, Daniel Elstner)
 +
+ 1.14.5 (stable):
+ 
+ * Allow unique fields with same name in multiple tables.
+   (Murray Cumming) Bug #625192 (fmyhr).
+ 
+ 1.14.4 (stable):
+ 
+ * Developer menu: Added Export Backup and Restore Backup menu items.
+   These use PostgreSQL's pg_dump and pg_restore utilities, wrapping the
+   dump and .glom file up in a .tar.gz.
+   As well as allowing backups of data, this should make it easier to upgrade
+   the PostgreSQL version, which some distros do automatically when upgrading
+   to new major versions of Glom. This is possible because pg_restore can
+   work with the pg_dump output of an older PostgreSQL version.
+   See also:
+   http://www.glom.org/wiki/index.php?title=Pg_dump_when_upgrading_PostgreSQL
+   (Murray Cumming)
+ * Build: Explicitly link with libdl for Python module loading test.
+   (David King)
+ 
  1.14.3 (stable):
  
  * Fix position of "Records / Found" labels.
diff --cc glom/application.cc
index f66de88,4d5b11c..4116864
--- a/glom/application.cc
+++ b/glom/application.cc
@@@ -34,10 -33,10 +34,11 @@@
  
  #include <glom/utils_ui.h>
  #include <glom/glade_utils.h>
 -#include <glom/glom_privs.h>
 +#include <libglom/db_utils.h>
 +#include <libglom/privs.h>
  #include <glom/python_embed/python_ui_callbacks.h>
  #include <glom/python_embed/glom_python.h>
+ #include <libglom/spawn_with_feedback.h>
  
  #include <cstdio>
  #include <memory> //For std::auto_ptr<>
@@@ -88,7 -87,8 +89,9 @@@ Application::Application(BaseObjectType
    m_ui_save_extra_showextras(false),
    m_ui_save_extra_newdb_hosting_mode(Document::HOSTING_MODE_DEFAULT),
    m_avahi_progress_dialog(0),
 +  m_dialog_progress_creating(0),
+   m_dialog_progess_save_backup(0),
+   m_dialog_progess_convert_backup(0),
  #endif // !GLOM_ENABLE_CLIENT_ONLY
    m_show_sql_debug(false)
  {
@@@ -131,11 -131,17 +134,24 @@@ Application::~Application(
      m_avahi_progress_dialog = 0;
    }
  
++
 +  if(m_dialog_progress_creating)
 +  {
 +    delete m_dialog_progress_creating;
 +    m_dialog_progress_creating = 0;
 +  }
++
+   if(m_dialog_progess_save_backup)
+   {
+     delete m_dialog_progess_save_backup;
+     m_dialog_progess_save_backup = 0;
+   }
+ 
+   if(m_dialog_progess_convert_backup)
+   {
+     delete m_dialog_progess_convert_backup;
+     m_dialog_progess_convert_backup = 0;
+   }
    #endif // !GLOM_ENABLE_CLIENT_ONLY
  
    #ifdef GLOM_ENABLE_MAEMO
@@@ -1186,7 -1227,13 +1238,14 @@@ bool Application::on_document_load(
        {
          //Create the example database:
          //connection_request_password_and_choose_new_database_name() has already change the database name to a new unused one:
-         const bool test = recreate_database();
++
+         bool user_cancelled = false;
+         bool test = false;
+         if(is_example)
+           test = recreate_database_from_example(user_cancelled);
+         else
+           test = recreate_database_from_backup(original_uri, user_cancelled);
+ 
          if(!test)
          {
            // TODO: Do we need to call connection_pool->cleanup() here, for
@@@ -1590,49 -1655,353 +1666,376 @@@ void Application::on_menu_help_contents
  #endif //GLOM_ENABLE_MAEMO
  
  #ifndef GLOM_ENABLE_CLIENT_ONLY
++
 +void Application::on_recreate_database_progress()
 +{
 +  //Show the user that something is happening, because the INSERTS might take time.
 +  //TOOD: This doesn't actually show up until near the end, even with Gtk::Main::instance()->iteration().
 +  if(!m_dialog_progress_creating)
 +  {
 +    Utils::get_glade_widget_derived_with_warning(m_dialog_progress_creating);
 +
 +    m_dialog_progress_creating->set_message(_("Creating Glom Database"), _("Creating Glom database from example file."));
-   
++
 +    m_dialog_progress_creating->set_transient_for(*this);
 +    m_dialog_progress_creating->show();
-   
++
 +  }
 +
 +  //Ensure that the dialog is shown, instead of waiting for the application to be idle:
 +  while(Gtk::Main::instance()->events_pending())
 +    Gtk::Main::instance()->iteration();
 +
 +  m_dialog_progress_creating->pulse();
 +}
 +
- bool Application::recreate_database()
+ bool Application::recreate_database_from_example(bool& user_cancelled)
  {
    //Create a database, based on the information in the current document:
    Document* pDocument = static_cast<Document*>(get_document());
    if(!pDocument)
      return false;
  
-   Gtk::Window* pWindowApp = get_application();
-   g_assert(pWindowApp);
-   BusyCursor busycursor(*pWindowApp);
+   ConnectionPool* connection_pool = ConnectionPool::get_instance();
+   if(!connection_pool)
+     return false; //Impossible anyway.
  
-   const bool result = DbUtils::recreate_database_from_document(pDocument, 
-     sigc::mem_fun(*this, &Application::on_recreate_database_progress));
-   
-   if(m_dialog_progress_creating)
+   //Check whether the database exists already.
+   const Glib::ustring db_name = pDocument->get_connection_database();
+   if(db_name.empty())
+     return false;
+ 
+   connection_pool->set_database(db_name);
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
+   try
+ #else
+   std::auto_ptr<std::exception> error;
+ #endif // GLIBMM_EXCEPTIONS_ENABLED
    {
-     delete m_dialog_progress_creating;
-     m_dialog_progress_creating = 0;
+     connection_pool->set_ready_to_connect(); //This has succeeded already.
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
+     sharedptr<SharedConnection> sharedconnection = connection_pool->connect();
+ #else
+     sharedptr<SharedConnection> sharedconnection = connection_pool->connect(error);
+     if(!error.get())
+     {
+ #endif // GLIBMM_EXCEPTIONS_ENABLED
+       g_warning("Application::recreate_database_from_example(): Failed because database exists already.");
+ 
+       return false; //Connection to the database succeeded, because no exception was thrown. so the database exists already.
+ #ifndef GLIBMM_EXCEPTIONS_ENABLED
+     }
+ #endif // !GLIBMM_EXCEPTIONS_ENABLED
+   }
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
+   catch(const ExceptionConnection& ex)
+   {
+ #else
+   if(error.get())
+   {
+     const ExceptionConnection* exptr = dynamic_cast<ExceptionConnection*>(error.get());
+     if(exptr)
+     {
+       const ExceptionConnection& ex = *exptr;
+ #endif // GLIBMM_EXCEPTIONS_ENABLED
+       if(ex.get_failure_type() == ExceptionConnection::FAILURE_NO_SERVER)
+       {
+         user_cancelled = true; //Eventually, the user will cancel after retrying.
+         g_warning("Application::recreate_database_from_example(): Failed because connection to server failed, without specifying a database.");
+         return false;
+       }
+ #ifndef GLIBMM_EXCEPTIONS_ENABLED
+     }
+ #endif // !GLIBMM_EXCEPTIONS_ENABLED
+ 
+     //Otherwise continue, because we _expected_ connect() to fail if the db does not exist yet.
+   }
+ 
+   //Show the user that something is happening, because the INSERTS might take time.
+   //TOOD: This doesn't actually show up until near the end, even with Gtk::Main::instance()->iteration().
+   Dialog_ProgressCreating* dialog_progress_temp = 0;
+   Utils::get_glade_widget_derived_with_warning(dialog_progress_temp);
+   dialog_progress_temp->set_message(_("Creating Glom Database"), _("Creating Glom database from example file."));
+   std::auto_ptr<Dialog_ProgressCreating> dialog_progress(dialog_progress_temp); //Put the dialog in an auto_ptr so that it will be deleted (and hidden) when the current function returns.
+ 
+   dialog_progress->set_transient_for(*this);
+   dialog_progress->show();
+ 
+   //Ensure that the dialog is shown, instead of waiting for the application to be idle:
+   while(Gtk::Main::instance()->events_pending())
+     Gtk::Main::instance()->iteration();
+ 
+   dialog_progress->pulse();
+ 
+   //Create the database: (This will show a connection dialog)
+   connection_pool->set_database( Glib::ustring() );
+   const bool db_created = m_pFrame->create_database(db_name, pDocument->get_database_title());
+ 
+   if(!db_created)
+   {
+     return false;
+   }
+   else
+     connection_pool->set_database(db_name); //Specify the new database when connecting from now on.
+ 
+   dialog_progress->pulse();
+   BusyCursor busy_cursor(this);
+ 
+   sharedptr<SharedConnection> sharedconnection;
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
+   try
+ #endif // GLIBMM_EXCEPTIONS_ENABLED
+   {
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
+     sharedconnection = connection_pool->connect();
+ #else
+     sharedconnection = connection_pool->connect(error);
+     if(!error.get())
+ #endif // GLIBMM_EXCEPTIONS_ENABLED
+       connection_pool->set_database(db_name); //The database was successfully created, so specify it when connecting from now on.
+   }
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
+   catch(const ExceptionConnection& ex)
+   {
+ #else
+   if(error.get())
+   {
+     const std::exception& ex = *error.get();
+ #endif // GLIBMM_EXCEPTIONS_ENABLED
+     g_warning("Application::recreate_database_from_example(): Failed to connect to the newly-created database.");
+     return false;
+   }
+ 
+   dialog_progress->pulse();
+ 
+   //Create the developer group, and make this user a member of it:
+   dialog_progress->pulse();
 -  bool test = m_pFrame->add_standard_groups();
++  bool test = DbUtils::add_standard_groups(pDocument);
+   if(!test)
+     return false;
+ 
+   //Add any extra groups from the example file:
+   dialog_progress->pulse();
 -  test = m_pFrame->add_groups_from_document();
++  test = DbUtils::add_groups_from_document(pDocument);
+   if(!test)
+     return false;
+ 
+   //Create each table:
+   Document::type_listTableInfo tables = pDocument->get_tables();
+   for(Document::type_listTableInfo::const_iterator iter = tables.begin(); iter != tables.end(); ++iter)
+   {
+     sharedptr<const TableInfo> table_info = *iter;
+ 
+     //Create SQL to describe all fields in this table:
+     Glib::ustring sql_fields;
+     Document::type_vec_fields fields = pDocument->get_table_fields(table_info->get_name());
+ 
+     dialog_progress->pulse();
 -    const bool table_creation_succeeded = m_pFrame->create_table(table_info, fields);
++    const bool table_creation_succeeded = DbUtils::create_table(table_info, fields);
+     dialog_progress->pulse();
+     if(!table_creation_succeeded)
+     {
+       g_warning("Application::recreate_database_from_example(): CREATE TABLE failed with the newly-created database.");
+       return false;
+     }
+   }
+ 
+   dialog_progress->pulse();
 -  m_pFrame->add_standard_tables(); //Add internal, hidden, tables.
++  DbUtils::add_standard_tables(pDocument); //Add internal, hidden, tables.
+ 
+   //Set table priviliges, using the groups we just added:
+   dialog_progress->pulse();
 -  test = m_pFrame->set_table_privileges_groups_from_document();
++  test = DbUtils::set_table_privileges_groups_from_document(pDocument);
+   if(!test)
+     return false;
+ 
+   for(Document::type_listTableInfo::const_iterator iter = tables.begin(); iter != tables.end(); ++iter)
+   {
+     sharedptr<const TableInfo> table_info = *iter;
+ 
+     //Add any example data to the table:
+     dialog_progress->pulse();
+ 
+     //try
+     //{
 -      const bool table_insert_succeeded = m_pFrame->insert_example_data(table_info->get_name());
++      const bool table_insert_succeeded = DbUtils::insert_example_data(pDocument, table_info->get_name());
+ 
+       if(!table_insert_succeeded)
+       {
+         g_warning("Application::recreate_database_from_example(): INSERT of example data failed with the newly-created database.");
+         return false;
+       }
+     //}
+     //catch(const std::exception& ex)
+     //{
+     //  std::cerr << "Application::recreate_database_from_example(): exception: " << ex.what() << std::endl;
+       //HandleError(ex);
+     //}
+ 
+   } //for(tables)
+ 
+   return true; //All tables created successfully.
+ }
+ 
+ bool Application::recreate_database_from_backup(const Glib::ustring& backup_uri, bool& user_cancelled)
+ {
+   //Create a database, based on the information in the current document:
+   Document* pDocument = static_cast<Document*>(get_document());
+   if(!pDocument)
+     return false;
+ 
+   ConnectionPool* connection_pool = ConnectionPool::get_instance();
+   if(!connection_pool)
+     return false; //Impossible anyway.
+ 
+   //Check whether the database exists already.
+   const Glib::ustring db_name = pDocument->get_connection_database();
+   if(db_name.empty())
+     return false;
+ 
+   connection_pool->set_database(db_name);
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
+   try
+ #else
+   std::auto_ptr<std::exception> error;
+ #endif // GLIBMM_EXCEPTIONS_ENABLED
+   {
+     connection_pool->set_ready_to_connect(); //This has succeeded already.
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
+     sharedptr<SharedConnection> sharedconnection = connection_pool->connect();
+ #else
+     sharedptr<SharedConnection> sharedconnection = connection_pool->connect(error);
+     if(!error.get())
+     {
+ #endif // GLIBMM_EXCEPTIONS_ENABLED
+       g_warning("Application::recreate_database_from_example(): Failed because database exists already.");
+ 
+       return false; //Connection to the database succeeded, because no exception was thrown. so the database exists already.
+ #ifndef GLIBMM_EXCEPTIONS_ENABLED
+     }
+ #endif // !GLIBMM_EXCEPTIONS_ENABLED
+   }
+ #ifdef GLIBMM_EXCEPTIONS_ENABLED
+   catch(const ExceptionConnection& ex)
+   {
+ #else
+   if(error.get())
+   {
+     const ExceptionConnection* exptr = dynamic_cast<ExceptionConnection*>(error.get());
+     if(exptr)
+     {
+       const ExceptionConnection& ex = *exptr;
+ #endif // GLIBMM_EXCEPTIONS_ENABLED
+       if(ex.get_failure_type() == ExceptionConnection::FAILURE_NO_SERVER)
+       {
+         user_cancelled = true; //Eventually, the user will cancel after retrying.
+         g_warning("Application::recreate_database_from_example(): Failed because connection to server failed, without specifying a database.");
+         return false;
+       }
+ #ifndef GLIBMM_EXCEPTIONS_ENABLED
+     }
+ #endif // !GLIBMM_EXCEPTIONS_ENABLED
+ 
+     //Otherwise continue, because we _expected_ connect() to fail if the db does not exist yet.
+   }
+ 
+   //Show the user that something is happening, because the INSERTS might take time.
+   //TOOD: This doesn't actually show up until near the end, even with Gtk::Main::instance()->iteration().
+   Dialog_ProgressCreating* dialog_progress_temp = 0;
+   Utils::get_glade_widget_derived_with_warning(dialog_progress_temp);
+   dialog_progress_temp->set_message(_("Creating Glom Database"), _("Creating Glom database from backup file."));
+   std::auto_ptr<Dialog_ProgressCreating> dialog_progress(dialog_progress_temp); //Put the dialog in an auto_ptr so that it will be deleted (and hidden) when the current function returns.
+ 
+   dialog_progress->set_transient_for(*this);
+   dialog_progress->show();
+ 
+   //Ensure that the dialog is shown, instead of waiting for the application to be idle:
+   while(Gtk::Main::instance()->events_pending())
+     Gtk::Main::instance()->iteration();
+ 
+   dialog_progress->pulse();
+ 
+   //Create the database: (This will show a connection dialog)
+   connection_pool->set_database( Glib::ustring() );
+   try
+   {
+     ConnectionPool::get_instance()->create_database(db_name);
+   }
+   catch(const Glib::Exception& ex) // libgda does not set error domain
+   {
+     std::cerr << G_STRFUNC << ": Gnome::Gda::Connection::create_database(" << db_name << ") failed: " << ex.what() << std::endl;
+ 
+     //Tell the user:
+     Gtk::Dialog* dialog = 0;
+     Utils::get_glade_widget_with_warning("glom_developer.glade", "dialog_error_create_database", dialog);
+     dialog->set_transient_for(*this);
+     Glom::Utils::dialog_run_with_help(dialog, "dialog_error_create_database");
+     delete dialog;
+ 
+     return false;
+   }
+ 
+   connection_pool->set_database(db_name); //Specify the new database when connecting from now on.
+ 
+   //Create the developer group, and make this user a member of it:
+   dialog_progress->pulse();
 -  bool test = m_pFrame->add_standard_groups();
++  bool test = DbUtils::add_standard_groups(pDocument);
+   if(!test)
+     return false;
+ 
+   //Add any extra groups from the example file:
+   dialog_progress->pulse();
 -  test = m_pFrame->add_groups_from_document();
++  test = DbUtils::add_groups_from_document(pDocument);
+   if(!test)
+     return false;
+ 
+   //dialog_progress->pulse();
+   //m_pFrame->add_standard_tables(); //Add internal, hidden, tables.
+ 
+   //Restore the backup into the database:
+   std::string original_dir_path;
+ 
+   Glib::RefPtr<Gio::File> gio_file = Gio::File::create_for_uri(backup_uri);
+   if(gio_file)
+   {
+     Glib::RefPtr<Gio::File> parent = gio_file->get_parent();
+     if(parent)
+     {
+       try
+       {
+         original_dir_path = Glib::filename_from_uri(parent->get_uri());
+       }
+       catch(const Glib::Error& ex)
+       {
+         std::cerr << G_STRFUNC << ": Glib::filename_from_uri() failed: " << ex.what() << std::endl;
+       }
+     }
+   }
+ 
+   if(original_dir_path.empty())
+   {
+     std::cerr << G_STRFUNC << ": original_dir_path is empty." << std::endl;
+     return false;
    }
-  
-   return result; //All tables created successfully.
+ 
+   //Restore the database from the backup:
+   //std::cout << "DEBUG: original_dir_path=" << original_dir_path << std::endl;
+   const bool restored = connection_pool->convert_backup(
+     sigc::mem_fun(*this, &Application::on_connection_convert_backup_progress), original_dir_path);
+ 
+   if(m_dialog_progess_convert_backup)
+   {
+     delete m_dialog_progess_convert_backup;
+     m_dialog_progess_convert_backup = 0;
+   }
+ 
+   if(!restored)
+   {
+     std::cerr << G_STRFUNC << ": Restore failed." << std::endl;
+     return false;
+   }
+ 
+   return true; //Restore successfully.
  }
  #endif // !GLOM_ENABLE_CLIENT_ONLY
  
diff --cc glom/application.h
index c075d15,706932d..af54244
--- a/glom/application.h
+++ b/glom/application.h
@@@ -178,8 -188,8 +188,10 @@@ private
  
    Document* on_connection_pool_get_document();
  
-   bool recreate_database(); //return indicates success.
+   bool recreate_database_from_example(bool& user_cancelled); //return indicates success.
+   bool recreate_database_from_backup(const Glib::ustring& backup_uri, bool& user_cancelled); //return indicates success.
 +  void on_recreate_database_progress();
++
    void stop_self_hosting_of_document_database();
  
    void on_connection_avahi_begin();
@@@ -257,8 -269,8 +271,11 @@@
    Document::HostingMode m_ui_save_extra_newdb_hosting_mode;
  
    Gtk::MessageDialog* m_avahi_progress_dialog;
 +
 +  Dialog_ProgressCreating* m_dialog_progress_creating;
+   Dialog_ProgressCreating* m_dialog_progess_save_backup;
+   Dialog_ProgressCreating* m_dialog_progess_convert_backup;
++
  #endif // !GLOM_ENABLE_CLIENT_ONLY
  
    // This is set to the URI of an example file that is loaded to be able to
diff --cc glom/base_db.h
index 7bc2c04,b758022..baadd32
--- a/glom/base_db.h
+++ b/glom/base_db.h
@@@ -74,16 -71,52 +74,15 @@@ public
    virtual void set_document(Document* pDocument); //View override
    virtual void load_from_document(); //View override
  
 -  typedef std::vector< sharedptr<Field> > type_vec_fields;
 -  typedef std::vector< sharedptr<const Field> > type_vec_const_fields;
 -
 -  static type_vec_fields get_fields_for_table_from_database(const Glib::ustring& table_name, bool including_system_fields = false);
 -  static bool get_field_exists_in_database(const Glib::ustring& table_name, const Glib::ustring& field_name);
 -
 +  static int count_rows_returned_by(const Glib::RefPtr<Gnome::Gda::SqlBuilder>& sql_query);
  
- #ifndef GLOM_ENABLE_CLIENT_ONLY
 -  /** Execute a SQL Select command, returning the result.
 -   * This method handles any Gda exceptions caused by executing the command.
 -   */
 -  static Glib::RefPtr<Gnome::Gda::DataModel> query_execute_select(const Glib::ustring& strQuery,
 -                                                                  const Glib::RefPtr<Gnome::Gda::Set>& params = Glib::RefPtr<Gnome::Gda::Set>(0));
 -
 -
 -  /** Execute a SQL non-select command, returning true if it succeeded.
 -   * This method handles any Gda exceptions caused by executing the command.
 -   */
 -  static bool query_execute(const Glib::ustring& strQuery,
 -                            const Glib::RefPtr<Gnome::Gda::Set>& params = Glib::RefPtr<Gnome::Gda::Set>(0));
 +  sharedptr<Field> change_column(const Glib::ustring& table_name, const sharedptr<const Field>& field_old, const sharedptr<const Field>& field, Gtk::Window* parent_window) const;
  
 -  static int count_rows_returned_by(const Glib::ustring& sql_query);
 +  typedef std::vector< sharedptr<Field> > type_vec_fields;
 +  typedef std::vector< sharedptr<const Field> > type_vec_const_fields;
  
+ #ifndef GLOM_ENABLE_CLIENT_ONLY
 -  bool add_standard_groups();
 -  bool add_groups_from_document();
 -  bool add_standard_tables() const;
 -
 -  bool create_table(const sharedptr<const TableInfo>& table_info, const Document::type_vec_fields& fields) const;
 -  bool create_table_add_missing_fields(const sharedptr<const TableInfo>& table_info, const Document::type_vec_fields& fields) const;
 -  bool set_table_privileges_groups_from_document();
 -
 -  /// Also saves the table information in the document:
 -  bool create_table_with_default_fields(const Glib::ustring& table_name);
 -
 -  // TODO: Should these functions update the document, so callers don't need
 -  // to do it?
 -  bool add_column(const Glib::ustring& table_name, const sharedptr<const Field>& field, Gtk::Window* parent_window) const;
 -
 -  bool drop_column(const Glib::ustring& table_name, const Glib::ustring& field_name, Gtk::Window* parent_window) const;
 -
 -  sharedptr<Field> change_column(const Glib::ustring& table_name, const sharedptr<const Field>& field_old, const sharedptr<const Field>& field, Gtk::Window* parent_window) const;
 -
    bool change_columns(const Glib::ustring& table_name, const type_vec_const_fields& old_fields, type_vec_fields& fields, Gtk::Window* parent_window) const;
--
 -  bool insert_example_data(const Glib::ustring& table_name) const;
 -
  #endif //GLOM_ENABLE_CLIENT_ONLY
  
    //TODO: This is not a very good place for this function.
diff --cc glom/libglom/db_utils.cc
index 2bd3852,0000000..9c60840
mode 100644,000000..100644
--- a/glom/libglom/db_utils.cc
+++ b/glom/libglom/db_utils.cc
@@@ -1,1714 -1,0 +1,1806 @@@
 +/* Glom
 + *
 + * Copyright (C) 2001-2010 Murray Cumming
 + *
 + * 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 <libglom/db_utils.h>
 +#include <libglom/connectionpool.h>
 +#include <libglom/data_structure/glomconversions.h>
 +#include <libglom/standard_table_prefs_fields.h>
 +#include <libglom/privs.h>
 +#include <libglom/data_structure/parameternamegenerator.h>
 +#include <libglom/utils.h>
 +#include <libgda/libgda.h> // For gda_g_type_from_string
 +#include <glibmm/i18n.h>
 +
 +namespace Glom
 +{
 +
 +namespace DbUtils
 +{
 +
 +static Glib::RefPtr<Gnome::Gda::Connection> get_connection()
 +{
 +
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +  sharedptr<SharedConnection> sharedconnection;
 +  try
 +  {
 +     sharedconnection = ConnectionPool::get_and_connect();
 +  }
 +  catch (const Glib::Error& error)
 +  {
 +    std::cerr << "get_connection(): " << error.what() << std::endl;
 +  }
 +#else
 +  std::auto_ptr<ExceptionConnection> error;
 +  sharedptr<SharedConnection> sharedconnection = ConnectionPool::get_and_connect(error);
 +  if(error.get())
 +  {
 +    std::cerr << "get_connection(): " << error->what() << std::endl;
 +    // TODO: Rethrow?
 +  }
 +#endif
 +
 +  if(!sharedconnection)
 +  {
 +    std::cerr << "get_connection(): No connection yet." << std::endl;
 +    return Glib::RefPtr<Gnome::Gda::Connection>(0);
 +  }
 +
 +  Glib::RefPtr<Gnome::Gda::Connection> gda_connection = sharedconnection->get_gda_connection();
 +
 +  return gda_connection;
 +}
 +
 +/** Update GDA's information about the table structure, such as the
 +  * field list and their types.
 +  * Call this whenever changing the table structure, for instance with an ALTER query.
 +  * This may take a few seconds to return.
 +  */
 +static void update_gda_metastore_for_table(const Glib::ustring& table_name)
 +{
 +  Glib::RefPtr<Gnome::Gda::Connection> gda_connection = get_connection();
 +  if(!gda_connection)
 +  {
 +    std::cerr << "update_gda_metastore_for_table(): No gda_connection." << std::endl;
 +    return;
 +  }
 +
 +  if(table_name.empty())
 +  {
 +    std::cerr << "update_gda_metastore_for_table(): table_name is empty." << std::endl;
 +    return;
 +  }
 +
 +  //std::cout << "DEBUG: update_gda_metastore_for_table(): Calling Gda::Connection::update_meta_store_table(" << table_name << ") ..." << std::endl;
 +  //TODO: This doesn't seem to quite work yet:
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +  gda_connection->update_meta_store_table(table_name);
 +#else
 +  std::auto_ptr<Glib::Error> update_error;
 +  gda_connection->update_meta_store_table(table_name, Glib::ustring(), update_error);
 +#endif
 +
 +  //This does work, though it takes ages: gda_connection->update_meta_store();
 +  //std::cout << "DEBUG: update_gda_metastore_for_table(): ... Finished calling Gda::Connection::update_meta_store_table()" << std::endl;
 +}
 +
 +bool create_database(Document* document, const Glib::ustring& database_name, const Glib::ustring& title, const sigc::slot<void>& progress)
 +{
 +#if 1
 +  // This seems to increase the chance that the database creation does not
 +  // fail due to the "source database is still in use" error. armin.
 +  //std::cout << "Going to sleep" << std::endl;
 +  Glib::usleep(500 * 1000);
 +  //std::cout << "Awake" << std::endl;
 +#endif
 +
 +  progress();
 +
 +  try
 +  {
 +    ConnectionPool::get_instance()->create_database(database_name);
 +  }
 +  catch(const Glib::Exception& ex) // libgda does not set error domain
 +  {
 +    std::cerr << "create_database():  Gnome::Gda::Connection::create_database(" << database_name << ") failed: " << ex.what() << std::endl;
 +
 +    return false;
 +  }
 +
 +  progress();
 +
 +  //Connect to the actual database:
 +  ConnectionPool* connection_pool = ConnectionPool::get_instance();
 +  connection_pool->set_database(database_name);
 +
 +  progress();
 +
 +  sharedptr<SharedConnection> sharedconnection;
 +  try
 +  {
 +    sharedconnection = connection_pool->connect();
 +  }
 +  catch(const Glib::Exception& ex)
 +  {
 +    std::cerr << "create_database(): Could not connect to just-created database. exception caught:" << ex.what() << std::endl;
 +    return false;
 +  }
 +  catch(const std::exception& ex)
 +  {
 +    std::cerr << "create_database(): Could not connect to just-created database. exception caught:" << ex.what() << std::endl;
 +    return false;
 +  }
 +
 +  if(sharedconnection)
 +  {
 +    progress();
 +
 +    bool test = add_standard_tables(document); //Add internal, hidden, tables.
 +    if(!test)
 +      return false;
 +
 +    progress();
 +
 +    //Create the developer group, and make this user a member of it:
 +    //If we got this far then the user must really have developer privileges already:
 +    test = add_standard_groups(document);
 +    if(!test)
 +      return false;
 +
 +    progress();
 +
 +    //std::cout << "create_database(): Creation of standard tables and groups finished." << std::endl;
 +
 +    //Set the title based on the title in the example document, or the user-supplied title when creating new documents:
 +    SystemPrefs prefs = get_database_preferences(document);
 +    if(prefs.m_name.empty())
 +    {
 +      //std::cout << "create_database(): Setting title in the database." << std::endl;
 +      prefs.m_name = title;
 +      set_database_preferences(document, prefs);
 +    }
 +    else
 +    {
 +      //std::cout << "create_database(): database has title: " << prefs.m_name << std::endl;
 +    }
 +
 +    progress();
 +
 +    return true;
 +  }
 +  else
 +  {
 +    std::cerr << "create_database(): Could not connect to just-created database." << std::endl;
 +    return false;
 +  }
 +}
 +
 +bool recreate_database_from_document(Document* document, const sigc::slot<void>& progress)
 +{
 + ConnectionPool* connection_pool = ConnectionPool::get_instance();
 +  if(!connection_pool)
 +    return false; //Impossible anyway.
 +
 +  //Check whether the database exists already.
 +  const Glib::ustring db_name = document->get_connection_database();
 +  if(db_name.empty())
 +    return false;
 +
 +  connection_pool->set_database(db_name);
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +  try
 +#else
 +  std::auto_ptr<std::exception> error;
 +#endif // GLIBMM_EXCEPTIONS_ENABLED
 +  {
 +    connection_pool->set_ready_to_connect(); //This has succeeded already.
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +    sharedptr<SharedConnection> sharedconnection = connection_pool->connect();
 +#else
 +    sharedptr<SharedConnection> sharedconnection = connection_pool->connect(error);
 +    if(!error.get())
 +    {
 +#endif // GLIBMM_EXCEPTIONS_ENABLED
 +      g_warning("Application::recreate_database(): Failed because database exists already.");
 +
 +      return false; //Connection to the database succeeded, because no exception was thrown. so the database exists already.
 +#ifndef GLIBMM_EXCEPTIONS_ENABLED
 +    }
 +#endif // !GLIBMM_EXCEPTIONS_ENABLED
 +  }
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +  catch(const ExceptionConnection& ex)
 +  {
 +#else
 +  if(error.get())
 +  {
 +    const ExceptionConnection* exptr = dynamic_cast<ExceptionConnection*>(error.get());
 +    if(exptr)
 +    {
 +      const ExceptionConnection& ex = *exptr;
 +#endif // GLIBMM_EXCEPTIONS_ENABLED
 +      if(ex.get_failure_type() == ExceptionConnection::FAILURE_NO_SERVER)
 +      {
 +        g_warning("Application::recreate_database(): Failed because connection to server failed even without specifying a database.");
 +        return false;
 +      }
 +#ifndef GLIBMM_EXCEPTIONS_ENABLED
 +    }
 +#endif // !GLIBMM_EXCEPTIONS_ENABLED
 +
 +    //Otherwise continue, because we _expected_ connect() to fail if the db does not exist yet.
 +  }
 +
 +
 +  //Create the database: (This will show a connection dialog)
 +  progress();
 +  connection_pool->set_database( Glib::ustring() );
 +  const bool db_created = create_database(document, db_name, document->get_database_title(), progress);
 +
 +  if(!db_created)
 +  {
 +    return false;
 +  }
 +  else
 +    connection_pool->set_database(db_name); //Specify the new database when connecting from now on.
 +
 +  progress();
 +
 +  sharedptr<SharedConnection> sharedconnection;
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +  try
 +#endif // GLIBMM_EXCEPTIONS_ENABLED
 +  {
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +    sharedconnection = connection_pool->connect();
 +#else
 +    sharedconnection = connection_pool->connect(error);
 +    if(!error.get())
 +#endif // GLIBMM_EXCEPTIONS_ENABLED
 +      connection_pool->set_database(db_name); //The database was successfully created, so specify it when connecting from now on.
 +  }
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +  catch(const ExceptionConnection& ex)
 +  {
 +#else
 +  if(error.get())
 +  {
 +    const std::exception& ex = *error.get();
 +#endif // GLIBMM_EXCEPTIONS_ENABLED
 +    g_warning("Application::recreate_database(): Failed to connect to the newly-created database.");
 +    return false;
 +  }
 +
 +  progress();
 +
 +  //Create each table:
 +  Document::type_listTableInfo tables = document->get_tables();
 +  for(Document::type_listTableInfo::const_iterator iter = tables.begin(); iter != tables.end(); ++iter)
 +  {
 +    sharedptr<const TableInfo> table_info = *iter;
 +
 +    //Create SQL to describe all fields in this table:
 +    Glib::ustring sql_fields;
 +    Document::type_vec_fields fields = document->get_table_fields(table_info->get_name());
 +
 +    progress();
 +    const bool table_creation_succeeded = create_table(table_info, fields);
 +    progress();
 +    if(!table_creation_succeeded)
 +    {
 +      g_warning("Application::recreate_database(): CREATE TABLE failed with the newly-created database.");
 +      return false;
 +    }
 +  }
 +
 +  progress();
 +  add_standard_tables(document); //Add internal, hidden, tables.
 +
 +  //Create the developer group, and make this user a member of it:
 +  //If we got this far then the user must really have developer privileges already:
 +  progress();
 +  const bool test = add_standard_groups(document);
 +  if(!test)
 +    return false;
 +
 +  for(Document::type_listTableInfo::const_iterator iter = tables.begin(); iter != tables.end(); ++iter)
 +  {
 +    sharedptr<const TableInfo> table_info = *iter;
 +
 +    //Add any example data to the table:
 +    progress();
 +
 +    //try
 +    //{
 +      const bool table_insert_succeeded = insert_example_data(document, table_info->get_name());
 +
 +      if(!table_insert_succeeded)
 +      {
 +        g_warning("Application::recreate_database(): INSERT of example data failed with the newly-created database.");
 +        return false;
 +      }
 +    //}
 +    //catch(const std::exception& ex)
 +    //{
 +    //  std::cerr << "Application::recreate_database(): exception: " << ex.what() << std::endl;
 +      //HandleError(ex);
 +    //}
 +
 +  } //for(tables)
 +
 +  return true; //All tables created successfully.
 +}
 +
 +
 +SystemPrefs get_database_preferences(Document* document)
 +{
 +  //if(get_userlevel() == AppState::USERLEVEL_DEVELOPER)
 +  //  add_standard_tables(document);
 +
 +  SystemPrefs result;
 +
 +  //Check that the user is allowed to even view this table:
 +  //TODO_moved:
 +  //Privileges table_privs = Glom::Privs::get_current_privs(GLOM_STANDARD_TABLE_PREFS_TABLE_NAME);
 +  //if(!table_privs.m_view)
 +  //  return result;
 +
 +  const bool optional_org_logo = get_field_exists_in_database(GLOM_STANDARD_TABLE_PREFS_TABLE_NAME, GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_LOGO);
 +
 +  Glib::RefPtr<Gnome::Gda::SqlBuilder> builder =
 +    Gnome::Gda::SqlBuilder::create(Gnome::Gda::SQL_STATEMENT_SELECT);
 +  builder->select_add_target(GLOM_STANDARD_TABLE_PREFS_TABLE_NAME);
 +
 +  builder->select_add_field(GLOM_STANDARD_TABLE_PREFS_FIELD_NAME, GLOM_STANDARD_TABLE_PREFS_TABLE_NAME);
 +  builder->select_add_field(GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_NAME, GLOM_STANDARD_TABLE_PREFS_TABLE_NAME);
 +  builder->select_add_field(GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_ADDRESS_STREET, GLOM_STANDARD_TABLE_PREFS_TABLE_NAME);
 +  builder->select_add_field(GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_ADDRESS_STREET2, GLOM_STANDARD_TABLE_PREFS_TABLE_NAME);
 +  builder->select_add_field(GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_ADDRESS_TOWN, GLOM_STANDARD_TABLE_PREFS_TABLE_NAME);
 +  builder->select_add_field(GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_ADDRESS_COUNTY, GLOM_STANDARD_TABLE_PREFS_TABLE_NAME);
 +  builder->select_add_field(GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_ADDRESS_COUNTRY, GLOM_STANDARD_TABLE_PREFS_TABLE_NAME);
 +  builder->select_add_field(GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_ADDRESS_POSTCODE, GLOM_STANDARD_TABLE_PREFS_TABLE_NAME);
 +
 +  if(optional_org_logo)
 +  {
 +    builder->select_add_field(GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_LOGO, GLOM_STANDARD_TABLE_PREFS_TABLE_NAME);
 +  }
 +
 +  int attempts = 0;
 +  while(attempts < 2)
 +  {
 +    bool succeeded = true;
 +    #ifdef GLIBMM_EXCEPTIONS_ENABLED
 +    try
 +    {
 +      //const std::string full_query = Utils::sqlbuilder_get_full_query(builder);
 +      Glib::RefPtr<Gnome::Gda::DataModel> datamodel = query_execute_select(builder);
 +      if(datamodel && (datamodel->get_n_rows() != 0))
 +      {
 +        result.m_name = Conversions::get_text_for_gda_value(Field::TYPE_TEXT, datamodel->get_value_at(0, 0));
 +        result.m_org_name = Conversions::get_text_for_gda_value(Field::TYPE_TEXT, datamodel->get_value_at(1, 0));
 +        result.m_org_address_street = Conversions::get_text_for_gda_value(Field::TYPE_TEXT, datamodel->get_value_at(2, 0));
 +        result.m_org_address_street2 = Conversions::get_text_for_gda_value(Field::TYPE_TEXT, datamodel->get_value_at(3, 0));
 +        result.m_org_address_town = Conversions::get_text_for_gda_value(Field::TYPE_TEXT, datamodel->get_value_at(4, 0));
 +        result.m_org_address_county = Conversions::get_text_for_gda_value(Field::TYPE_TEXT, datamodel->get_value_at(5, 0));
 +        result.m_org_address_country = Conversions::get_text_for_gda_value(Field::TYPE_TEXT, datamodel->get_value_at(6, 0));
 +        result.m_org_address_postcode = Conversions::get_text_for_gda_value(Field::TYPE_TEXT, datamodel->get_value_at(7, 0));
 +
 +        //We need to be more clever about these column indexes if we add more new fields:
 +        if(optional_org_logo)
 +          result.m_org_logo = datamodel->get_value_at(8, 0);
 +      }
 +      else
 +        succeeded = false;
 +    }
 +    catch(const Glib::Exception& ex)
 +    {
 +      std::cerr << "get_database_preferences(): exception: " << ex.what() << std::endl;
 +      succeeded = false;
 +    }
 +    catch(const std::exception& ex)
 +    {
 +      std::cerr << "get_database_preferences(): exception: " << ex.what() << std::endl;
 +      succeeded = false;
 +    }
 +    #else // GLIBMM_EXCEPTIONS_ENABLED
 +    std::auto_ptr<Glib::Error> error;
 +    Glib::RefPtr<Gnome::Gda::DataModel> datamodel = query_execute_select(sql_query);
 +    if(datamodel && (datamodel->get_n_rows() != 0))
 +    {
 +      result.m_name = Conversions::get_text_for_gda_value(Field::TYPE_TEXT, datamodel->get_value_at(0, 0, error));
 +      result.m_org_name = Conversions::get_text_for_gda_value(Field::TYPE_TEXT, datamodel->get_value_at(1, 0, error));
 +      result.m_org_address_street = Conversions::get_text_for_gda_value(Field::TYPE_TEXT, datamodel->get_value_at(2, 0, error));
 +      result.m_org_address_street2 = Conversions::get_text_for_gda_value(Field::TYPE_TEXT, datamodel->get_value_at(3, 0, error));
 +      result.m_org_address_town = Conversions::get_text_for_gda_value(Field::TYPE_TEXT, datamodel->get_value_at(4, 0, error));
 +      result.m_org_address_county = Conversions::get_text_for_gda_value(Field::TYPE_TEXT, datamodel->get_value_at(5, 0, error));
 +      result.m_org_address_country = Conversions::get_text_for_gda_value(Field::TYPE_TEXT, datamodel->get_value_at(6, 0, error));
 +      result.m_org_address_postcode = Conversions::get_text_for_gda_value(Field::TYPE_TEXT, datamodel->get_value_at(7, 0, error));
 +
 +      //We need to be more clever about these column indexes if we add more new fields:
 +      if(optional_org_logo)
 +        result.m_org_logo = datamodel->get_value_at(8, 0, error);
 +    }
 +    else
 +      succeeded = false;
 +
 +    if (error.get())
 +    {
 +      std::cerr << "Error: " << error->what() << std::endl;
 +      succeeded = false;
 +    }
 +    #endif
 +    //Return the result, or try again:
 +    if(succeeded)
 +      return result;
 +    else
 +    {
 +      add_standard_tables(document);
 +      ++attempts; //Try again now that we have tried to create the table.
 +    }
 +  }
 +
 +  return result;
 +}
 +
 +
 +void set_database_preferences(Document* document, const SystemPrefs& prefs)
 +{
 +   //The logo field was introduced in a later version of Glom.
 +  //If the user is not in developer mode then the new field has not yet been added:
 +
 +  Glib::RefPtr<Gnome::Gda::SqlBuilder> builder = Gnome::Gda::SqlBuilder::create(Gnome::Gda::SQL_STATEMENT_UPDATE);
 +  builder->set_table(GLOM_STANDARD_TABLE_PREFS_TABLE_NAME);
 +  builder->add_field_value(GLOM_STANDARD_TABLE_PREFS_FIELD_NAME, prefs.m_name);
 +  builder->add_field_value(GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_ADDRESS_STREET, prefs.m_org_address_street);
 +  builder->add_field_value(GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_ADDRESS_STREET2, prefs.m_org_address_street2);
 +  builder->add_field_value(GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_ADDRESS_TOWN, prefs.m_org_address_town);
 +  builder->add_field_value(GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_ADDRESS_COUNTY, prefs.m_org_address_county);
 +  builder->add_field_value(GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_ADDRESS_COUNTRY, prefs.m_org_address_country);
 +  builder->add_field_value(GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_ADDRESS_POSTCODE, prefs.m_org_address_postcode);
 +  if(get_field_exists_in_database(GLOM_STANDARD_TABLE_PREFS_TABLE_NAME, GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_LOGO))
 +  {
 +    builder->add_field_value(GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_LOGO, prefs.m_org_logo);
 +  }
 +  builder->set_where(builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
 +                                       builder->add_field_id(GLOM_STANDARD_TABLE_PREFS_FIELD_ID, GLOM_STANDARD_TABLE_PREFS_TABLE_NAME),
 +                                       builder->add_expr(1)));
 +  const bool test = query_execute(builder);
 +
 +  if(!test)
 +    std::cerr << "set_database_preferences(): UPDATE failed." << std::endl;
 +
 +  //Set some information in the document too, so we can use it to recreate the database:
 +  document->set_database_title(prefs.m_name);
 +}
 +
 +
 +bool add_standard_tables(Document* document)
 +{
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +  try
 +#endif // GLIBMM_EXCEPTIONS_ENABLED
 +  {
 +    Document::type_vec_fields pref_fields;
 +    sharedptr<TableInfo> prefs_table_info = Document::create_table_system_preferences(pref_fields);
 +
 +    //Name, address, etc:
 +    if(!get_table_exists_in_database(GLOM_STANDARD_TABLE_PREFS_TABLE_NAME))
 +    {
 +      const bool test = create_table(prefs_table_info, pref_fields);
 +
 +      if(test)
 +      {
 +        //Add the single record:
 +        Glib::RefPtr<Gnome::Gda::SqlBuilder> builder = Gnome::Gda::SqlBuilder::create(Gnome::Gda::SQL_STATEMENT_INSERT);
 +        builder->set_table(GLOM_STANDARD_TABLE_PREFS_TABLE_NAME);
 +        builder->add_field_value(GLOM_STANDARD_TABLE_PREFS_FIELD_ID, 1);
 +        const bool test = query_execute(builder);
 +        if(!test)
 +          std::cerr << "add_standard_tables(): INSERT failed." << std::endl;
 +
 +        //Use the database title from the document, if there is one:
 +        const Glib::ustring system_name = document->get_database_title();
 +        if(!system_name.empty())
 +        {
 +          Glib::RefPtr<Gnome::Gda::SqlBuilder> builder = Gnome::Gda::SqlBuilder::create(Gnome::Gda::SQL_STATEMENT_UPDATE);
 +          builder->set_table(GLOM_STANDARD_TABLE_PREFS_TABLE_NAME);
 +          builder->add_field_value(GLOM_STANDARD_TABLE_PREFS_FIELD_NAME, system_name);
 +          builder->set_where(builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
 +                                               builder->add_field_id(GLOM_STANDARD_TABLE_PREFS_FIELD_ID, GLOM_STANDARD_TABLE_PREFS_TABLE_NAME),
 +                                               builder->add_expr(1)));
 +          const bool test = query_execute(builder);
 +          if(!test)
 +            std::cerr << "add_standard_tables(): UPDATE failed." << std::endl;
 +        }
 +      }
 +      else
 +      {
 +        g_warning("add_standard_tables(): create_table(prefs) failed.");
 +        return false;
 +      }
 +    }
 +    else
 +    {
 +      //Make sure that it has all the fields it should have,
 +      //because we sometimes add some in new Glom versions:
 +      create_table_add_missing_fields(prefs_table_info, pref_fields);
 +    }
 +
 +    //Auto-increment next values:
 +    if(!get_table_exists_in_database(GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME))
 +    {
 +      sharedptr<TableInfo> table_info(new TableInfo());
 +      table_info->set_name(GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME);
 +      table_info->set_title("System: Auto Increments"); //TODO: Provide standard translations.
 +      table_info->m_hidden = true;
 +
 +      Document::type_vec_fields fields;
 +
 +      sharedptr<Field> primary_key(new Field()); //It's not used, because there's only one record, but we must have one.
 +      primary_key->set_name(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_ID);
 +      primary_key->set_glom_type(Field::TYPE_NUMERIC);
 +      fields.push_back(primary_key);
 +
 +      sharedptr<Field> field_table_name(new Field());
 +      field_table_name->set_name(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_TABLE_NAME);
 +      field_table_name->set_glom_type(Field::TYPE_TEXT);
 +      fields.push_back(field_table_name);
 +
 +      sharedptr<Field> field_field_name(new Field());
 +      field_field_name->set_name(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_FIELD_NAME);
 +      field_field_name->set_glom_type(Field::TYPE_TEXT);
 +      fields.push_back(field_field_name);
 +
 +      sharedptr<Field> field_next_value(new Field());
 +      field_next_value->set_name(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_NEXT_VALUE);
 +      field_next_value->set_glom_type(Field::TYPE_TEXT);
 +      fields.push_back(field_next_value);
 +
 +      const bool test = create_table(table_info, fields);
 +      if(!test)
 +      {
 +        g_warning("add_standard_tables(): create_table(autoincrements) failed.");
 +        return false;
 +      }
 +
 +      return true;
 +    }
 +    else
 +    {
 +      return false;
 +    }
 +  }
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +  catch(const Glib::Exception& ex)
 +  {
 +    std::cerr << "add_standard_tables(): caught exception: " << ex.what() << std::endl;
 +    return false;
 +  }
 +  catch(const std::exception& ex)
 +  {
 +    std::cerr << "add_standard_tables(): caught exception: " << ex.what() << std::endl;
 +    return false;
 +  }
 +#endif // GLIBMM_EXCEPTIONS_ENABLED
 +}
 +
 +bool add_standard_groups(Document* document)
 +{
 +  //Add the glom_developer group if it does not exist:
 +  const Glib::ustring devgroup = GLOM_STANDARD_GROUP_NAME_DEVELOPER;
 +
 +  Glib::RefPtr<Gnome::Gda::Connection> gda_connection = get_connection();
 +  if(!gda_connection)
 +  {
 +    std::cerr << "add_standard_groups(): No connection yet." << std::endl;
 +  }
 +
 +  // If the connection doesn't support users we can skip this step
 +  if(gda_connection->supports_feature(Gnome::Gda::CONNECTION_FEATURE_USERS))
 +  {
 +    const type_vec_strings vecGroups = Glom::Privs::get_database_groups();
 +    type_vec_strings::const_iterator iterFind = std::find(vecGroups.begin(), vecGroups.end(), devgroup);
 +    if(iterFind == vecGroups.end())
 +    {
 +      //The "SUPERUSER" here has no effect because SUPERUSER is not "inherited" to member users.
 +      //But let's keep it to make the purpose of this group obvious.
 +      bool test = query_execute_string("CREATE GROUP \"" GLOM_STANDARD_GROUP_NAME_DEVELOPER "\" WITH SUPERUSER");
 +      if(!test)
 +      {
 +        std::cerr << "Glom add_standard_groups(): CREATE GROUP failed when adding the developer group." << std::endl;
 +        return false;
 +      }
 +
 +      //Make sure the current user is in the developer group.
 +      //(If he is capable of creating these groups then he is obviously a developer, and has developer rights on the postgres server.)
 +      const Glib::ustring current_user = ConnectionPool::get_instance()->get_user();
 +      const Glib::ustring strQuery = "ALTER GROUP \"" GLOM_STANDARD_GROUP_NAME_DEVELOPER "\" ADD USER \"" + current_user + "\"";
 +      test = query_execute_string(strQuery);
 +      if(!test)
 +      {
 +        std::cerr << "Glom add_standard_groups(): ALTER GROUP failed when adding the user to the developer group." << std::endl;
 +        return false;
 +      }
 +
 +      std::cout << "DEBUG: Added user " << current_user << " to glom developer group on postgres server." << std::endl;
 +
 +      Privileges priv_devs;
 +      priv_devs.m_view = true;
 +      priv_devs.m_edit = true;
 +      priv_devs.m_create = true;
 +      priv_devs.m_delete = true;
 +
 +      Document::type_listTableInfo table_list = document->get_tables(true /* including system prefs */);
 +
 +      for(Document::type_listTableInfo::const_iterator iter = table_list.begin(); iter != table_list.end(); ++iter)
 +      {
 +        sharedptr<const TableInfo> table_info = *iter;
 +        if(table_info)
 +        {
 +          const Glib::ustring table_name = table_info->get_name();
 +          if(get_table_exists_in_database(table_name)) //Maybe the table has not been created yet.
 +            Glom::Privs::set_table_privileges(devgroup, table_name, priv_devs, true /* developer privileges */);
 +        }
 +      }
 +
 +      //Make sure that it is in the database too:
 +      GroupInfo group_info;
 +      group_info.set_name(GLOM_STANDARD_GROUP_NAME_DEVELOPER);
 +      group_info.m_developer = true;
 +      document->set_group(group_info);
 +    }
 +  }
 +  else
 +  {
 +    std::cout << "DEBUG: Connection does not support users" << std::endl;
 +  }
 +
 +  return true;
 +}
 +
++bool add_groups_from_document(Document* document)
++{
++  Glib::RefPtr<Gnome::Gda::Connection> gda_connection = get_connection();
++  if(!gda_connection)
++  {
++    std::cerr << "add_standard_groups(): No connection yet." << std::endl;
++  }
++
++  //Get the list of groups from the database server:
++  const type_vec_strings database_groups = Privs::get_database_groups();
++
++  //Get the list of groups from the document:
++  const Document::type_list_groups document_groups = document->get_groups();
++
++  //Add each group if it doesn't exist yet:
++  for(Document::type_list_groups::const_iterator iter = document_groups.begin();
++    iter != document_groups.end(); ++iter)
++  {
++    const GroupInfo& group = *iter;
++    const Glib::ustring name = group.get_name();
++
++    //See if the group exists in the database:
++    type_vec_strings::const_iterator iterFind = std::find(database_groups.begin(), database_groups.end(), name);
++    if(!name.empty() && iterFind == database_groups.end())
++    {
++      Glib::ustring query = "CREATE GROUP \"" + name  + "\"";
++
++      //The "SUPERUSER" here has no effect because SUPERUSER is not "inherited" to member users.
++      //But let's keep it to make the purpose of this group obvious.
++      if(group.m_developer)
++        query += " WITH SUPERUSER";
++
++      const bool test = query_execute_string(query);
++      if(!test)
++      {
++        std::cerr << G_STRFUNC << ": CREATE GROUP failed when adding the group with name=" << name << std::endl;
++        return false;
++      }
++    }
++  }
++
++  return true;
++}
++
++bool set_table_privileges_groups_from_document(Document* document)
++{
++  Glib::RefPtr<Gnome::Gda::Connection> gda_connection = get_connection();
++  if(!gda_connection)
++  {
++    std::cerr << "add_standard_groups(): No connection yet." << std::endl;
++  }
++
++  //Get the list of groups from the database server:
++  const type_vec_strings database_groups = Privs::get_database_groups();
++
++  //Get the list of groups from the document:
++  const Document::type_list_groups document_groups = document->get_groups();
++
++  //Get the list of tables:
++  const Document::type_listTableInfo table_list = document->get_tables();
++
++  bool result = true;
++
++  for(Document::type_list_groups::const_iterator iter = document_groups.begin();
++    iter != document_groups.end(); ++iter)
++  {
++    const GroupInfo& group_info = *iter;
++    const Glib::ustring group_name = group_info.get_name();
++
++    //See if the group exists in the database:
++    type_vec_strings::const_iterator iterFind = std::find(database_groups.begin(), database_groups.end(), group_name);
++    if(!group_name.empty() && iterFind == database_groups.end())
++    {
++      std::cerr << G_STRFUNC << ": group does not exist in the database. group name=" << group_name << std::endl;
++      result = false;
++      continue;
++    }
++
++    //Look at each table privilege for this group:
++    for(GroupInfo::type_map_table_privileges::const_iterator iter = group_info.m_map_privileges.begin();
++      iter != group_info.m_map_privileges.end(); ++iter)
++    {
++      const Glib::ustring table_name = iter->first;
++      const Privileges& privs = iter->second;
++
++      //Set the table privilege for the group:
++      Privs::set_table_privileges(group_name, table_name, privs, group_info.m_developer);
++    }
++  }
++
++  return result;
++}
 +
 +namespace { //anonymous
 +
 +//If the string has quotes around it, remove them
 +static Glib::ustring remove_quotes(const Glib::ustring& str)
 +{
 +  const gchar* quote = "\"";
 +  const Glib::ustring::size_type posQuoteStart = str.find(quote);
 +  if(posQuoteStart != 0)
 +    return str;
 +
 +  const Glib::ustring::size_type size = str.size();
 +  const Glib::ustring::size_type posQuoteEnd = str.find(quote, 1);
 +  if(posQuoteEnd != (size - 1))
 +    return str;
 +
 +  return str.substr(1, size - 2);
 +}
 +
 +} //anonymous namespace
 +
 +static bool meta_table_column_is_primary_key(GdaMetaTable* meta_table, const Glib::ustring column_name)
 +{
 +  if(!meta_table)
 +    return false;
 +
 +  for(GSList* item = meta_table->columns; item != 0; item = item->next)
 +  {
 +    GdaMetaTableColumn* column = GDA_META_TABLE_COLUMN(item->data);
 +    if(!column)
 +      continue;
 +
 +    if(column->column_name && (column_name == remove_quotes(column->column_name)))
 +      return column->pkey;
 +  }
 +
 +  return false;
 +}
 +
 +bool handle_error()
 +{
 +  return ConnectionPool::handle_error_cerr_only();
 +}
 +
 +void handle_error(const Glib::Exception& ex)
 +{
 +  std::cerr << "Internal Error (handle_error()): exception type=" << typeid(ex).name() << ", ex.what()=" << ex.what() << std::endl;
 +
 +  //TODO_Moved:
 +  //Gtk::MessageDialog dialog(Utils::bold_message(_("Internal error")), true, Gtk::MESSAGE_WARNING );
 +  //dialog.set_secondary_text(ex.what());
 +  //TODO: dialog.set_transient_for(*get_application());
 +  //dialog.run();
 +}
 +
 +void handle_error(const std::exception& ex)
 +{
 +  std::cerr << "Internal Error (handle_error()): exception type=" << typeid(ex).name() << ", ex.what()=" << ex.what() << std::endl;
 +
 + //TODO_Moved:
 +#ifdef GLOM_ENABLE_MAEMO
 +  //Hildon::Note dialog(Hildon::NOTE_TYPE_INFORMATION, ex.what());
 +#else
 +  //Gtk::MessageDialog dialog(Utils::bold_message(_("Internal error")), true, Gtk::MESSAGE_WARNING );
 +  //dialog.set_secondary_text(ex.what());
 +  //TODO: dialog.set_transient_for(*get_application());
 +#endif
 +  //dialog.run();
 +}
 +
 +
 +bool get_field_exists_in_database(const Glib::ustring& table_name, const Glib::ustring& field_name)
 +{
 +  type_vec_fields vecFields = get_fields_for_table_from_database(table_name);
 +  type_vec_fields::const_iterator iterFind = std::find_if(vecFields.begin(), vecFields.end(), predicate_FieldHasName<Field>(field_name));
 +  return iterFind != vecFields.end();
 +}
 +
 +type_vec_fields get_fields_for_table_from_database(const Glib::ustring& table_name, bool /* including_system_fields */)
 +{
 +  type_vec_fields result;
 +
 +  if(table_name.empty())
 +    return result;
 +
 +  // These are documented here:
 +  // http://library.gnome.org/devel/libgda-4.0/3.99/connection.html#GdaConnectionMetaTypeHead
 +  enum GlomGdaDataModelFieldColumns
 +  {
 +    DATAMODEL_FIELDS_COL_NAME = 0,
 +    DATAMODEL_FIELDS_COL_TYPE = 1,
 +    DATAMODEL_FIELDS_COL_GTYPE = 2,
 +    DATAMODEL_FIELDS_COL_SIZE = 3,
 +    DATAMODEL_FIELDS_COL_SCALE = 4,
 +    DATAMODEL_FIELDS_COL_NOTNULL = 5,
 +    DATAMODEL_FIELDS_COL_DEFAULTVALUE = 6,
 +    DATAMODEL_FIELDS_COL_EXTRA = 6 // Could be auto-increment
 +  };
 +
 +  //TODO: BusyCursor busy_cursor(get_application());
 +
 +  {
 +    Glib::RefPtr<Gnome::Gda::Connection> connection = get_connection();
 +    if(!connection)
 +    {
 +      std::cerr << "get_fields_for_table_from_database(): connection is null" << std::endl;
 +      return result;
 +    }
 +
 +    Glib::RefPtr<Gnome::Gda::Holder> holder_table_name = Gnome::Gda::Holder::create(G_TYPE_STRING, "name");
 +    gchar* quoted_table_name_c = gda_meta_store_sql_identifier_quote(table_name.c_str(), connection->gobj());
 +    g_assert(quoted_table_name_c);
 +    Glib::ustring quoted_table_name(quoted_table_name_c);
 +    g_free (quoted_table_name_c);
 +    quoted_table_name_c = 0;
 +
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +    holder_table_name->set_value(quoted_table_name);
 +#else
 +    std::auto_ptr<Glib::Error> error;
 +    holder_table_name->set_value(quoted_table_name, error);
 +#endif
 +
 +    std::list< Glib::RefPtr<Gnome::Gda::Holder> > holder_list;
 +    holder_list.push_back(holder_table_name);
 +
 +    Glib::RefPtr<Gnome::Gda::DataModel> data_model_fields;
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +    try
 +    {
 +      data_model_fields = connection->get_meta_store_data(Gnome::Gda::CONNECTION_META_FIELDS, holder_list);
 +    }
 +    catch(const Gnome::Gda::MetaStoreError& ex)
 +    {
 +      std::cerr << "get_fields_for_table_from_database(): MetaStoreError: " << ex.what() << std::endl;
 +    }
 +    catch(const Glib::Error& ex)
 +    {
 +      std::cerr << "get_fields_for_table_from_database(): Error: " << ex.what() << std::endl;
 +    }
 +#else
 +    data_model_fields = connection->get_meta_store_data(Gnome::Gda::CONNECTION_META_FIELDS, holder_list, error);
 +
 +    // Ignore error, data_model_fields presence is checked below
 +#endif
 +
 +
 +    if(!data_model_fields)
 +    {
 +      std::cerr << "get_fields_for_table_from_database(): libgda reported empty fields schema data_model for the table." << std::endl;
 +    }
 +    else if(data_model_fields->get_n_columns() == 0)
 +    {
 +      std::cerr << "get_fields_for_table_from_database(): libgda reported 0 fields for the table." << std::endl;
 +    }
 +    else if(data_model_fields->get_n_rows() == 0)
 +    {
 +      g_warning("get_fields_for_table_from_database(): table_name=%s, data_model_fields->get_n_rows() == 0: The table probably does not exist in the specified database.", table_name.c_str());
 +    }
 +    else
 +    {
 +      //We also use the GdaMetaTable to discover primary keys.
 +      //Both these libgda APIs are awful, and it's awful that we must use two APIs. murrayc.
 +      Glib::RefPtr<Gnome::Gda::MetaStore> store = connection->get_meta_store();
 +      Glib::RefPtr<Gnome::Gda::MetaStruct> metastruct =
 +        Gnome::Gda::MetaStruct::create(store, Gnome::Gda::META_STRUCT_FEATURE_NONE);
 +      GdaMetaDbObject* meta_dbobject = 0;
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +      try
 +      {
 +        meta_dbobject = metastruct->complement(Gnome::Gda::META_DB_TABLE,
 +          Gnome::Gda::Value(), /* catalog */
 +          Gnome::Gda::Value(), /* schema */
 +          Gnome::Gda::Value(quoted_table_name)); //It's a static instance inside the MetaStore.
 +      }
 +      catch(const Glib::Error& ex)
 +      {
 +        handle_error(ex);
 +        //TODO: Really fail.
 +      }
 +#else
 +      std::auto_ptr<Glib::Error> ex;
 +      meta_dbobject = metastruct->complement(Gnome::Gda::META_DB_TABLE,
 +        Gnome::Gda::Value(), /* catalog */
 +        Gnome::Gda::Value(), /* schema */
 +        Gnome::Gda::Value(quoted_table_name), ex); //It's a static instance inside the MetaStore.
 +       if(error.get())
 +       {
 +         handle_error(*ex);
 +       }
 +#endif //GLIBMM_EXCEPTIONS_ENABLED
 +      GdaMetaTable* meta_table = GDA_META_TABLE(meta_dbobject);
 +
 +      //Examine each field:
 +      guint row = 0;
 +      const guint rows_count = data_model_fields->get_n_rows();
 +      while(row < rows_count)
 +      {
 +        Glib::RefPtr<Gnome::Gda::Column> field_info = Gnome::Gda::Column::create();
 +
 +        //Get the field name:
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED //TODO: Actually catch exceptions.
 +        Gnome::Gda::Value value_name = data_model_fields->get_value_at(DATAMODEL_FIELDS_COL_NAME, row);
 +#else
 +        std::auto_ptr<Glib::Error> value_error;
 +        Gnome::Gda::Value value_name = data_model_fields->get_value_at(DATAMODEL_FIELDS_COL_NAME, row, value_error);
 +#endif
 +        if(value_name.get_value_type() ==  G_TYPE_STRING)
 +        {
 +          if(value_name.get_string().empty())
 +            g_warning("get_fields_for_table_from_database(): value_name is empty.");
 +
 +          Glib::ustring field_name = value_name.get_string(); //TODO: get_string() is a dodgy choice. murrayc.
 +          field_name = remove_quotes(field_name);
 +          field_info->set_name(field_name);
 +          //std::cout << "  debug: field_name=" << field_name << std::endl;
 +        }
 +
 +        //Get the field type:
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +        Gnome::Gda::Value value_fieldtype = data_model_fields->get_value_at(DATAMODEL_FIELDS_COL_GTYPE, row);
 +#else
 +        Gnome::Gda::Value value_fieldtype = data_model_fields->get_value_at(DATAMODEL_FIELDS_COL_GTYPE, row, value_error);
 +#endif
 +        if(value_fieldtype.get_value_type() ==  G_TYPE_STRING)
 +        {
 +          const Glib::ustring type_string = value_fieldtype.get_string();
 +          const GType gdatype = gda_g_type_from_string(type_string.c_str());
 +          field_info->set_g_type(gdatype);
 +        }
 +
 +
 +        //Get the default value:
 +        /* libgda does not return this correctly yet. TODO: check bug http://bugzilla.gnome.org/show_bug.cgi?id=143576
 +        Gnome::Gda::Value value_defaultvalue = data_model_fields->get_value_at(DATAMODEL_FIELDS_COL_DEFAULTVALUE, row);
 +        if(value_defaultG_VALUE_TYPE(value.gobj()) ==  G_TYPE_STRING)
 +          field_info->set_default_value(value_defaultvalue);
 +        */
 +
 +        //Get whether it can be null:
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +        Gnome::Gda::Value value_notnull = data_model_fields->get_value_at(DATAMODEL_FIELDS_COL_NOTNULL, row);
 +#else
 +        Gnome::Gda::Value value_notnull = data_model_fields->get_value_at(DATAMODEL_FIELDS_COL_NOTNULL, row, value_error);
 +#endif
 +        if(value_notnull.get_value_type() ==  G_TYPE_BOOLEAN)
 +          field_info->set_allow_null(value_notnull.get_boolean());
 +
 +
 +        sharedptr<Field> field = sharedptr<Field>::create(); //TODO: Get glom-specific information from the document?
 +        field->set_field_info(field_info);
 +
 +
 +        //Get whether it is a primary key:
 +        field->set_primary_key(
 +          meta_table_column_is_primary_key(meta_table, field_info->get_name()) );
 +
 +        result.push_back(field);
 +
 +        ++row;
 +      }
 +    }
 +  }
 +
 +  if(result.empty())
 +  {
 +    //g_warning("get_fields_for_table_from_database(): returning empty result.");
 +  }
 +
 +  //Hide system fields.
 +  type_vec_fields::iterator iterFind = std::find_if(result.begin(), result.end(), predicate_FieldHasName<Field>(GLOM_STANDARD_FIELD_LOCK));
 +  if(iterFind != result.end())
 +    result.erase(iterFind);
 +
 +  return result;
 +}
 +
 +//TODO_Performance: Avoid calling this so often.
 +//TODO: Put this in libgdamm.
 +type_vec_strings get_table_names_from_database(bool ignore_system_tables)
 +{
 +  type_vec_strings result;
 +
 +  {
 +    Glib::RefPtr<Gnome::Gda::Connection> gda_connection = get_connection();
 +
 +    Glib::RefPtr<Gnome::Gda::DataModel> data_model_tables;
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +    try
 +    {
 +      data_model_tables = gda_connection->get_meta_store_data(Gnome::Gda::CONNECTION_META_TABLES);
 +    }
 +    catch(const Gnome::Gda::MetaStoreError& ex)
 +    {
 +      std::cerr << "get_table_names_from_database(): MetaStoreError: " << ex.what() << std::endl;
 +    }
 +    catch(const Glib::Error& ex)
 +    {
 +      std::cerr << "get_table_names_from_database(): Error: " << ex.what() << std::endl;
 +    }
 +#else
 +    std::auto_ptr<Glib::Error> error;
 +    data_model_tables = gda_connection->get_meta_store_data(Gnome::Gda::CONNECTION_META_TABLES, error);
 +    // Ignore error, data_model_tables presence is checked below
 +#endif
 +
 +    if(data_model_tables && (data_model_tables->get_n_columns() == 0))
 +    {
 +      std::cerr << "get_table_names_from_database(): libgda reported 0 tables for the database." << std::endl;
 +    }
 +    else if(data_model_tables)
 +    {
 +      //std::cout << "debug: data_model_tables refcount=" << G_OBJECT(data_model_tables->gobj())->ref_count << std::endl;
 +      const int rows = data_model_tables->get_n_rows();
 +      for(int i = 0; i < rows; ++i)
 +      {
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +        const Gnome::Gda::Value value = data_model_tables->get_value_at(0, i);
 +#else
 +        const Gnome::Gda::Value value = data_model_tables->get_value_at(0, i, error);
 +#endif
 +        //Get the table name:
 +        Glib::ustring table_name;
 +        if(G_VALUE_TYPE(value.gobj()) ==  G_TYPE_STRING)
 +        {
 +          table_name = value.get_string();
 +
 +          //The table names have quotes sometimes. See http://bugzilla.gnome.org/show_bug.cgi?id=593154
 +          table_name = remove_quotes(table_name);
 +
 +          //TODO: Unescape the string with gda_server_provider_unescape_string()?
 +
 +          //std::cout << "DEBUG: Found table: " << table_name << std::endl;
 +
 +          if(ignore_system_tables)
 +          {
 +            //Check whether it's a system table:
 +            const Glib::ustring prefix = "glom_system_";
 +            const Glib::ustring table_prefix = table_name.substr(0, prefix.size());
 +            if(table_prefix == prefix)
 +              continue;
 +          }
 +
 +          //Ignore the pga_* tables that pgadmin adds when you use it:
 +          if(table_name.substr(0, 4) == "pga_")
 +            continue;
 +
 +          //Ignore the pg_* tables that something (Postgres? libgda?) adds:
 +          //Not needed now that this was fixed again in libgda-4.0.
 +          //if(table_name.substr(0, 14) == "pg_catalog.pg_")
 +          //  continue;
 +
 +          //Ignore the information_schema tables that something (libgda?) adds:
 +          //Not needed now that this was fixed again in libgda-4.0.
 +          //if(table_name.substr(0, 23) == "information_schema.sql_")
 +          //  continue;
 +
 +          result.push_back(table_name);
 +        }
 +      }
 +    }
 +  }
 +
 +  return result;
 +}
 +
 +bool get_table_exists_in_database(const Glib::ustring& table_name)
 +{
 +  //TODO_Performance
 +
 +  type_vec_strings tables = get_table_names_from_database();
 +  type_vec_strings::const_iterator iterFind = std::find(tables.begin(), tables.end(), table_name);
 +  return (iterFind != tables.end());
 +}
 +
 +
 +bool create_table_with_default_fields(Document* document, const Glib::ustring& table_name)
 +{
 +  if(table_name.empty())
 +    return false;
 +
 +  Glib::RefPtr<Gnome::Gda::Connection> gda_connection = get_connection();
 +  if(!gda_connection)
 +  {
 +    std::cerr << "create_table_with_default_fields(): No connection yet." << std::endl;
 +    return false;
 +  }
 +
 +  bool created = false;
 +
 +  //Primary key:
 +  sharedptr<Field> field_primary_key(new Field());
 +  field_primary_key->set_name(table_name + "_id");
 +  field_primary_key->set_title(table_name + " ID");
 +  field_primary_key->set_primary_key();
 +  field_primary_key->set_auto_increment();
 +
 +  Glib::RefPtr<Gnome::Gda::Column> field_info = field_primary_key->get_field_info();
 +  field_info->set_allow_null(false);
 +  field_primary_key->set_field_info(field_info);
 +
 +  field_primary_key->set_glom_type(Field::TYPE_NUMERIC);
 +  //std::cout << "field_primary_key->get_auto_increment():" << field_primary_key->get_auto_increment() << std::endl;
 +
 +  type_vec_fields fields;
 +  fields.push_back(field_primary_key);
 +
 +  //Description:
 +  sharedptr<Field> field_description(new Field());
 +  field_description->set_name("description");
 +  field_description->set_title(_("Description")); //Use a translation, because the original locale will be marked as non-English if the current locale is non-English.
 +  field_description->set_glom_type(Field::TYPE_TEXT);
 +  fields.push_back(field_description);
 +
 +  //Comments:
 +  sharedptr<Field> field_comments(new Field());
 +  field_comments->set_name("comments");
 +  field_comments->set_title(_("Comments"));
 +  field_comments->set_glom_type(Field::TYPE_TEXT);
 +  field_comments->m_default_formatting.set_text_format_multiline();
 +  fields.push_back(field_comments);
 +
 +  sharedptr<TableInfo> table_info(new TableInfo());
 +  table_info->set_name(table_name);
 +  table_info->set_title( Utils::title_from_string( table_name ) ); //Start with a title that might be appropriate.
 +
 +  created = create_table(table_info, fields);
 +
 +    //Create a table with 1 "ID" field:
 +   //MSYQL:
 +    //query_execute( "CREATE TABLE \"" + table_name + "\" (" + primary_key_name + " INT NOT NULL AUTO_INCREMENT PRIMARY KEY)" );
 +    //query_execute( "INSERT INTO \"" + table_name + "\" VALUES (0)" );
 +
 +    //PostgresSQL:
 +    //query_execute( "CREATE TABLE \"" + table_name + "\" (\"" + primary_key_name + "\" serial NOT NULL  PRIMARY KEY)" );
 +
 +    //query_execute( "CREATE TABLE \"" + table_name + "\" (" +
 +    //  field_primary_key->get_name() + " numeric NOT NULL  PRIMARY KEY," +
 +    //  extra_field_description + "varchar, " +
 +    //  extra_field_comments + "varchar" +
 +    //  ")" );
 +
 +  if(created)
 +  {
 +    //Save the changes in the document:
 +    if(document)
 +    {
 +      document->add_table(table_info);
 +      document->set_table_fields(table_info->get_name(), fields);
 +    }
 +  }
 +
 +  return created;
 +}
 +bool create_table(const sharedptr<const TableInfo>& table_info, const Document::type_vec_fields& fields_in)
 +{
 +  //std::cout << "create_table(): " << table_info->get_name() << ", title=" << table_info->get_title() << std::endl;
 +
 +  bool table_creation_succeeded = false;
 +
 +
 +  Document::type_vec_fields fields = fields_in;
 +
 +  //Create the standard field too:
 +  //(We don't actually use this yet)
 +  if(std::find_if(fields.begin(), fields.end(), predicate_FieldHasName<Field>(GLOM_STANDARD_FIELD_LOCK)) == fields.end())
 +  {
 +    sharedptr<Field> field = sharedptr<Field>::create();
 +    field->set_name(GLOM_STANDARD_FIELD_LOCK);
 +    field->set_glom_type(Field::TYPE_TEXT);
 +    fields.push_back(field);
 +  }
 +
 +  //Create SQL to describe all fields in this table:
 +  Glib::ustring sql_fields;
 +  for(Document::type_vec_fields::const_iterator iter = fields.begin(); iter != fields.end(); ++iter)
 +  {
 +    //Create SQL to describe this field:
 +    sharedptr<Field> field = *iter;
 +
 +    //The field has no gda type, so we set that:
 +    //This usually comes from the database, but that's a bit strange.
 +    Glib::RefPtr<Gnome::Gda::Column> info = field->get_field_info();
 +    info->set_g_type( Field::get_gda_type_for_glom_type(field->get_glom_type()) );
 +    field->set_field_info(info); //TODO_Performance
 +
 +    Glib::ustring sql_field_description = "\"" + field->get_name() + "\" " + field->get_sql_type();
 +
 +    if(field->get_primary_key())
 +      sql_field_description += " NOT NULL  PRIMARY KEY";
 +
 +    //Append it:
 +    if(!sql_fields.empty())
 +      sql_fields += ", ";
 +
 +    sql_fields += sql_field_description;
 +  }
 +
 +  if(sql_fields.empty())
 +  {
 +    g_warning("create_table::create_table(): sql_fields is empty.");
 +  }
 +
 +  //Actually create the table
 +  try
 +  {
 +    //TODO: Escape the table name?
 +    //TODO: Use GDA_SERVER_OPERATION_CREATE_TABLE instead?
 +    table_creation_succeeded = query_execute_string( "CREATE TABLE \"" + table_info->get_name() + "\" (" + sql_fields + ");" );
 +    if(!table_creation_succeeded)
 +      std::cerr << "create_table(): CREATE TABLE failed." << std::endl;
 +  }
 +  catch(const ExceptionConnection& ex)
 +  {
 +    table_creation_succeeded = false;
 +  }
 +
 +  if(table_creation_succeeded)
 +  {
 +    // Update the libgda meta store, so that get_fields_for_table_from_database()
 +    // returns the fields correctly for the new table.
 +    update_gda_metastore_for_table(table_info->get_name());
 +
 +    // TODO: Maybe we should create the table directly via libgda instead of
 +    // executing an SQL query ourselves, so that libgda has the chance to
 +    // do this meta store update automatically.
 +    // (Yes, generally it would be nice to use libgda API instead of generating SQL. murrayc)
 +  }
 +
 +  return table_creation_succeeded;
 +}
 +
 +bool create_table_add_missing_fields(const sharedptr<const TableInfo>& table_info, const Document::type_vec_fields& fields)
 +{
 +  const Glib::ustring table_name = table_info->get_name();
 +
 +  for(Document::type_vec_fields::const_iterator iter = fields.begin(); iter != fields.end(); ++iter)
 +  {
 +    sharedptr<const Field> field = *iter;
 +    if(!get_field_exists_in_database(table_name, field->get_name()))
 +    {
 +      const bool test = add_column(table_name, field, 0); /* TODO: parent_window */
 +      if(!test)
 +       return test;
 +    }
 +  }
 +
 +  return true;
 +}
 +
 +
 +bool add_column(const Glib::ustring& table_name, const sharedptr<const Field>& field, Gtk::Window* /* parent_window */)
 +{
 +  ConnectionPool* connection_pool = ConnectionPool::get_instance();
 +
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +  try
 +  {
 +    connection_pool->add_column(table_name, field);
 +  }
 +  catch(const Glib::Error& ex)
 +  {
 +#else
 +  std::auto_ptr<Glib::Error> error;
 +  connection_pool->add_column(table_name, field, error);
 +  if(error.get())
 +  {
 +    const Glib::Error& ex = *error;
 +#endif
 +    handle_error(ex);
 +//    Gtk::MessageDialog window(*parent_window, Utils::bold_message(ex.what()), true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK);
 +//    window.run();
 +    return false;
 +  }
 +
 +  return true;
 +}
 +
 +bool drop_column(const Glib::ustring& table_name, const Glib::ustring& field_name)
 +{
 +  ConnectionPool* connection_pool = ConnectionPool::get_instance();
 +
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +  try
 +  {
 +    return connection_pool->drop_column(table_name, field_name);
 +  }
 +  catch(const Glib::Error& ex)
 +  {
 +#else
 +  std::auto_ptr<Glib::Error> error;
 +  connection_pool->add_column(table_name, field_name, error);
 +  if(error.get())
 +  {
 +    const Glib::Error& ex = *error;
 +#endif
 +    handle_error(ex);
 +//    Gtk::MessageDialog window(*parent_window, Utils::bold_message(ex.what()), true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK);
 +//    window.run();
 +    return false;
 +  }
 +
 +  return true;
 +}
 +
 +Gnome::Gda::Value get_next_auto_increment_value(const Glib::ustring& table_name, const Glib::ustring& field_name)
 +{
 +  const Gnome::Gda::Value result = DbUtils::auto_increment_insert_first_if_necessary(table_name, field_name);
 +  double num_result = Conversions::get_double_for_gda_value_numeric(result);
 +
 +
 +  //Increment the next_value:
 +  ++num_result;
 +  const Gnome::Gda::Value next_value = Conversions::parse_value(num_result);
 +
 +  Glib::RefPtr<Gnome::Gda::SqlBuilder> builder = Gnome::Gda::SqlBuilder::create(Gnome::Gda::SQL_STATEMENT_UPDATE);
 +  builder->set_table(GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME);
 +  builder->add_field_value_as_value(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_NEXT_VALUE, next_value);
 +  builder->set_where(builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_AND,
 +                                       builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
 +                                                         builder->add_field_id(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_TABLE_NAME, GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME),
 +                                                         builder->add_expr(table_name)),
 +                                       builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
 +                                                         builder->add_field_id(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_FIELD_NAME, GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME),
 +                                                         builder->add_expr(field_name))));
 +  const bool test = query_execute(builder);
 +  if(!test)
 +    std::cerr << "get_next_auto_increment_value(): Increment failed." << std::endl;
 +
 +  return result;
 +}
 +
 +Gnome::Gda::Value auto_increment_insert_first_if_necessary(const Glib::ustring& table_name, const Glib::ustring& field_name)
 +{
 +  Gnome::Gda::Value value;
 +
 +  //Check that the user is allowd to view and edit this table:
 +  Privileges table_privs = Privs::get_current_privs(GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME);
 +  if(!table_privs.m_view || !table_privs.m_edit)
 +  {
 +    //This should not happen:
 +    std::cerr << "Glom: auto_increment_insert_first_if_necessary(): The current user may not edit the autoincrements table. Any user who has create rights for a table should have edit rights to the autoincrements table." << std::endl;
 +  }
 +
 +  Glib::RefPtr<Gnome::Gda::SqlBuilder> builder =
 +    Gnome::Gda::SqlBuilder::create(Gnome::Gda::SQL_STATEMENT_SELECT);
 +  builder->select_add_field("next_value", GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME);
 +  builder->select_add_target(GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME);
 +  builder->set_where(
 +    builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_AND,
 +      builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
 +        builder->add_field_id(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_TABLE_NAME, GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME),
 +        builder->add_expr(table_name)),
 +      builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
 +        builder->add_field_id(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_FIELD_NAME, GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME),
 +        builder->add_expr(field_name))));
 +
 +  const Glib::RefPtr<const Gnome::Gda::DataModel> datamodel = query_execute_select(builder);
 +  if(!datamodel || (datamodel->get_n_rows() == 0))
 +  {
 +    //Start with zero:
 +
 +    //Insert the row if it's not there.
 +    builder = Gnome::Gda::SqlBuilder::create(Gnome::Gda::SQL_STATEMENT_INSERT);
 +    builder->set_table(GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME);
 +    builder->add_field_value(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_TABLE_NAME, table_name);
 +    builder->add_field_value(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_FIELD_NAME, field_name);
 +    builder->add_field_value(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_NEXT_VALUE, 0);
 +
 +    const bool test = query_execute(builder);
 +    if(!test)
 +      std::cerr << "auto_increment_insert_first_if_necessary(): INSERT of new row failed." << std::endl;
 +
 +    //GdaNumeric is a pain, so we take a short-cut:
 +    bool success = false;
 +    value = Conversions::parse_value(Field::TYPE_NUMERIC, "0", success, true /* iso_format */);
 +  }
 +  else
 +  {
 +    //Return the value so that a calling function does not need to do a second SELECT.
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +    const Gnome::Gda::Value actual_value = datamodel->get_value_at(0, 0);
 +#else
 +    std::auto_ptr<Glib::Error> value_error;
 +    const Gnome::Gda::Value actual_value = datamodel->get_value_at(0, 0, value_error);
 +#endif
 +    //But the caller wants a numeric value not a text value
 +    //(our system_autoincrements table has it as text, for future flexibility):
 +    const std::string actual_value_text = actual_value.get_string();
 +    bool success = false;
 +    value = Conversions::parse_value(Field::TYPE_NUMERIC, actual_value_text, success, true /* iso_format */);
 +  }
 +
 +  //std::cout << "auto_increment_insert_first_if_necessary: returning value of type=" << value.get_value_type() << std::endl;
 +  return value;
 +}
 +
 +/** Set the next auto-increment value in the glom system table, by examining all current values.
 + * Use this, for instance, after importing rows.
 + * Add a row for this field in the system table if it does not exist already.
 + */
 +static void recalculate_next_auto_increment_value(const Glib::ustring& table_name, const Glib::ustring& field_name)
 +{
 +  //Make sure that the row exists in the glom system table:
 +  auto_increment_insert_first_if_necessary(table_name, field_name);
 +
 +  //Get the max key value in the database:
 +  Glib::RefPtr<Gnome::Gda::SqlBuilder> builder = Gnome::Gda::SqlBuilder::create(Gnome::Gda::SQL_STATEMENT_SELECT);
 +  std::list<guint> args;
 +  args.push_back(builder->add_field_id(field_name, table_name));
 +  builder->add_field_value_id(builder->add_function("MAX", args));
 +  builder->select_add_target(table_name);
 +
 +  Glib::RefPtr<Gnome::Gda::DataModel> datamodel = query_execute_select(builder);
 +  if(datamodel && datamodel->get_n_rows() && datamodel->get_n_columns())
 +  {
 +    //Increment it:
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +    const Gnome::Gda::Value value_max = datamodel->get_value_at(0, 0); // A GdaNumeric.
 +#else
 +    std::auto_ptr<Glib::Error> error;
 +    const Gnome::Gda::Value value_max = datamodel->get_value_at(0, 0, error); // A GdaNumeric.
 +#endif
 +    double num_max = Conversions::get_double_for_gda_value_numeric(value_max);
 +    ++num_max;
 +
 +    //Set it in the glom system table:
 +    const Gnome::Gda::Value next_value = Conversions::parse_value(num_max);
 +
 +    builder.reset();
 +    builder = Gnome::Gda::SqlBuilder::create(Gnome::Gda::SQL_STATEMENT_UPDATE);
 +    builder->set_table(GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME);
 +    builder->add_field_value_as_value(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_NEXT_VALUE, next_value);
 +    builder->set_where(builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_AND,
 +                                         builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
 +                                                           builder->add_field_id(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_TABLE_NAME, GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME),
 +                                                           builder->add_expr(table_name)),
 +                                         builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
 +                                                           builder->add_field_id(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_FIELD_NAME, GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME),
 +                                                           builder->add_expr(field_name))));
 +
 +    const bool test = query_execute(builder);
 +    if(!test)
 +      std::cerr << "recalculate_next_auto_increment_value(): UPDATE failed." << std::endl;
 +  }
 +  else
 +    std::cerr << "recalculate_next_auto_increment_value(): SELECT MAX() failed." << std::endl;
 +}
 +
 +bool insert_example_data(Document* document, const Glib::ustring& table_name)
 +{
 +  //TODO_Performance: Avoid copying:
 +  const Document::type_example_rows example_rows = document->get_table_example_data(table_name);
 +  if(example_rows.empty())
 +  {
 +    //std::cout << "debug: insert_example_data(): No example data available." << std::endl;
 +    return true;
 +  }
 +
 +  Glib::RefPtr<Gnome::Gda::Connection> gda_connection = get_connection();
 +  if(!gda_connection)
 +  {
 +    std::cerr << "insert_example_data(): connection is null" << std::endl;
 +    return false;
 +  }
 +
 +  //std::cout << "debug: inserting example_rows for table: " << table_name << std::endl;
 +
 +  bool insert_succeeded = true;
 +
 +
 +  //Get field names:
 +  Document::type_vec_fields vec_fields = document->get_table_fields(table_name);
 +
 +  //Actually insert the data:
 +  //std::cout << "  debug: insert_example_data(): number of rows of data: " << vec_rows.size() << std::endl;
 +
 +  //std::cout << "DEBUG: example_row size = " << example_rows.size() << std::endl;
 +
 +  for(Document::type_example_rows::const_iterator iter = example_rows.begin(); iter != example_rows.end(); ++iter)
 +  {
 +    //Check that the row contains the correct number of columns.
 +    //This check will slow this down, but it seems useful:
 +    //TODO: This can only work if we can distinguish , inside "" and , outside "":
 +    const Document::type_row_data& row_data = *iter;
 +    if(row_data.empty())
 +      break;
 +
 +    //std::cout << "DEBUG: row_data size = " << row_data.size() << ", (fields size= " << vec_fields.size() << " )" << std::endl;
 +
 +    Glib::RefPtr<Gnome::Gda::SqlBuilder> builder = Gnome::Gda::SqlBuilder::create(Gnome::Gda::SQL_STATEMENT_INSERT);
 +    builder->set_table(table_name);
 +    for(unsigned int i = 0; i < row_data.size(); ++i) //TODO_Performance: Avoid calling size() so much.
 +    {
 +      //std::cout << "  DEBUG: i=" << i << ", row_data.size()=" << row_data.size() << std::endl;
 +
 +      sharedptr<Field> field = vec_fields[i];
 +      if(!field)
 +      {
 +        std::cerr << "insert_example_data(): field was null for field num=" << i << std::endl;
 +        break;
 +      }
 +
 +      builder->add_field_value(field->get_name(), row_data[i]);
 +    }
 +
 +    //Create and parse the SQL query:
 +    //After this, the Parser will know how many SQL parameters there are in
 +    //the query, and allow us to set their values.
 +
 +    insert_succeeded = query_execute(builder);
 +    if(!insert_succeeded)
 +      break;
 +  }
 +
 +  for(Document::type_vec_fields::const_iterator iter = vec_fields.begin(); iter != vec_fields.end(); ++iter)
 +  {
 +    if((*iter)->get_auto_increment())
 +      recalculate_next_auto_increment_value(table_name, (*iter)->get_name());
 +  }
 +
 +  return insert_succeeded;
 +}
 +
 +//static:
 +Glib::RefPtr<Gnome::Gda::DataModel> query_execute_select(const Glib::RefPtr<const Gnome::Gda::SqlBuilder>& builder, bool use_cursor)
 +{
 +  Glib::RefPtr<Gnome::Gda::DataModel> result;
 +
 +  //TODO: BusyCursor busy_cursor(get_app_window());
 +
 +  Glib::RefPtr<Gnome::Gda::Connection> gda_connection = get_connection();
 +  if(!gda_connection)
 +  {
 +    std::cerr << "query_execute_select(): No connection yet." << std::endl;
 +    return result;
 +  }
 +
 +  //Debug output:
 +  if(builder && ConnectionPool::get_instance()->get_show_debug_output())
 +  {
 +    const std::string full_query = Utils::sqlbuilder_get_full_query(builder);
 +    std::cout << "Debug: query_execute_select():  " << full_query << std::endl;
 +  }
 +
 +  //TODO: Use DbUtils::query_execute().
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +  try
 +  {
 +    if(use_cursor)
 +    {
 +      //Specify the STATEMENT_MODEL_CURSOR, so that libgda only gets the rows that we actually use.
 +      result = gda_connection->statement_execute_select_builder(builder, Gnome::Gda::STATEMENT_MODEL_CURSOR_FORWARD);
 +    }
 +    else
 +      result = gda_connection->statement_execute_select_builder(builder);
 +  }
 +  catch(const Gnome::Gda::ConnectionError& ex)
 +  {
 +    std::cerr << "debug: query_execute_select(): ConnectionError: exception from statement_execute_select_builder(): " << ex.what() << std::endl;
 +  }
 +  catch(const Gnome::Gda::ServerProviderError& ex)
 +  {
 +    std::cerr << "debug: query_execute_select(): ServerProviderError: exception from statement_execute_select_builder(): code=" << ex.code() << "message=" << ex.what() << std::endl;
 +  }
 +  catch(const Gnome::Gda::SqlError& ex) //TODO: Make sure that statement_execute_select_builder() is documented as throwing this.
 +  {
 +    std::cerr << "debug: query_execute_select(): SqlError: exception from statement_execute_select_builder(): " << ex.what() << std::endl;
 +  }
 +  catch(const Glib::Error& ex)
 +  {
 +    std::cerr << "debug: query_execute_select(): Error (" << typeid(ex).name() << "): exception from statement_execute_select_builder(): " << ex.what() << std::endl;
 +  }
 +
 +#else
 +  if(use_cursor)
 +  {
 +    //Specify the STATEMENT_MODEL_CURSOR, so that libgda only gets the rows that we actually use.
 +    result = gda_connection->statement_execute_select_builder(builder, Gnome::Gda::STATEMENT_MODEL_CURSOR_FORWARD, ex);
 +  }
 +  else
 +    result = gda_connection->statement_execute_select_builder(builder, ex);
 +
 +  if(ex.get())
 +    std::cerr << "debug: query_execute_select(): Glib::Error from statement_execute_select_builder(): " << ex->what() << std::endl;
 +#endif //GLIBMM_EXCEPTIONS_ENABLED
 +
 +  if(!result)
 +  {
 +    const std::string full_query = Utils::sqlbuilder_get_full_query(builder);
 +    std::cerr << "Glom  query_execute_select(): Error while executing SQL: "
 +      << std::endl << "  " << full_query << std::endl << std::endl;
 +    handle_error();
 +  }
 +
 +  return result;
 +}
 +
 +bool query_execute_string(const Glib::ustring& strQuery, const Glib::RefPtr<Gnome::Gda::Set>& params)
 +{
 +  Glib::RefPtr<Gnome::Gda::Connection> gda_connection = get_connection();
 +  if(!gda_connection)
 +  {
 +    std::cerr << "query_execute(): No connection yet." << std::endl;
 +    return false;
 +  }
 +
 +  Glib::RefPtr<Gnome::Gda::SqlParser> parser = gda_connection->create_parser();
 +  Glib::RefPtr<Gnome::Gda::Statement> stmt;
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +  try
 +  {
 +    stmt = parser->parse_string(strQuery);
 +  }
 +  catch(const Gnome::Gda::SqlParserError& error)
 +  {
 +    std::cerr << "DEBUG: DbUtils::query_execute: SqlParserError: " << error.what() << std::endl;
 +    return false;
 +  }
 +#else
 +  std::auto_ptr<Glib::Error> sql_error;
 +  stmt = parser->parse_string(strQuery, sql_error);
 +  if(sql_error.get())
 +  {
 +    std::cerr << "DEBUG: DbUtils::query_execute: SqlParserError:" << sql_error->what() << std::endl;
 +    return false;
 +  }
 +#endif
 +
 +
 +  //Debug output:
 +  if(stmt && ConnectionPool::get_instance()->get_show_debug_output())
 +  {
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +    try
 +    {
 +      //TODO: full_query still seems to contain ## parameter names,
 +      //though it works for our SELECT queries in query_execute_select():
 +      const Glib::ustring full_query = stmt->to_sql(params);
 +      std::cerr << "Debug: query_execute(): " << full_query << std::endl;
 +    }
 +    catch(const Glib::Exception& ex)
 +    {
 +      std::cerr << "Debug: query string could not be converted to std::cout: " << ex.what() << std::endl;
 +    }
 +#else
 +    const Glib::ustring full_query = stmt->to_sql(params, sql_error);
 +    std::cerr << "Debug: query_execute(): " << full_query << std::endl;
 +    if (sql_error.get())
 +      std::cerr << "Debug: query string could not be converted to std::cout: " << sql_error->what() << std::endl;
 +#endif
 +  }
 +
 +
 +  int exec_retval = -1;
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +  try
 +  {
 +    exec_retval = gda_connection->statement_execute_non_select(stmt, params);
 +  }
 +  catch(const Glib::Error& error)
 +  {
 +    std::cerr << "DbUtils::query_execute: ConnectionError: " << error.what() << std::endl;
 +    const Glib::ustring full_query = stmt->to_sql(params);
 +    std::cerr << "  full_query: " << full_query << std::endl;
 +    return false;
 +  }
 +#endif
 +  return (exec_retval >= 0);
 +}
 +
 +bool query_execute(const Glib::RefPtr<const Gnome::Gda::SqlBuilder>& builder)
 +{
 +  Glib::RefPtr<Gnome::Gda::Connection> gda_connection = get_connection();
 +  if(!gda_connection)
 +  {
 +    std::cerr << "query_execute(): No connection yet." << std::endl;
 +    return false;
 +  }
 +
 +  //Debug output:
 +  if(builder && ConnectionPool::get_instance()->get_show_debug_output())
 +  {
 +    const std::string full_query = Utils::sqlbuilder_get_full_query(builder);
 +    std::cerr << "Debug: query_execute(): " << full_query << std::endl;
 +  }
 +
 +
 +  int exec_retval = -1;
 +#ifdef GLIBMM_EXCEPTIONS_ENABLED
 +  try
 +  {
 +    exec_retval = gda_connection->statement_execute_non_select_builder(builder);
 +  }
 +  catch(const Gnome::Gda::ConnectionError& ex)
 +  {
 +    std::cerr << "debug: query_execute_select(): ConnectionError: exception from statement_execute_non_select_builder(): " << ex.what() << std::endl;
 +    const std::string full_query = Utils::sqlbuilder_get_full_query(builder);
 +    std::cerr << "  full_query: " << full_query << std::endl;
 +    return false;
 +  }
 +  catch(const Gnome::Gda::ServerProviderError& ex)
 +  {
 +    std::cerr << "debug: query_execute_select(): ServerProviderError: exception from statement_execute_non_select_builder(): code=" << ex.code() << "message=" << ex.what() << std::endl;
 +    const std::string full_query = Utils::sqlbuilder_get_full_query(builder);
 +    std::cerr << "  full_query: " << full_query << std::endl;
 +    return false;
 +  }
 +  catch(const Gnome::Gda::SqlError& ex) //TODO: Make sure that statement_execute_non_select_builder() is documented as throwing this.
 +  {
 +    std::cerr << "debug: query_execute_select(): SqlError: exception from statement_execute_non_select_builder(): " << ex.what() << std::endl;
 +    const std::string full_query = Utils::sqlbuilder_get_full_query(builder);
 +    std::cerr << "  full_query: " << full_query << std::endl;
 +    return false;
 +  }
 +  catch(const Glib::Error& ex)
 +  {
 +    std::cerr << "debug: query_execute_select(): Error (" << typeid(ex).name() << "): exception from statement_execute_non_select_builder(): " << ex.what() << std::endl;
 +    return false;
 +  }
 +#else
 +  std::auto_ptr<Glib::Error> exec_error;
 +  exec_retval = gda_connection->statement_execute_non_select_builder(builder, exec_error);
 +  if(exec_error.get())
 +  {
 +    std::cerr << "DbUtils::query_execute: ConnectionError: " << exec_error->what() << std::endl;
 +    const std::string full_query = Utils::sqlbuilder_get_full_query(builder);
 +    std::cerr << "  full_query: " << full_query << std::endl;
 +    return false;
 +  }
 +#endif
 +  return (exec_retval >= 0);
 +}
 +
 +} //namespace DbUtils
 +
 +} //namespace Glom
diff --cc glom/libglom/db_utils.h
index 2690289,0000000..d9b98b4
mode 100644,000000..100644
--- a/glom/libglom/db_utils.h
+++ b/glom/libglom/db_utils.h
@@@ -1,109 -1,0 +1,111 @@@
 +/* Glom
 + *
 + * Copyright (C) 2001-2010 Murray Cumming
 + *
 + * 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.
 + */
 +
 +#ifndef GLOM_DB_UTILS_H
 +#define GLOM_DB_UTILS_H
 +
 +#include <libglom/document/document.h>
 +#include <libglom/data_structure/system_prefs.h>
 +
 +namespace Glom
 +{
 +
 +namespace DbUtils
 +{
 +
 +bool create_database(Document* document, const Glib::ustring& database_name, const Glib::ustring& title, const sigc::slot<void>& progress);
 +
 +bool recreate_database_from_document(Document* document, const sigc::slot<void>& progress);
 +
 +/** This creates the standard tables if necessary,
 + * filling them with some information from the document.
 + */
 +SystemPrefs get_database_preferences(Document* document);
 +
 +void set_database_preferences(Document* document, const SystemPrefs& prefs);
 +
 +bool add_standard_tables(Document* document);
 +
 +bool add_standard_groups(Document* document);
++bool add_groups_from_document(Document* document);
++bool set_table_privileges_groups_from_document(Document* document);
 +
 +typedef std::vector< sharedptr<Field> > type_vec_fields;
 +type_vec_fields get_fields_for_table_from_database(const Glib::ustring& table_name, bool including_system_fields = false);
 +bool get_field_exists_in_database(const Glib::ustring& table_name, const Glib::ustring& field_name);
 +
 +//TODO: Is this used directly?
 +typedef std::vector<Glib::ustring> type_vec_strings;
 +type_vec_strings get_table_names_from_database(bool ignore_system_tables = false);
 +
 +bool get_table_exists_in_database(const Glib::ustring& table_name);
 +
 +bool create_table(const sharedptr<const TableInfo>& table_info, const Document::type_vec_fields& fields);
 +
 +/// Also saves the table information in the document:
 +bool create_table_with_default_fields(Document* document, const Glib::ustring& table_name);
 +
 +bool create_table_add_missing_fields(const sharedptr<const TableInfo>& table_info, const Document::type_vec_fields& fields);
 +
 +// TODO: Should these functions update the document, so callers don't need
 +// to do it?
 +bool add_column(const Glib::ustring& table_name, const sharedptr<const Field>& field, Gtk::Window* parent_window);
 +
 +bool drop_column(const Glib::ustring& table_name, const Glib::ustring& field_name);
 +
 +
 +//TODO: Is this used directly?
 +bool insert_example_data(Document* document, const Glib::ustring& table_name);
 +
 +/** Execute a SQL Select command, returning the result.
 + * @param builder The finished SqlBuilder object.
 + * @use_cursor Whether the data model should be cursor-based (not allowing random access).
 + */
 +Glib::RefPtr<Gnome::Gda::DataModel> query_execute_select(
 +  const Glib::RefPtr<const Gnome::Gda::SqlBuilder>& builder,
 +  bool use_cursor = false);
 +
 +
 +/** Execute a SQL non-select command, returning true if it succeeded.
 +  * See also query_execute(), which takes a SqlBuilder.
 +  * This should only be used for SQL commands that are not supported by SqlBuilder,
 +  * such as ADD GROUP.
 +  */
 +bool query_execute_string(const Glib::ustring& strQuery,
 +  const Glib::RefPtr<Gnome::Gda::Set>& params = Glib::RefPtr<Gnome::Gda::Set>(0));
 +
 +/** Execute a SQL non-select command, returning true if it succeeded.
 +  */
 +bool query_execute(const Glib::RefPtr<const Gnome::Gda::SqlBuilder>& builder);
 +
 +//TODO: Is this used directly?
 +Gnome::Gda::Value auto_increment_insert_first_if_necessary(const Glib::ustring& table_name, const Glib::ustring& field_name);
 +
 +/** Get the next auto-increment value for this primary key, from the glom system table.
 +  * Add a row for this field in the system table if it does not exist already.
 +  */
 +Gnome::Gda::Value get_next_auto_increment_value(const Glib::ustring& table_name, const Glib::ustring& field_name);
 +
 +
 +} //namespace DbUtils
 +
 +} //namespace Glom
 +
 +#endif //GLOM_DB_UTILS_H
diff --cc glom/libglom/utils.cc
index fe398ff,059d6df..bc6d11c
--- a/glom/libglom/utils.cc
+++ b/glom/libglom/utils.cc
@@@ -236,63 -236,16 +236,62 @@@ static void add_to_relationships_list(t
      list_relationships.push_back(uses_rel);
    }
  
--
  }
  
 -
 -Glib::ustring Utils::build_sql_select_fields_to_get(const Glib::ustring& table_name, const type_vecConstLayoutFields& fieldsToGet, const type_sort_clause& sort_clause, Glib::ustring& sql_part_from, Glib::ustring& sql_part_leftouterjoin)
 +static void builder_add_join(const Glib::RefPtr<Gnome::Gda::SqlBuilder>& builder, const sharedptr<const UsesRelationship>& uses_relationship)
  {
 -  //Initialize output parameters:
 -  sql_part_from = Glib::ustring();
 -  sql_part_leftouterjoin = Glib::ustring();
 +  sharedptr<const Relationship> relationship = uses_relationship->get_relationship();
 +  if(!relationship->get_has_fields()) //TODO: Handle related_record has_fields.
 +  {
 +    if(relationship->get_has_to_table())
 +    {
 +      //It is a relationship that only specifies the table, without specifying linking fields:
 +      builder->select_add_target(relationship->get_to_table());
 +    }
 +
 +    return;
 +  }
-     
++
 +  // Define the alias name as returned by get_sql_join_alias_name():
 +
 +  // Specify an alias, to avoid ambiguity when using 2 relationships to the same table.
 +  const Glib::ustring alias_name = uses_relationship->get_sql_join_alias_name();
 +
 +  // Add the JOIN:
 +  if(!uses_relationship->get_has_related_relationship_name())
 +  {
 +    const guint to_target_id = builder->select_add_target(relationship->get_to_table(), alias_name);
 +
 +    builder->select_join_targets(
 +      builder->select_add_target(relationship->get_from_table()),
 +      to_target_id,
 +      Gnome::Gda::SQL_SELECT_JOIN_LEFT,
 +      builder->add_cond(
 +        Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
 +        builder->add_field_id(relationship->get_from_field(), relationship->get_from_table()),
 +        builder->add_field_id(relationship->get_to_field(), alias_name)));
 +  }
 +  else
 +  {
 +     UsesRelationship parent_relationship;
 +     parent_relationship.set_relationship(relationship);
 +     sharedptr<const Relationship> related_relationship = uses_relationship->get_related_relationship();
 +
 +     const guint to_target_id = builder->select_add_target(related_relationship->get_to_table(), alias_name);
 +
 +     builder->select_join_targets(
 +       builder->select_add_target(relationship->get_from_table()), //TODO: Must we use the ID from select_add_target_id()?
 +       to_target_id,
 +       Gnome::Gda::SQL_SELECT_JOIN_LEFT,
 +       builder->add_cond(
 +         Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
 +         builder->add_field_id(related_relationship->get_from_field(), parent_relationship.get_sql_join_alias_name()),
 +         builder->add_field_id(related_relationship->get_to_field(), alias_name) ) );
 +  }
 +}
  
 +void Utils::build_sql_select_add_fields_to_get(const Glib::RefPtr<Gnome::Gda::SqlBuilder>& builder, const Glib::ustring& table_name, const type_vecConstLayoutFields& fieldsToGet, const type_sort_clause& sort_clause, bool extra_join)
 +{
    //Get all relationships used in the query:
    typedef std::list< sharedptr<const UsesRelationship> > type_list_relationships;
    type_list_relationships list_relationships;
@@@ -308,17 -261,10 +307,17 @@@
      sharedptr<const LayoutItem_Field> layout_item = iter->first;
      add_to_relationships_list(list_relationships, layout_item);
    }
-   
-   
+ 
+ 
 -  Glib::ustring sql_part_fields;
 +  //LEFT OUTER JOIN will get the field values from the other tables,
 +  //and give us our fields for this table even if there is no corresponding value in the other table.
 +  for(type_list_relationships::const_iterator iter = list_relationships.begin(); iter != list_relationships.end(); ++iter)
 +  {
 +    sharedptr<const UsesRelationship> uses_relationship = *iter;
 +    builder_add_join(builder, uses_relationship);
 +  }
-   
+ 
 +  bool one_added = false;
    for(type_vecConstLayoutFields::const_iterator iter = fieldsToGet.begin(); iter != fieldsToGet.end(); ++iter)
    {
      Glib::ustring one_sql_part;
@@@ -330,55 -276,83 +329,55 @@@
        continue;
      }
  
 -    bool is_summary = false;
 +    //Get the parent, such as the table name, or the alias name for the join:
 +    const Glib::ustring parent = layout_item->get_sql_table_or_join_alias_name(table_name);
-       
++
      const LayoutItem_FieldSummary* fieldsummary = dynamic_cast<const LayoutItem_FieldSummary*>(layout_item.obj());
      if(fieldsummary)
 -      is_summary = true;
 -
 -    //Add, for instance, "SUM(":
 -    if(is_summary)
 -      one_sql_part += fieldsummary->get_summary_type_sql() + '(';
 -
 -    one_sql_part += layout_item->get_sql_name(table_name);
 -
 -    //Close the summary bracket if necessary.
 -    if(is_summary)
 -      one_sql_part +=  ')';
 -
 -    //Append it to the big string of fields:
 -    if(!one_sql_part.empty())
      {
 -      if(!sql_part_fields.empty())
 -        sql_part_fields += ", ";
 +      const Gnome::Gda::SqlBuilder::Id id_function = builder->add_function(
 +        fieldsummary->get_summary_type_sql(),
 +        builder->add_id(layout_item->get_sql_name(table_name)) ); //TODO: Just use add_field_id()?
 +      builder->add_field_value_id(id_function);
 +    }
 +    else
 +    {
 +      const Gnome::Gda::SqlBuilder::Id id = builder->select_add_field(layout_item->get_name(), parent);
  
 -      sql_part_fields += one_sql_part;
 +      //Avoid duplicate records with doubly-related fields:
 +      if(extra_join)
 +        builder->select_group_by(id);
      }
-   
-     
 -  }
+ 
 -  if(sql_part_fields.empty())
 -  {
 -    std::cerr << "Utils::build_sql_select_fields_to_get(): sql_part_fields.empty(): fieldsToGet.size()=" << fieldsToGet.size() << std::endl;
 -    return sql_part_fields;
++
 +    one_added = true;
    }
  
 -  //LEFT OUTER JOIN will get the field values from the other tables,
 -  //and give us our fields for this table even if there is no corresponding value in the other table.
 -  for(type_list_relationships::const_iterator iter = list_relationships.begin(); iter != list_relationships.end(); ++iter)
 +  if(!one_added)
    {
 -    sharedptr<const UsesRelationship> uses_relationship = *iter;
 -    sharedptr<const Relationship> relationship = uses_relationship->get_relationship();
 -    if(relationship->get_has_fields()) //TODO: Handle related_record has_fields.
 -    {
 -      sql_part_leftouterjoin += uses_relationship->get_sql_join_alias_definition();
 -    }
 -    else if(relationship->get_has_to_table())
 -    {
 -      //It is a relationship that only specifies the table, without specifying linking fields:
 -      if(!(sql_part_from.empty()))
 -        sql_part_from += ", ";
 -
 -      sql_part_from += relationship->get_to_table();
 -    }
 +    std::cerr << "Utils::build_sql_select_fields_to_get(): No fields added: fieldsToGet.size()=" << fieldsToGet.size() << std::endl;
 +    return;
    }
  }
  
  
 -Glib::ustring Utils::build_sql_select_with_where_clause(const Glib::ustring& table_name, const type_vecConstLayoutFields& fieldsToGet, const Glib::ustring& where_clause, const Glib::ustring& extra_join, const type_sort_clause& sort_clause, const Glib::ustring& extra_group_by)
 +Glib::RefPtr<Gnome::Gda::SqlBuilder> Utils::build_sql_select_with_where_clause(const Glib::ustring& table_name, const type_vecConstLayoutFields& fieldsToGet, const Gnome::Gda::SqlExpr& where_clause, const sharedptr<const Relationship>& extra_join, const type_sort_clause& sort_clause, guint limit)
  {
 -  //Get the list of fields to SELECT, plus the tables that they are selected FROM.
 -  Glib::ustring sql_part_from;
 -  Glib::ustring sql_part_leftouterjoin;
 -  const Glib::ustring sql_part_fields = Utils::build_sql_select_fields_to_get(
 -    table_name, fieldsToGet, sort_clause, sql_part_from, sql_part_leftouterjoin);
 -
    //Build the whole SQL statement:
 -  Glib::ustring result =
 -    "SELECT " + sql_part_fields +
 -    " FROM \"" + table_name + '\"';
 +  Glib::RefPtr<Gnome::Gda::SqlBuilder> builder = Gnome::Gda::SqlBuilder::create(Gnome::Gda::SQL_STATEMENT_SELECT);
 +  builder->select_add_target(table_name);
  
 -  if(!sql_part_from.empty())
 -    result += (',' + sql_part_from);
 -
 -  if(!extra_join.empty())
 -    sql_part_leftouterjoin += (' ' + extra_join + ' ');
 -
 -  if(!sql_part_leftouterjoin.empty())
 -    result += (' ' + sql_part_leftouterjoin);
 +  //Add the fields to SELECT, plus the tables that they are selected FROM.
 +  //We tell it whether extra_join is empty, so it can do an extra GROUP BY if necessary.
 +  //TODO: Try to use DISTINCT instead, with a proper test case.
 +  Utils::build_sql_select_add_fields_to_get(builder, table_name, fieldsToGet, sort_clause, extra_join /* bool */);
-   
+ 
 +  if(extra_join)
 +  {
 +    sharedptr<UsesRelationship> uses_relationship = sharedptr<UsesRelationship>::create();
 +    uses_relationship->set_relationship(extra_join);
 +    builder_add_join(builder, uses_relationship);
 +  }
  
    //Add the WHERE clause:
    if(!where_clause.empty())
@@@ -893,130 -841,78 +892,203 @@@ bool Utils::file_exists(const Glib::ust
    }
  }
  
 +std::string Utils::sqlbuilder_get_full_query(
 +    const Glib::RefPtr<Gnome::Gda::Connection>& connection,
 +    const Glib::ustring& query,
 +    const Glib::RefPtr<const Gnome::Gda::Set>& params)
 +{
 +  Glib::ustring result = "glom_query_not_parsed";
 +
 +  try
 +  {
 +    Glib::RefPtr<Gnome::Gda::SqlParser> parser = connection->create_parser();
 +    if(parser)
 +    {
 +      Glib::RefPtr<Gnome::Gda::Statement> stmt = parser->parse_string(query);
 +      if(stmt)
 +        result = stmt->to_sql(params);
 +    }
 +  }
 +  catch(const Glib::Exception& ex)
 +  {
 +    std::cerr << "sqlbuilder_get_full_query(): exception while parsing query: " << ex.what() << std::endl;
 +  }
 +  catch(const std::exception& ex)
 +  {
 +    std::cerr << "sqlbuilder_get_full_query(): exception while parsing query: " << ex.what() << std::endl;
 +  }
 +
 +  //Convert to something that std::cout should be able to handle.
 +  const Glib::ScopedPtr<char> buf(g_convert_with_fallback(
 +    result.raw().data(), result.raw().size(),
 +    "ISO-8859-1", "UTF-8",
 +    (char*)"?",
 +    0, 0, 0));
 +  return std::string(buf.get());
 +}
 +
 +std::string Utils::sqlbuilder_get_full_query(
 +  const Glib::RefPtr<const Gnome::Gda::SqlBuilder>& builder)
 +{
 +  Glib::ustring result = "glom_query_not_parsed";
 +
 +  try
 +  {
 +    Glib::RefPtr<Gnome::Gda::Statement> stmt = builder->get_statement();
 +    if(stmt)
 +      result = stmt->to_sql();
 +  }
 +  catch(const Gnome::Gda::SqlError& ex)
 +  {
 +    std::cerr << "sqlbuilder_get_full_query(): SqlError exception while getting query: " << ex.what() << std::endl;
 +  }
 +  catch(const Glib::Exception& ex)
 +  {
 +    std::cerr << "sqlbuilder_get_full_query(): exception (" << typeid(ex).name() << ") while getting query: " << ex.what() << std::endl;
 +  }
 +  catch(const std::exception& ex)
 +  {
 +    std::cerr << "sqlbuilder_get_full_query(): exception (" << typeid(ex).name() << ") while getting query: " << ex.what() << std::endl;
 +  }
 +
 +  //Convert to something that std::cout should be able to handle.
 +  const Glib::ScopedPtr<char> buf(g_convert_with_fallback(
 +    result.raw().data(), result.raw().size(),
 +    "ISO-8859-1", "UTF-8",
 +    (char*)"?",
 +    0, 0, 0));
 +  return std::string(buf.get());
 +}
 +
 +Gnome::Gda::SqlExpr Utils::get_find_where_clause_quick(Document* document, const Glib::ustring& table_name, const Gnome::Gda::Value& quick_search)
 +{
 +  Glib::RefPtr<Gnome::Gda::SqlBuilder> builder =
 +    Gnome::Gda::SqlBuilder::create(Gnome::Gda::SQL_STATEMENT_SELECT);
 +  builder->select_add_target(table_name);
 +
 +  if(!document)
 +  {
 +    std::cerr << "Utils::get_find_where_clause_quick(): document was null." << std::endl;
 +    return Gnome::Gda::SqlExpr();
 +  }
 +
 +  //TODO: Cache the list of all fields, as well as caching (m_Fields) the list of all visible fields:
 +  const Document::type_vec_fields fields = document->get_table_fields(table_name);
 +
 +  guint previous_and_id = 0;
 +  typedef std::vector< sharedptr<LayoutItem_Field> > type_vecLayoutFields;
 +  type_vecLayoutFields fieldsToGet;
 +  for(Document::type_vec_fields::const_iterator iter = fields.begin(); iter != fields.end(); ++iter)
 +  {
 +    Glib::ustring strClausePart;
 +
 +    sharedptr<const Field> field = *iter;
 +
 +    bool use_this_field = true;
 +    if(field->get_glom_type() != Field::TYPE_TEXT)
 +    {
 +      use_this_field = false;
 +    }
 +
 +    if(use_this_field)
 +    {
 +      const guint eq_id = builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ, //TODO: Ue field->sql_find_operator().
 +        builder->add_field_id(field->get_name(), table_name),
 +        builder->add_expr(quick_search)); //Use  field->sql_find(quick_search);
 +
 +      guint and_id = 0;
 +      if(previous_and_id)
 +      {
 +        and_id = builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_AND,
 +        previous_and_id, eq_id);
 +      }
 +
 +      previous_and_id = and_id;
 +    }
 +  }
 +
 +  if(previous_and_id)
 +  {
 +    builder->set_where(previous_and_id); //This might be unnecessary.
 +    return builder->export_expression(previous_and_id);
 +  }
 +  else
 +  {
 +    return Gnome::Gda::SqlExpr();
 +  }
 +}
 +
+ bool Utils::delete_directory(const Glib::RefPtr<Gio::File>& directory)
+ {
+   if(!(directory->query_exists()))
+     return true;
+ 
+   //(Recursively) Delete any child files and directories,
+   //so we can delete this directory.
+   Glib::RefPtr<Gio::FileEnumerator> enumerator = directory->enumerate_children();
+ 
+   Glib::RefPtr<Gio::FileInfo> info = enumerator->next_file();
+   while(info)
+   {
+     Glib::RefPtr<Gio::File> child = directory->get_child(info->get_name());
+     bool removed_child = false;
+     if(child->query_file_type() == Gio::FILE_TYPE_DIRECTORY)
+       removed_child = delete_directory(child);
+     else
+       removed_child = child->remove();
+ 
+     if(!removed_child)
+        return false;
+ 
+     info = enumerator->next_file();
+   }
+ 
+   //Delete the actual directory:
+   if(!directory->remove())
+     return false;
+ 
+   return true;
+ }
+ 
+ bool Utils::delete_directory(const std::string& uri)
+ {
+   Glib::RefPtr<Gio::File> file = Gio::File::create_for_uri(uri);
+   return delete_directory(file);
+ }
+ 
+ /** For instance, to find the first file in the directory with a .glom extension.
+  */
+ Glib::ustring Utils::get_directory_child_with_suffix(const Glib::ustring& uri_directory, const std::string& suffix, bool recursive)
+ {
+   Glib::RefPtr<Gio::File> directory = Gio::File::create_for_uri(uri_directory);
+   Glib::RefPtr<Gio::FileEnumerator> enumerator = directory->enumerate_children();
+ 
+   Glib::RefPtr<Gio::FileInfo> info = enumerator->next_file();
+   while(info)
+   {
+     Glib::RefPtr<const Gio::File> child = directory->get_child(info->get_name());
+ 
+     const Gio::FileType file_type = child->query_file_type();
+     if(file_type == Gio::FILE_TYPE_REGULAR)
+     {
+       //Check the filename:
+       const std::string basename = child->get_basename();
+       if(string_remove_suffix(basename, suffix) != basename)
+         return child->get_uri();
+     }
+     else if(recursive && file_type == Gio::FILE_TYPE_DIRECTORY)
+     {
+       //Look in sub-directories too:
+       const Glib::ustring result = get_directory_child_with_suffix(child->get_uri(), suffix, recursive);
+       if(!result.empty())
+         return result;
+     }
+ 
+     info = enumerator->next_file();
+   }
+ 
+   return Glib::ustring();
+ }
+ 
+ 
 -
  } //namespace Glom
diff --cc glom/libglom/utils.h
index 870a85b,4ab5b46..72429c5
--- a/glom/libglom/utils.h
+++ b/glom/libglom/utils.h
@@@ -23,10 -23,9 +23,12 @@@
  
  #include <libglom/data_structure/field.h>
  #include <libglom/data_structure/numeric_format.h>
 +#include <libglom/document/document.h>
  
  #include <libglom/data_structure/layout/layoutitem_field.h>
++
 +#include <libgdamm/sqlexpr.h>
+ #include <giomm/file.h>
  
  namespace Glom
  {
diff --cc glom/main.cc
index ad2333e,78ffc75..aaae0c6
--- a/glom/main.cc
+++ b/glom/main.cc
@@@ -627,9 -636,8 +636,9 @@@ main(int argc, char* argv[]
  
      pApplication->set_command_line_args(argc, argv);
      pApplication->set_show_sql_debug(group.m_arg_debug_sql);
 +    Glom::ConnectionPool::get_instance()->set_show_debug_output(group.m_arg_debug_sql);
  
-     const bool test = pApplication->init(input_uri); //Sets it up and shows it.
+     const bool test = pApplication->init(input_uri, group.m_arg_restore); //Sets it up and shows it.
  
      #ifdef GLOM_ENABLE_MAEMO
      //TODO: What is this really for?
diff --cc glom/utils_ui.h
index 474d5ac,67772f2..e415ab5
--- a/glom/utils_ui.h
+++ b/glom/utils_ui.h
@@@ -104,10 -103,6 +104,9 @@@ std::string get_filepath_with_extension
  
  Glib::RefPtr<Gdk::Pixbuf> image_scale_keeping_ratio(const Glib::RefPtr<Gdk::Pixbuf>& pixbuf, int target_height, int target_width);
  
 +///@result Whether the user would like to find again.
 +bool show_warning_no_records_found(Gtk::Window& transient_for);
 +
-   
  } //namespace Utils
  
  } //namespace Glom
diff --cc tests/test_selfhosting_new_empty.cc
index d67ce6a,f5a1e8f..a08431a
--- a/tests/test_selfhosting_new_empty.cc
+++ b/tests/test_selfhosting_new_empty.cc
@@@ -103,13 -95,13 +59,13 @@@ int main(
    //Make sure that the file does not exist yet:
    {
      const Glib::ustring uri = Glib::filename_to_uri(temp_filepath_dir);
-     delete_directory(uri);
 -    Glom::Utils::delete_directory(uri);
++    Utils::delete_directory(uri);
    }
  
 -  //Save the example as a real file:
 +  //Save the file. TODO: Do we need to do this for the test?
    const Glib::ustring file_uri = Glib::filename_to_uri(temp_filepath);
    document.set_file_uri(file_uri);
-   
+ 
    document.set_hosting_mode(Glom::Document::HOSTING_MODE_POSTGRES_SELF);
    document.set_is_example_file(false);
    document.set_network_shared(false);
@@@ -134,17 -125,17 +90,17 @@@
    //Start self-hosting:
    //TODO: Let this happen automatically on first connection?
    const bool started = connection_pool->startup( sigc::ptr_fun(&on_startup_progress) );
 -  g_assert(started == Glom::ConnectionPool::Backend::STARTUPERROR_NONE);
 +  g_assert(started);
-   
-   const bool stopped = connection_pool->cleanup( sigc::ptr_fun(&on_cleanup_progress) );  
+ 
+   const bool stopped = connection_pool->cleanup( sigc::ptr_fun(&on_cleanup_progress) );
    g_assert(stopped);
  
    //Make sure the directory is removed at the end,
    {
      const Glib::ustring uri = Glib::filename_to_uri(temp_filepath_dir);
-     delete_directory(uri);
 -    Glom::Utils::delete_directory(uri);
++    Utils::delete_directory(uri);
    }
-   
+ 
    Glom::libglom_deinit();
  
    return EXIT_SUCCESS;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]