Initial commit
[fillmore] / src / marina / marina / ProjectLoader.c
diff --git a/src/marina/marina/ProjectLoader.c b/src/marina/marina/ProjectLoader.c
new file mode 100644 (file)
index 0000000..9edaf3e
--- /dev/null
@@ -0,0 +1,2126 @@
+/* ProjectLoader.c generated by valac, the Vala compiler
+ * generated from ProjectLoader.vala, do not modify */
+
+/* Copyright 2009 Yorba Foundation
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later).  See the COPYING file in this distribution. 
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gee.h>
+#include <glib/gstdio.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define MODEL_TYPE_LOADER_HANDLER (model_loader_handler_get_type ())
+#define MODEL_LOADER_HANDLER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_LOADER_HANDLER, ModelLoaderHandler))
+#define MODEL_LOADER_HANDLER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_LOADER_HANDLER, ModelLoaderHandlerClass))
+#define MODEL_IS_LOADER_HANDLER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_LOADER_HANDLER))
+#define MODEL_IS_LOADER_HANDLER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_LOADER_HANDLER))
+#define MODEL_LOADER_HANDLER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_LOADER_HANDLER, ModelLoaderHandlerClass))
+
+typedef struct _ModelLoaderHandler ModelLoaderHandler;
+typedef struct _ModelLoaderHandlerClass ModelLoaderHandlerClass;
+typedef struct _ModelLoaderHandlerPrivate ModelLoaderHandlerPrivate;
+
+#define MODEL_TYPE_XML_TREE_LOADER (model_xml_tree_loader_get_type ())
+#define MODEL_XML_TREE_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_XML_TREE_LOADER, ModelXmlTreeLoader))
+#define MODEL_XML_TREE_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_XML_TREE_LOADER, ModelXmlTreeLoaderClass))
+#define MODEL_IS_XML_TREE_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_XML_TREE_LOADER))
+#define MODEL_IS_XML_TREE_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_XML_TREE_LOADER))
+#define MODEL_XML_TREE_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_XML_TREE_LOADER, ModelXmlTreeLoaderClass))
+
+typedef struct _ModelXmlTreeLoader ModelXmlTreeLoader;
+typedef struct _ModelXmlTreeLoaderClass ModelXmlTreeLoaderClass;
+typedef struct _ModelXmlTreeLoaderPrivate ModelXmlTreeLoaderPrivate;
+
+#define MODEL_TYPE_XML_ELEMENT (model_xml_element_get_type ())
+#define MODEL_XML_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_XML_ELEMENT, ModelXmlElement))
+#define MODEL_XML_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_XML_ELEMENT, ModelXmlElementClass))
+#define MODEL_IS_XML_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_XML_ELEMENT))
+#define MODEL_IS_XML_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_XML_ELEMENT))
+#define MODEL_XML_ELEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_XML_ELEMENT, ModelXmlElementClass))
+
+typedef struct _ModelXmlElement ModelXmlElement;
+typedef struct _ModelXmlElementClass ModelXmlElementClass;
+#define _model_xml_element_unref0(var) ((var == NULL) ? NULL : (var = (model_xml_element_unref (var), NULL)))
+#define _g_markup_parse_context_free0(var) ((var == NULL) ? NULL : (var = (g_markup_parse_context_free (var), NULL)))
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+typedef struct _ModelParamSpecXmlTreeLoader ModelParamSpecXmlTreeLoader;
+
+#define MODEL_TYPE_PROJECT_BUILDER (model_project_builder_get_type ())
+#define MODEL_PROJECT_BUILDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_PROJECT_BUILDER, ModelProjectBuilder))
+#define MODEL_PROJECT_BUILDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_PROJECT_BUILDER, ModelProjectBuilderClass))
+#define MODEL_IS_PROJECT_BUILDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_PROJECT_BUILDER))
+#define MODEL_IS_PROJECT_BUILDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_PROJECT_BUILDER))
+#define MODEL_PROJECT_BUILDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_PROJECT_BUILDER, ModelProjectBuilderClass))
+
+typedef struct _ModelProjectBuilder ModelProjectBuilder;
+typedef struct _ModelProjectBuilderClass ModelProjectBuilderClass;
+typedef struct _ModelProjectBuilderPrivate ModelProjectBuilderPrivate;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+typedef struct _ModelXmlElementPrivate ModelXmlElementPrivate;
+
+#define LOGGING_TYPE_FACILITY (logging_facility_get_type ())
+
+#define LOGGING_TYPE_LEVEL (logging_level_get_type ())
+typedef struct _ModelParamSpecXmlElement ModelParamSpecXmlElement;
+
+#define MODEL_TYPE_PROJECT_LOADER (model_project_loader_get_type ())
+#define MODEL_PROJECT_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoader))
+#define MODEL_PROJECT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoaderClass))
+#define MODEL_IS_PROJECT_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_PROJECT_LOADER))
+#define MODEL_IS_PROJECT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_PROJECT_LOADER))
+#define MODEL_PROJECT_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoaderClass))
+
+typedef struct _ModelProjectLoader ModelProjectLoader;
+typedef struct _ModelProjectLoaderClass ModelProjectLoaderClass;
+typedef struct _ModelProjectLoaderPrivate ModelProjectLoaderPrivate;
+#define _model_xml_tree_loader_unref0(var) ((var == NULL) ? NULL : (var = (model_xml_tree_loader_unref (var), NULL)))
+
+struct _ModelLoaderHandler {
+       GObject parent_instance;
+       ModelLoaderHandlerPrivate * priv;
+};
+
+struct _ModelLoaderHandlerClass {
+       GObjectClass parent_class;
+       gboolean (*commit_library) (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+       gboolean (*commit_marina) (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+       gboolean (*commit_track) (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+       gboolean (*commit_clip) (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+       gboolean (*commit_clipfile) (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+       gboolean (*commit_time_signature_entry) (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+       gboolean (*commit_tempo_entry) (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+       gboolean (*commit_click) (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+       gboolean (*commit_library_preference) (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+       void (*leave_library) (ModelLoaderHandler* self);
+       void (*leave_marina) (ModelLoaderHandler* self);
+       void (*leave_track) (ModelLoaderHandler* self);
+       void (*leave_clip) (ModelLoaderHandler* self);
+       void (*leave_clipfile) (ModelLoaderHandler* self);
+};
+
+struct _ModelXmlTreeLoader {
+       GTypeInstance parent_instance;
+       volatile int ref_count;
+       ModelXmlTreeLoaderPrivate * priv;
+       ModelXmlElement* root;
+};
+
+struct _ModelXmlTreeLoaderClass {
+       GTypeClass parent_class;
+       void (*finalize) (ModelXmlTreeLoader *self);
+};
+
+struct _ModelXmlTreeLoaderPrivate {
+       ModelXmlElement* current_element;
+};
+
+struct _ModelParamSpecXmlTreeLoader {
+       GParamSpec parent_instance;
+};
+
+struct _ModelProjectBuilder {
+       GObject parent_instance;
+       ModelProjectBuilderPrivate * priv;
+};
+
+struct _ModelProjectBuilderClass {
+       GObjectClass parent_class;
+};
+
+struct _ModelProjectBuilderPrivate {
+       ModelLoaderHandler* handler;
+};
+
+struct _ModelXmlElement {
+       GTypeInstance parent_instance;
+       volatile int ref_count;
+       ModelXmlElementPrivate * priv;
+       char** attribute_names;
+       gint attribute_names_length1;
+       char** attribute_values;
+       gint attribute_values_length1;
+};
+
+struct _ModelXmlElementClass {
+       GTypeClass parent_class;
+       void (*finalize) (ModelXmlElement *self);
+};
+
+typedef enum  {
+       LOGGING_FACILITY_SIGNAL_HANDLERS,
+       LOGGING_FACILITY_DEVELOPER_WARNINGS,
+       LOGGING_FACILITY_GRAPH,
+       LOGGING_FACILITY_LOADING,
+       LOGGING_FACILITY_IMPORT,
+       LOGGING_FACILITY_SINGLEDECODEBIN
+} LoggingFacility;
+
+typedef enum  {
+       LOGGING_LEVEL_CRITICAL,
+       LOGGING_LEVEL_HIGH,
+       LOGGING_LEVEL_MEDIUM,
+       LOGGING_LEVEL_LOW,
+       LOGGING_LEVEL_INFO,
+       LOGGING_LEVEL_VERBOSE
+} LoggingLevel;
+
+struct _ModelXmlElementPrivate {
+       char* _name;
+       ModelXmlElement* _parent;
+       GeeArrayList* _children;
+};
+
+struct _ModelParamSpecXmlElement {
+       GParamSpec parent_instance;
+};
+
+struct _ModelProjectLoader {
+       GObject parent_instance;
+       ModelProjectLoaderPrivate * priv;
+};
+
+struct _ModelProjectLoaderClass {
+       GObjectClass parent_class;
+};
+
+struct _ModelProjectLoaderPrivate {
+       char* file_name;
+       ModelLoaderHandler* loader_handler;
+       char* text;
+       gsize text_len;
+       gboolean project_load_completed;
+       gboolean load_completed_fired;
+       gboolean handler_completed;
+};
+
+
+static gpointer model_loader_handler_parent_class = NULL;
+static gpointer model_xml_tree_loader_parent_class = NULL;
+static gpointer model_project_builder_parent_class = NULL;
+static gpointer model_xml_element_parent_class = NULL;
+static gpointer model_project_loader_parent_class = NULL;
+
+GType model_loader_handler_get_type (void);
+enum  {
+       MODEL_LOADER_HANDLER_DUMMY_PROPERTY
+};
+ModelLoaderHandler* model_loader_handler_new (void);
+ModelLoaderHandler* model_loader_handler_construct (GType object_type);
+gboolean model_loader_handler_commit_library (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+static gboolean model_loader_handler_real_commit_library (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+gboolean model_loader_handler_commit_marina (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+static gboolean model_loader_handler_real_commit_marina (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+gboolean model_loader_handler_commit_track (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+static gboolean model_loader_handler_real_commit_track (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+gboolean model_loader_handler_commit_clip (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+static gboolean model_loader_handler_real_commit_clip (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+gboolean model_loader_handler_commit_clipfile (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+static gboolean model_loader_handler_real_commit_clipfile (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+gboolean model_loader_handler_commit_time_signature_entry (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+static gboolean model_loader_handler_real_commit_time_signature_entry (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+gboolean model_loader_handler_commit_tempo_entry (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+static gboolean model_loader_handler_real_commit_tempo_entry (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+gboolean model_loader_handler_commit_click (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+static gboolean model_loader_handler_real_commit_click (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+gboolean model_loader_handler_commit_library_preference (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+static gboolean model_loader_handler_real_commit_library_preference (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+void model_loader_handler_leave_library (ModelLoaderHandler* self);
+static void model_loader_handler_real_leave_library (ModelLoaderHandler* self);
+void model_loader_handler_leave_marina (ModelLoaderHandler* self);
+static void model_loader_handler_real_leave_marina (ModelLoaderHandler* self);
+void model_loader_handler_leave_track (ModelLoaderHandler* self);
+static void model_loader_handler_real_leave_track (ModelLoaderHandler* self);
+void model_loader_handler_leave_clip (ModelLoaderHandler* self);
+static void model_loader_handler_real_leave_clip (ModelLoaderHandler* self);
+void model_loader_handler_leave_clipfile (ModelLoaderHandler* self);
+static void model_loader_handler_real_leave_clipfile (ModelLoaderHandler* self);
+gpointer model_xml_tree_loader_ref (gpointer instance);
+void model_xml_tree_loader_unref (gpointer instance);
+GParamSpec* model_param_spec_xml_tree_loader (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void model_value_set_xml_tree_loader (GValue* value, gpointer v_object);
+void model_value_take_xml_tree_loader (GValue* value, gpointer v_object);
+gpointer model_value_get_xml_tree_loader (const GValue* value);
+GType model_xml_tree_loader_get_type (void);
+gpointer model_xml_element_ref (gpointer instance);
+void model_xml_element_unref (gpointer instance);
+GParamSpec* model_param_spec_xml_element (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void model_value_set_xml_element (GValue* value, gpointer v_object);
+void model_value_take_xml_element (GValue* value, gpointer v_object);
+gpointer model_value_get_xml_element (const GValue* value);
+GType model_xml_element_get_type (void);
+#define MODEL_XML_TREE_LOADER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_XML_TREE_LOADER, ModelXmlTreeLoaderPrivate))
+enum  {
+       MODEL_XML_TREE_LOADER_DUMMY_PROPERTY
+};
+static void model_xml_tree_loader_xml_start_element (ModelXmlTreeLoader* self, GMarkupParseContext* c, const char* name, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+static void _model_xml_tree_loader_xml_start_element_gmarkup_parser_start_element_func (GMarkupParseContext* context, const char* element_name, char** attribute_names, char** attribute_values, gpointer self);
+static void model_xml_tree_loader_xml_end_element (ModelXmlTreeLoader* self, GMarkupParseContext* c, const char* name);
+static void _model_xml_tree_loader_xml_end_element_gmarkup_parser_end_element_func (GMarkupParseContext* context, const char* element_name, gpointer self);
+ModelXmlTreeLoader* model_xml_tree_loader_new (const char* document);
+ModelXmlTreeLoader* model_xml_tree_loader_construct (GType object_type, const char* document);
+ModelXmlElement* model_xml_element_new (const char* name, char** attribute_names, int attribute_names_length1, char** attribute_values, int attribute_values_length1, ModelXmlElement* parent);
+ModelXmlElement* model_xml_element_construct (GType object_type, const char* name, char** attribute_names, int attribute_names_length1, char** attribute_values, int attribute_values_length1, ModelXmlElement* parent);
+void model_xml_element_add_child (ModelXmlElement* self, ModelXmlElement* child_element);
+ModelXmlElement* model_xml_element_get_parent (ModelXmlElement* self);
+static void model_xml_tree_loader_finalize (ModelXmlTreeLoader* obj);
+GType model_project_builder_get_type (void);
+#define MODEL_PROJECT_BUILDER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_PROJECT_BUILDER, ModelProjectBuilderPrivate))
+enum  {
+       MODEL_PROJECT_BUILDER_DUMMY_PROPERTY
+};
+ModelProjectBuilder* model_project_builder_new (ModelLoaderHandler* handler);
+ModelProjectBuilder* model_project_builder_construct (GType object_type, ModelLoaderHandler* handler);
+const char* model_xml_element_get_name (ModelXmlElement* self);
+static gboolean model_project_builder_check_name (ModelProjectBuilder* self, const char* expected_name, ModelXmlElement* node);
+GeeArrayList* model_xml_element_get_children (ModelXmlElement* self);
+static void model_project_builder_handle_clip (ModelProjectBuilder* self, ModelXmlElement* clip);
+GType logging_facility_get_type (void);
+GType logging_level_get_type (void);
+void logging_emit (GObject* object, LoggingFacility facility, LoggingLevel level, const char* message);
+static void model_project_builder_handle_track (ModelProjectBuilder* self, ModelXmlElement* track);
+static void model_project_builder_handle_preference (ModelProjectBuilder* self, ModelXmlElement* preference);
+static void model_project_builder_handle_time_signature (ModelProjectBuilder* self, ModelXmlElement* time_signature);
+static void model_project_builder_handle_tempo (ModelProjectBuilder* self, ModelXmlElement* tempo);
+static void model_project_builder_handle_map (ModelProjectBuilder* self, ModelXmlElement* map);
+static void model_project_builder_handle_library (ModelProjectBuilder* self, ModelXmlElement* library);
+static void model_project_builder_handle_tracks (ModelProjectBuilder* self, ModelXmlElement* tracks);
+static void model_project_builder_handle_preferences (ModelProjectBuilder* self, ModelXmlElement* preferences);
+static void model_project_builder_handle_maps (ModelProjectBuilder* self, ModelXmlElement* maps);
+gboolean model_project_builder_check_project (ModelProjectBuilder* self, ModelXmlElement* root);
+void model_project_builder_build_project (ModelProjectBuilder* self, ModelXmlElement* root);
+static void model_project_builder_finalize (GObject* obj);
+#define MODEL_XML_ELEMENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_XML_ELEMENT, ModelXmlElementPrivate))
+enum  {
+       MODEL_XML_ELEMENT_DUMMY_PROPERTY
+};
+static void model_xml_element_set_name (ModelXmlElement* self, const char* value);
+char** copy_array (char** source, int source_length1, int* result_length1);
+static void model_xml_element_set_parent (ModelXmlElement* self, ModelXmlElement* value);
+static void model_xml_element_finalize (ModelXmlElement* obj);
+GType model_project_loader_get_type (void);
+#define MODEL_PROJECT_LOADER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoaderPrivate))
+enum  {
+       MODEL_PROJECT_LOADER_DUMMY_PROPERTY
+};
+static void model_project_loader_on_load_error (ModelProjectLoader* self, const char* _error_);
+static void _model_project_loader_on_load_error_model_loader_handler_load_error (ModelLoaderHandler* _sender, const char* error_message, gpointer self);
+static void model_project_loader_on_handler_complete (ModelProjectLoader* self);
+static void _model_project_loader_on_handler_complete_model_loader_handler_complete (ModelLoaderHandler* _sender, gpointer self);
+ModelProjectLoader* model_project_loader_new (ModelLoaderHandler* loader_handler, const char* file_name);
+ModelProjectLoader* model_project_loader_construct (GType object_type, ModelLoaderHandler* loader_handler, const char* file_name);
+static void _model_project_loader_on_load_error_model_project_builder_error_occurred (ModelProjectBuilder* _sender, const char* _error_, gpointer self);
+void model_project_loader_load (ModelProjectLoader* self);
+static void model_project_loader_finalize (GObject* obj);
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static gint _vala_array_length (gpointer array);
+static int _vala_strcmp0 (const char * str1, const char * str2);
+
+
+
+#line 15 "ProjectLoader.vala"
+ModelLoaderHandler* model_loader_handler_construct (GType object_type) {
+#line 332 "ProjectLoader.c"
+       ModelLoaderHandler * self;
+#line 15 "ProjectLoader.vala"
+       self = (ModelLoaderHandler*) g_object_new (object_type, NULL);
+#line 336 "ProjectLoader.c"
+       return self;
+}
+
+
+#line 15 "ProjectLoader.vala"
+ModelLoaderHandler* model_loader_handler_new (void) {
+#line 15 "ProjectLoader.vala"
+       return model_loader_handler_construct (MODEL_TYPE_LOADER_HANDLER);
+#line 345 "ProjectLoader.c"
+}
+
+
+#line 18 "ProjectLoader.vala"
+static gboolean model_loader_handler_real_commit_library (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 351 "ProjectLoader.c"
+       gboolean result = FALSE;
+#line 18 "ProjectLoader.vala"
+       g_return_val_if_fail (MODEL_IS_LOADER_HANDLER (self), FALSE);
+#line 355 "ProjectLoader.c"
+       result = TRUE;
+#line 19 "ProjectLoader.vala"
+       return result;
+#line 359 "ProjectLoader.c"
+}
+
+
+#line 18 "ProjectLoader.vala"
+gboolean model_loader_handler_commit_library (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 18 "ProjectLoader.vala"
+       return MODEL_LOADER_HANDLER_GET_CLASS (self)->commit_library (self, attr_names, attr_names_length1, attr_values, attr_values_length1);
+#line 367 "ProjectLoader.c"
+}
+
+
+#line 22 "ProjectLoader.vala"
+static gboolean model_loader_handler_real_commit_marina (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 373 "ProjectLoader.c"
+       gboolean result = FALSE;
+#line 22 "ProjectLoader.vala"
+       g_return_val_if_fail (MODEL_IS_LOADER_HANDLER (self), FALSE);
+#line 377 "ProjectLoader.c"
+       result = TRUE;
+#line 23 "ProjectLoader.vala"
+       return result;
+#line 381 "ProjectLoader.c"
+}
+
+
+#line 22 "ProjectLoader.vala"
+gboolean model_loader_handler_commit_marina (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 22 "ProjectLoader.vala"
+       return MODEL_LOADER_HANDLER_GET_CLASS (self)->commit_marina (self, attr_names, attr_names_length1, attr_values, attr_values_length1);
+#line 389 "ProjectLoader.c"
+}
+
+
+#line 26 "ProjectLoader.vala"
+static gboolean model_loader_handler_real_commit_track (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 395 "ProjectLoader.c"
+       gboolean result = FALSE;
+#line 26 "ProjectLoader.vala"
+       g_return_val_if_fail (MODEL_IS_LOADER_HANDLER (self), FALSE);
+#line 399 "ProjectLoader.c"
+       result = TRUE;
+#line 27 "ProjectLoader.vala"
+       return result;
+#line 403 "ProjectLoader.c"
+}
+
+
+#line 26 "ProjectLoader.vala"
+gboolean model_loader_handler_commit_track (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 26 "ProjectLoader.vala"
+       return MODEL_LOADER_HANDLER_GET_CLASS (self)->commit_track (self, attr_names, attr_names_length1, attr_values, attr_values_length1);
+#line 411 "ProjectLoader.c"
+}
+
+
+#line 30 "ProjectLoader.vala"
+static gboolean model_loader_handler_real_commit_clip (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 417 "ProjectLoader.c"
+       gboolean result = FALSE;
+#line 30 "ProjectLoader.vala"
+       g_return_val_if_fail (MODEL_IS_LOADER_HANDLER (self), FALSE);
+#line 421 "ProjectLoader.c"
+       result = TRUE;
+#line 31 "ProjectLoader.vala"
+       return result;
+#line 425 "ProjectLoader.c"
+}
+
+
+#line 30 "ProjectLoader.vala"
+gboolean model_loader_handler_commit_clip (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 30 "ProjectLoader.vala"
+       return MODEL_LOADER_HANDLER_GET_CLASS (self)->commit_clip (self, attr_names, attr_names_length1, attr_values, attr_values_length1);
+#line 433 "ProjectLoader.c"
+}
+
+
+#line 34 "ProjectLoader.vala"
+static gboolean model_loader_handler_real_commit_clipfile (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 439 "ProjectLoader.c"
+       gboolean result = FALSE;
+#line 34 "ProjectLoader.vala"
+       g_return_val_if_fail (MODEL_IS_LOADER_HANDLER (self), FALSE);
+#line 443 "ProjectLoader.c"
+       result = TRUE;
+#line 35 "ProjectLoader.vala"
+       return result;
+#line 447 "ProjectLoader.c"
+}
+
+
+#line 34 "ProjectLoader.vala"
+gboolean model_loader_handler_commit_clipfile (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 34 "ProjectLoader.vala"
+       return MODEL_LOADER_HANDLER_GET_CLASS (self)->commit_clipfile (self, attr_names, attr_names_length1, attr_values, attr_values_length1);
+#line 455 "ProjectLoader.c"
+}
+
+
+#line 38 "ProjectLoader.vala"
+static gboolean model_loader_handler_real_commit_time_signature_entry (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 461 "ProjectLoader.c"
+       gboolean result = FALSE;
+#line 38 "ProjectLoader.vala"
+       g_return_val_if_fail (MODEL_IS_LOADER_HANDLER (self), FALSE);
+#line 465 "ProjectLoader.c"
+       result = TRUE;
+#line 39 "ProjectLoader.vala"
+       return result;
+#line 469 "ProjectLoader.c"
+}
+
+
+#line 38 "ProjectLoader.vala"
+gboolean model_loader_handler_commit_time_signature_entry (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 38 "ProjectLoader.vala"
+       return MODEL_LOADER_HANDLER_GET_CLASS (self)->commit_time_signature_entry (self, attr_names, attr_names_length1, attr_values, attr_values_length1);
+#line 477 "ProjectLoader.c"
+}
+
+
+#line 42 "ProjectLoader.vala"
+static gboolean model_loader_handler_real_commit_tempo_entry (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 483 "ProjectLoader.c"
+       gboolean result = FALSE;
+#line 42 "ProjectLoader.vala"
+       g_return_val_if_fail (MODEL_IS_LOADER_HANDLER (self), FALSE);
+#line 487 "ProjectLoader.c"
+       result = TRUE;
+#line 43 "ProjectLoader.vala"
+       return result;
+#line 491 "ProjectLoader.c"
+}
+
+
+#line 42 "ProjectLoader.vala"
+gboolean model_loader_handler_commit_tempo_entry (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 42 "ProjectLoader.vala"
+       return MODEL_LOADER_HANDLER_GET_CLASS (self)->commit_tempo_entry (self, attr_names, attr_names_length1, attr_values, attr_values_length1);
+#line 499 "ProjectLoader.c"
+}
+
+
+#line 46 "ProjectLoader.vala"
+static gboolean model_loader_handler_real_commit_click (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 505 "ProjectLoader.c"
+       gboolean result = FALSE;
+#line 46 "ProjectLoader.vala"
+       g_return_val_if_fail (MODEL_IS_LOADER_HANDLER (self), FALSE);
+#line 509 "ProjectLoader.c"
+       result = TRUE;
+#line 47 "ProjectLoader.vala"
+       return result;
+#line 513 "ProjectLoader.c"
+}
+
+
+#line 46 "ProjectLoader.vala"
+gboolean model_loader_handler_commit_click (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 46 "ProjectLoader.vala"
+       return MODEL_LOADER_HANDLER_GET_CLASS (self)->commit_click (self, attr_names, attr_names_length1, attr_values, attr_values_length1);
+#line 521 "ProjectLoader.c"
+}
+
+
+#line 50 "ProjectLoader.vala"
+static gboolean model_loader_handler_real_commit_library_preference (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 527 "ProjectLoader.c"
+       gboolean result = FALSE;
+#line 50 "ProjectLoader.vala"
+       g_return_val_if_fail (MODEL_IS_LOADER_HANDLER (self), FALSE);
+#line 531 "ProjectLoader.c"
+       result = TRUE;
+#line 51 "ProjectLoader.vala"
+       return result;
+#line 535 "ProjectLoader.c"
+}
+
+
+#line 50 "ProjectLoader.vala"
+gboolean model_loader_handler_commit_library_preference (ModelLoaderHandler* self, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 50 "ProjectLoader.vala"
+       return MODEL_LOADER_HANDLER_GET_CLASS (self)->commit_library_preference (self, attr_names, attr_names_length1, attr_values, attr_values_length1);
+#line 543 "ProjectLoader.c"
+}
+
+
+#line 54 "ProjectLoader.vala"
+static void model_loader_handler_real_leave_library (ModelLoaderHandler* self) {
+#line 54 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_LOADER_HANDLER (self));
+#line 551 "ProjectLoader.c"
+}
+
+
+#line 54 "ProjectLoader.vala"
+void model_loader_handler_leave_library (ModelLoaderHandler* self) {
+#line 54 "ProjectLoader.vala"
+       MODEL_LOADER_HANDLER_GET_CLASS (self)->leave_library (self);
+#line 559 "ProjectLoader.c"
+}
+
+
+#line 57 "ProjectLoader.vala"
+static void model_loader_handler_real_leave_marina (ModelLoaderHandler* self) {
+#line 57 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_LOADER_HANDLER (self));
+#line 567 "ProjectLoader.c"
+}
+
+
+#line 57 "ProjectLoader.vala"
+void model_loader_handler_leave_marina (ModelLoaderHandler* self) {
+#line 57 "ProjectLoader.vala"
+       MODEL_LOADER_HANDLER_GET_CLASS (self)->leave_marina (self);
+#line 575 "ProjectLoader.c"
+}
+
+
+#line 60 "ProjectLoader.vala"
+static void model_loader_handler_real_leave_track (ModelLoaderHandler* self) {
+#line 60 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_LOADER_HANDLER (self));
+#line 583 "ProjectLoader.c"
+}
+
+
+#line 60 "ProjectLoader.vala"
+void model_loader_handler_leave_track (ModelLoaderHandler* self) {
+#line 60 "ProjectLoader.vala"
+       MODEL_LOADER_HANDLER_GET_CLASS (self)->leave_track (self);
+#line 591 "ProjectLoader.c"
+}
+
+
+#line 63 "ProjectLoader.vala"
+static void model_loader_handler_real_leave_clip (ModelLoaderHandler* self) {
+#line 63 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_LOADER_HANDLER (self));
+#line 599 "ProjectLoader.c"
+}
+
+
+#line 63 "ProjectLoader.vala"
+void model_loader_handler_leave_clip (ModelLoaderHandler* self) {
+#line 63 "ProjectLoader.vala"
+       MODEL_LOADER_HANDLER_GET_CLASS (self)->leave_clip (self);
+#line 607 "ProjectLoader.c"
+}
+
+
+#line 66 "ProjectLoader.vala"
+static void model_loader_handler_real_leave_clipfile (ModelLoaderHandler* self) {
+#line 66 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_LOADER_HANDLER (self));
+#line 615 "ProjectLoader.c"
+}
+
+
+#line 66 "ProjectLoader.vala"
+void model_loader_handler_leave_clipfile (ModelLoaderHandler* self) {
+#line 66 "ProjectLoader.vala"
+       MODEL_LOADER_HANDLER_GET_CLASS (self)->leave_clipfile (self);
+#line 623 "ProjectLoader.c"
+}
+
+
+static void model_loader_handler_class_init (ModelLoaderHandlerClass * klass) {
+       model_loader_handler_parent_class = g_type_class_peek_parent (klass);
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_library = model_loader_handler_real_commit_library;
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_marina = model_loader_handler_real_commit_marina;
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_track = model_loader_handler_real_commit_track;
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_clip = model_loader_handler_real_commit_clip;
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_clipfile = model_loader_handler_real_commit_clipfile;
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_time_signature_entry = model_loader_handler_real_commit_time_signature_entry;
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_tempo_entry = model_loader_handler_real_commit_tempo_entry;
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_click = model_loader_handler_real_commit_click;
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_library_preference = model_loader_handler_real_commit_library_preference;
+       MODEL_LOADER_HANDLER_CLASS (klass)->leave_library = model_loader_handler_real_leave_library;
+       MODEL_LOADER_HANDLER_CLASS (klass)->leave_marina = model_loader_handler_real_leave_marina;
+       MODEL_LOADER_HANDLER_CLASS (klass)->leave_track = model_loader_handler_real_leave_track;
+       MODEL_LOADER_HANDLER_CLASS (klass)->leave_clip = model_loader_handler_real_leave_clip;
+       MODEL_LOADER_HANDLER_CLASS (klass)->leave_clipfile = model_loader_handler_real_leave_clipfile;
+       g_signal_new ("load_error", MODEL_TYPE_LOADER_HANDLER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING);
+       g_signal_new ("complete", MODEL_TYPE_LOADER_HANDLER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+}
+
+
+static void model_loader_handler_instance_init (ModelLoaderHandler * self) {
+}
+
+
+GType model_loader_handler_get_type (void) {
+       static volatile gsize model_loader_handler_type_id__volatile = 0;
+       if (g_once_init_enter (&model_loader_handler_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelLoaderHandlerClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_loader_handler_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelLoaderHandler), 0, (GInstanceInitFunc) model_loader_handler_instance_init, NULL };
+               GType model_loader_handler_type_id;
+               model_loader_handler_type_id = g_type_register_static (G_TYPE_OBJECT, "ModelLoaderHandler", &g_define_type_info, 0);
+               g_once_init_leave (&model_loader_handler_type_id__volatile, model_loader_handler_type_id);
+       }
+       return model_loader_handler_type_id__volatile;
+}
+
+
+#line 87 "ProjectLoader.vala"
+static void _model_xml_tree_loader_xml_start_element_gmarkup_parser_start_element_func (GMarkupParseContext* context, const char* element_name, char** attribute_names, char** attribute_values, gpointer self) {
+#line 666 "ProjectLoader.c"
+       model_xml_tree_loader_xml_start_element (self, context, element_name, attribute_names, _vala_array_length (attribute_names), attribute_values, _vala_array_length (attribute_values));
+}
+
+
+#line 100 "ProjectLoader.vala"
+static void _model_xml_tree_loader_xml_end_element_gmarkup_parser_end_element_func (GMarkupParseContext* context, const char* element_name, gpointer self) {
+#line 673 "ProjectLoader.c"
+       model_xml_tree_loader_xml_end_element (self, context, element_name);
+}
+
+
+static glong string_get_length (const char* self) {
+       glong result;
+       g_return_val_if_fail (self != NULL, 0L);
+       result = g_utf8_strlen (self, -1);
+#line 1158 "glib-2.0.vapi"
+       return result;
+#line 684 "ProjectLoader.c"
+}
+
+
+#line 76 "ProjectLoader.vala"
+ModelXmlTreeLoader* model_xml_tree_loader_construct (GType object_type, const char* document) {
+#line 690 "ProjectLoader.c"
+       GError * _inner_error_;
+       ModelXmlTreeLoader* self;
+       GMarkupParser _tmp0_ = {0};
+       GMarkupParser parser;
+       GMarkupParseContext* context;
+#line 76 "ProjectLoader.vala"
+       g_return_val_if_fail (document != NULL, NULL);
+#line 698 "ProjectLoader.c"
+       _inner_error_ = NULL;
+       self = (ModelXmlTreeLoader*) g_type_create_instance (object_type);
+#line 77 "ProjectLoader.vala"
+       parser = (_tmp0_.start_element = _model_xml_tree_loader_xml_start_element_gmarkup_parser_start_element_func, _tmp0_.end_element = _model_xml_tree_loader_xml_end_element_gmarkup_parser_end_element_func, _tmp0_.text = NULL, _tmp0_.passthrough = NULL, _tmp0_);
+#line 79 "ProjectLoader.vala"
+       context = g_markup_parse_context_new (&parser, (GMarkupParseFlags) 0, self, NULL);
+#line 705 "ProjectLoader.c"
+       {
+#line 81 "ProjectLoader.vala"
+               g_markup_parse_context_parse (context, document, (gssize) string_get_length (document), &_inner_error_);
+#line 709 "ProjectLoader.c"
+               if (_inner_error_ != NULL) {
+                       if (_inner_error_->domain == G_MARKUP_ERROR) {
+                               goto __catch12_g_markup_error;
+                       }
+                       _g_markup_parse_context_free0 (context);
+                       g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+                       g_clear_error (&_inner_error_);
+                       return NULL;
+               }
+       }
+       goto __finally12;
+       __catch12_g_markup_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+                       _g_error_free0 (e);
+               }
+       }
+       __finally12:
+       if (_inner_error_ != NULL) {
+               _g_markup_parse_context_free0 (context);
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return NULL;
+       }
+       _g_markup_parse_context_free0 (context);
+       return self;
+}
+
+
+#line 76 "ProjectLoader.vala"
+ModelXmlTreeLoader* model_xml_tree_loader_new (const char* document) {
+#line 76 "ProjectLoader.vala"
+       return model_xml_tree_loader_construct (MODEL_TYPE_XML_TREE_LOADER, document);
+#line 746 "ProjectLoader.c"
+}
+
+
+static gpointer _model_xml_element_ref0 (gpointer self) {
+       return self ? model_xml_element_ref (self) : NULL;
+}
+
+
+#line 87 "ProjectLoader.vala"
+static void model_xml_tree_loader_xml_start_element (ModelXmlTreeLoader* self, GMarkupParseContext* c, const char* name, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 757 "ProjectLoader.c"
+       ModelXmlElement* new_element;
+       ModelXmlElement* _tmp1_;
+#line 87 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_XML_TREE_LOADER (self));
+#line 87 "ProjectLoader.vala"
+       g_return_if_fail (c != NULL);
+#line 87 "ProjectLoader.vala"
+       g_return_if_fail (name != NULL);
+#line 89 "ProjectLoader.vala"
+       new_element = model_xml_element_new (name, attr_names, attr_names_length1, attr_values, attr_values_length1, self->priv->current_element);
+#line 90 "ProjectLoader.vala"
+       if (self->root == NULL) {
+#line 770 "ProjectLoader.c"
+               ModelXmlElement* _tmp0_;
+#line 91 "ProjectLoader.vala"
+               self->root = (_tmp0_ = _model_xml_element_ref0 (new_element), _model_xml_element_unref0 (self->root), _tmp0_);
+#line 774 "ProjectLoader.c"
+       } else {
+#line 93 "ProjectLoader.vala"
+               g_assert (self->priv->current_element != NULL);
+#line 94 "ProjectLoader.vala"
+               model_xml_element_add_child (self->priv->current_element, new_element);
+#line 780 "ProjectLoader.c"
+       }
+#line 97 "ProjectLoader.vala"
+       self->priv->current_element = (_tmp1_ = _model_xml_element_ref0 (new_element), _model_xml_element_unref0 (self->priv->current_element), _tmp1_);
+#line 784 "ProjectLoader.c"
+       _model_xml_element_unref0 (new_element);
+}
+
+
+#line 100 "ProjectLoader.vala"
+static void model_xml_tree_loader_xml_end_element (ModelXmlTreeLoader* self, GMarkupParseContext* c, const char* name) {
+#line 791 "ProjectLoader.c"
+       ModelXmlElement* _tmp0_;
+#line 100 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_XML_TREE_LOADER (self));
+#line 100 "ProjectLoader.vala"
+       g_return_if_fail (c != NULL);
+#line 100 "ProjectLoader.vala"
+       g_return_if_fail (name != NULL);
+#line 101 "ProjectLoader.vala"
+       g_assert (self->priv->current_element != NULL);
+#line 102 "ProjectLoader.vala"
+       self->priv->current_element = (_tmp0_ = _model_xml_element_ref0 (model_xml_element_get_parent (self->priv->current_element)), _model_xml_element_unref0 (self->priv->current_element), _tmp0_);
+#line 803 "ProjectLoader.c"
+}
+
+
+static void model_value_xml_tree_loader_init (GValue* value) {
+       value->data[0].v_pointer = NULL;
+}
+
+
+static void model_value_xml_tree_loader_free_value (GValue* value) {
+       if (value->data[0].v_pointer) {
+               model_xml_tree_loader_unref (value->data[0].v_pointer);
+       }
+}
+
+
+static void model_value_xml_tree_loader_copy_value (const GValue* src_value, GValue* dest_value) {
+       if (src_value->data[0].v_pointer) {
+               dest_value->data[0].v_pointer = model_xml_tree_loader_ref (src_value->data[0].v_pointer);
+       } else {
+               dest_value->data[0].v_pointer = NULL;
+       }
+}
+
+
+static gpointer model_value_xml_tree_loader_peek_pointer (const GValue* value) {
+       return value->data[0].v_pointer;
+}
+
+
+static gchar* model_value_xml_tree_loader_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+       if (collect_values[0].v_pointer) {
+               ModelXmlTreeLoader* object;
+               object = collect_values[0].v_pointer;
+               if (object->parent_instance.g_class == NULL) {
+                       return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+               } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+                       return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+               }
+               value->data[0].v_pointer = model_xml_tree_loader_ref (object);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       return NULL;
+}
+
+
+static gchar* model_value_xml_tree_loader_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+       ModelXmlTreeLoader** object_p;
+       object_p = collect_values[0].v_pointer;
+       if (!object_p) {
+               return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+       }
+       if (!value->data[0].v_pointer) {
+               *object_p = NULL;
+       } else if (collect_flags && G_VALUE_NOCOPY_CONTENTS) {
+               *object_p = value->data[0].v_pointer;
+       } else {
+               *object_p = model_xml_tree_loader_ref (value->data[0].v_pointer);
+       }
+       return NULL;
+}
+
+
+GParamSpec* model_param_spec_xml_tree_loader (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+       ModelParamSpecXmlTreeLoader* spec;
+       g_return_val_if_fail (g_type_is_a (object_type, MODEL_TYPE_XML_TREE_LOADER), NULL);
+       spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+       G_PARAM_SPEC (spec)->value_type = object_type;
+       return G_PARAM_SPEC (spec);
+}
+
+
+gpointer model_value_get_xml_tree_loader (const GValue* value) {
+       g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_XML_TREE_LOADER), NULL);
+       return value->data[0].v_pointer;
+}
+
+
+void model_value_set_xml_tree_loader (GValue* value, gpointer v_object) {
+       ModelXmlTreeLoader* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_XML_TREE_LOADER));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, MODEL_TYPE_XML_TREE_LOADER));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+               value->data[0].v_pointer = v_object;
+               model_xml_tree_loader_ref (value->data[0].v_pointer);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               model_xml_tree_loader_unref (old);
+       }
+}
+
+
+void model_value_take_xml_tree_loader (GValue* value, gpointer v_object) {
+       ModelXmlTreeLoader* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_XML_TREE_LOADER));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, MODEL_TYPE_XML_TREE_LOADER));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+               value->data[0].v_pointer = v_object;
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               model_xml_tree_loader_unref (old);
+       }
+}
+
+
+static void model_xml_tree_loader_class_init (ModelXmlTreeLoaderClass * klass) {
+       model_xml_tree_loader_parent_class = g_type_class_peek_parent (klass);
+       MODEL_XML_TREE_LOADER_CLASS (klass)->finalize = model_xml_tree_loader_finalize;
+       g_type_class_add_private (klass, sizeof (ModelXmlTreeLoaderPrivate));
+}
+
+
+static void model_xml_tree_loader_instance_init (ModelXmlTreeLoader * self) {
+       self->priv = MODEL_XML_TREE_LOADER_GET_PRIVATE (self);
+       self->priv->current_element = NULL;
+       self->root = NULL;
+       self->ref_count = 1;
+}
+
+
+static void model_xml_tree_loader_finalize (ModelXmlTreeLoader* obj) {
+       ModelXmlTreeLoader * self;
+       self = MODEL_XML_TREE_LOADER (obj);
+       _model_xml_element_unref0 (self->priv->current_element);
+       _model_xml_element_unref0 (self->root);
+}
+
+
+GType model_xml_tree_loader_get_type (void) {
+       static volatile gsize model_xml_tree_loader_type_id__volatile = 0;
+       if (g_once_init_enter (&model_xml_tree_loader_type_id__volatile)) {
+               static const GTypeValueTable g_define_type_value_table = { model_value_xml_tree_loader_init, model_value_xml_tree_loader_free_value, model_value_xml_tree_loader_copy_value, model_value_xml_tree_loader_peek_pointer, "p", model_value_xml_tree_loader_collect_value, "p", model_value_xml_tree_loader_lcopy_value };
+               static const GTypeInfo g_define_type_info = { sizeof (ModelXmlTreeLoaderClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_xml_tree_loader_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelXmlTreeLoader), 0, (GInstanceInitFunc) model_xml_tree_loader_instance_init, &g_define_type_value_table };
+               static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+               GType model_xml_tree_loader_type_id;
+               model_xml_tree_loader_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ModelXmlTreeLoader", &g_define_type_info, &g_define_type_fundamental_info, 0);
+               g_once_init_leave (&model_xml_tree_loader_type_id__volatile, model_xml_tree_loader_type_id);
+       }
+       return model_xml_tree_loader_type_id__volatile;
+}
+
+
+gpointer model_xml_tree_loader_ref (gpointer instance) {
+       ModelXmlTreeLoader* self;
+       self = instance;
+       g_atomic_int_inc (&self->ref_count);
+       return instance;
+}
+
+
+void model_xml_tree_loader_unref (gpointer instance) {
+       ModelXmlTreeLoader* self;
+       self = instance;
+       if (g_atomic_int_dec_and_test (&self->ref_count)) {
+               MODEL_XML_TREE_LOADER_GET_CLASS (self)->finalize (self);
+               g_type_free_instance ((GTypeInstance *) self);
+       }
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+#line 114 "ProjectLoader.vala"
+ModelProjectBuilder* model_project_builder_construct (GType object_type, ModelLoaderHandler* handler) {
+#line 979 "ProjectLoader.c"
+       ModelProjectBuilder * self;
+       ModelLoaderHandler* _tmp0_;
+#line 114 "ProjectLoader.vala"
+       g_return_val_if_fail (MODEL_IS_LOADER_HANDLER (handler), NULL);
+#line 114 "ProjectLoader.vala"
+       self = (ModelProjectBuilder*) g_object_new (object_type, NULL);
+#line 115 "ProjectLoader.vala"
+       self->priv->handler = (_tmp0_ = _g_object_ref0 (handler), _g_object_unref0 (self->priv->handler), _tmp0_);
+#line 988 "ProjectLoader.c"
+       return self;
+}
+
+
+#line 114 "ProjectLoader.vala"
+ModelProjectBuilder* model_project_builder_new (ModelLoaderHandler* handler) {
+#line 114 "ProjectLoader.vala"
+       return model_project_builder_construct (MODEL_TYPE_PROJECT_BUILDER, handler);
+#line 997 "ProjectLoader.c"
+}
+
+
+#line 118 "ProjectLoader.vala"
+static gboolean model_project_builder_check_name (ModelProjectBuilder* self, const char* expected_name, ModelXmlElement* node) {
+#line 1003 "ProjectLoader.c"
+       gboolean result = FALSE;
+       char* _tmp0_;
+#line 118 "ProjectLoader.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT_BUILDER (self), FALSE);
+#line 118 "ProjectLoader.vala"
+       g_return_val_if_fail (expected_name != NULL, FALSE);
+#line 118 "ProjectLoader.vala"
+       g_return_val_if_fail (MODEL_IS_XML_ELEMENT (node), FALSE);
+#line 119 "ProjectLoader.vala"
+       if (_vala_strcmp0 (model_xml_element_get_name (node), expected_name) == 0) {
+#line 1014 "ProjectLoader.c"
+               result = TRUE;
+#line 120 "ProjectLoader.vala"
+               return result;
+#line 1018 "ProjectLoader.c"
+       }
+#line 123 "ProjectLoader.vala"
+       g_signal_emit_by_name (self, "error-occurred", _tmp0_ = g_strdup_printf ("expected %s, got %s", expected_name, model_xml_element_get_name (node)));
+#line 1022 "ProjectLoader.c"
+       _g_free0 (_tmp0_);
+       result = FALSE;
+#line 124 "ProjectLoader.vala"
+       return result;
+#line 1027 "ProjectLoader.c"
+}
+
+
+#line 127 "ProjectLoader.vala"
+static void model_project_builder_handle_clip (ModelProjectBuilder* self, ModelXmlElement* clip) {
+#line 127 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_PROJECT_BUILDER (self));
+#line 127 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_XML_ELEMENT (clip));
+#line 128 "ProjectLoader.vala"
+       if (model_project_builder_check_name (self, "clip", clip)) {
+#line 129 "ProjectLoader.vala"
+               if (model_loader_handler_commit_clip (self->priv->handler, clip->attribute_names, clip->attribute_names_length1, clip->attribute_values, clip->attribute_values_length1)) {
+#line 130 "ProjectLoader.vala"
+                       if (gee_collection_get_size (GEE_COLLECTION (model_xml_element_get_children (clip))) != 0) {
+#line 131 "ProjectLoader.vala"
+                               g_signal_emit_by_name (self, "error-occurred", "clip cannot have children");
+#line 1045 "ProjectLoader.c"
+                       }
+#line 133 "ProjectLoader.vala"
+                       model_loader_handler_leave_clip (self->priv->handler);
+#line 1049 "ProjectLoader.c"
+               }
+       }
+}
+
+
+#line 138 "ProjectLoader.vala"
+static void model_project_builder_handle_track (ModelProjectBuilder* self, ModelXmlElement* track) {
+#line 138 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_PROJECT_BUILDER (self));
+#line 138 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_XML_ELEMENT (track));
+#line 139 "ProjectLoader.vala"
+       if (model_project_builder_check_name (self, "track", track)) {
+#line 140 "ProjectLoader.vala"
+               logging_emit (G_OBJECT (self), LOGGING_FACILITY_LOADING, LOGGING_LEVEL_VERBOSE, "loading track");
+#line 141 "ProjectLoader.vala"
+               if (model_loader_handler_commit_track (self->priv->handler, track->attribute_names, track->attribute_names_length1, track->attribute_values, track->attribute_values_length1)) {
+#line 1067 "ProjectLoader.c"
+                       {
+                               GeeIterator* _child_it;
+                               _child_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (model_xml_element_get_children (track)));
+#line 142 "ProjectLoader.vala"
+                               while (TRUE) {
+#line 1073 "ProjectLoader.c"
+                                       ModelXmlElement* child;
+#line 142 "ProjectLoader.vala"
+                                       if (!gee_iterator_next (_child_it)) {
+#line 142 "ProjectLoader.vala"
+                                               break;
+#line 1079 "ProjectLoader.c"
+                                       }
+#line 142 "ProjectLoader.vala"
+                                       child = (ModelXmlElement*) gee_iterator_get (_child_it);
+#line 143 "ProjectLoader.vala"
+                                       model_project_builder_handle_clip (self, child);
+#line 1085 "ProjectLoader.c"
+                                       _model_xml_element_unref0 (child);
+                               }
+                               _g_object_unref0 (_child_it);
+                       }
+#line 145 "ProjectLoader.vala"
+                       model_loader_handler_leave_track (self->priv->handler);
+#line 1092 "ProjectLoader.c"
+               }
+       }
+}
+
+
+#line 150 "ProjectLoader.vala"
+static void model_project_builder_handle_preference (ModelProjectBuilder* self, ModelXmlElement* preference) {
+#line 150 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_PROJECT_BUILDER (self));
+#line 150 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_XML_ELEMENT (preference));
+#line 151 "ProjectLoader.vala"
+       if (_vala_strcmp0 ("click", model_xml_element_get_name (preference)) == 0) {
+#line 152 "ProjectLoader.vala"
+               model_loader_handler_commit_click (self->priv->handler, preference->attribute_names, preference->attribute_names_length1, preference->attribute_values, preference->attribute_values_length1);
+#line 1108 "ProjectLoader.c"
+       } else {
+#line 153 "ProjectLoader.vala"
+               if (_vala_strcmp0 ("library", model_xml_element_get_name (preference)) == 0) {
+#line 154 "ProjectLoader.vala"
+                       model_loader_handler_commit_library_preference (self->priv->handler, preference->attribute_names, preference->attribute_names_length1, preference->attribute_values, preference->attribute_values_length1);
+#line 1114 "ProjectLoader.c"
+               } else {
+                       char* _tmp0_;
+#line 157 "ProjectLoader.vala"
+                       g_signal_emit_by_name (self, "error-occurred", _tmp0_ = g_strdup_printf ("Unknown preference: %s", model_xml_element_get_name (preference)));
+#line 1119 "ProjectLoader.c"
+                       _g_free0 (_tmp0_);
+               }
+       }
+}
+
+
+#line 161 "ProjectLoader.vala"
+static void model_project_builder_handle_time_signature (ModelProjectBuilder* self, ModelXmlElement* time_signature) {
+#line 161 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_PROJECT_BUILDER (self));
+#line 161 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_XML_ELEMENT (time_signature));
+#line 1132 "ProjectLoader.c"
+       {
+               GeeIterator* _child_it;
+               _child_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (model_xml_element_get_children (time_signature)));
+#line 162 "ProjectLoader.vala"
+               while (TRUE) {
+#line 1138 "ProjectLoader.c"
+                       ModelXmlElement* child;
+#line 162 "ProjectLoader.vala"
+                       if (!gee_iterator_next (_child_it)) {
+#line 162 "ProjectLoader.vala"
+                               break;
+#line 1144 "ProjectLoader.c"
+                       }
+#line 162 "ProjectLoader.vala"
+                       child = (ModelXmlElement*) gee_iterator_get (_child_it);
+#line 163 "ProjectLoader.vala"
+                       if (model_project_builder_check_name (self, "entry", child)) {
+#line 164 "ProjectLoader.vala"
+                               if (!model_loader_handler_commit_time_signature_entry (self->priv->handler, child->attribute_names, child->attribute_names_length1, child->attribute_values, child->attribute_values_length1)) {
+#line 166 "ProjectLoader.vala"
+                                       g_signal_emit_by_name (self, "error-occurred", "Improper time signature node");
+#line 1154 "ProjectLoader.c"
+                               }
+                       }
+                       _model_xml_element_unref0 (child);
+               }
+               _g_object_unref0 (_child_it);
+       }
+}
+
+
+#line 172 "ProjectLoader.vala"
+static void model_project_builder_handle_tempo (ModelProjectBuilder* self, ModelXmlElement* tempo) {
+#line 172 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_PROJECT_BUILDER (self));
+#line 172 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_XML_ELEMENT (tempo));
+#line 1170 "ProjectLoader.c"
+       {
+               GeeIterator* _child_it;
+               _child_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (model_xml_element_get_children (tempo)));
+#line 173 "ProjectLoader.vala"
+               while (TRUE) {
+#line 1176 "ProjectLoader.c"
+                       ModelXmlElement* child;
+#line 173 "ProjectLoader.vala"
+                       if (!gee_iterator_next (_child_it)) {
+#line 173 "ProjectLoader.vala"
+                               break;
+#line 1182 "ProjectLoader.c"
+                       }
+#line 173 "ProjectLoader.vala"
+                       child = (ModelXmlElement*) gee_iterator_get (_child_it);
+#line 174 "ProjectLoader.vala"
+                       if (model_project_builder_check_name (self, "entry", child)) {
+#line 175 "ProjectLoader.vala"
+                               if (!model_loader_handler_commit_tempo_entry (self->priv->handler, child->attribute_names, child->attribute_names_length1, child->attribute_values, child->attribute_values_length1)) {
+#line 176 "ProjectLoader.vala"
+                                       g_signal_emit_by_name (self, "error-occurred", "Improper tempo node");
+#line 1192 "ProjectLoader.c"
+                               }
+                       }
+                       _model_xml_element_unref0 (child);
+               }
+               _g_object_unref0 (_child_it);
+       }
+}
+
+
+#line 182 "ProjectLoader.vala"
+static void model_project_builder_handle_map (ModelProjectBuilder* self, ModelXmlElement* map) {
+#line 1204 "ProjectLoader.c"
+       GQuark _tmp1_;
+       const char* _tmp0_;
+       static GQuark _tmp1__label0 = 0;
+       static GQuark _tmp1__label1 = 0;
+#line 182 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_PROJECT_BUILDER (self));
+#line 182 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_XML_ELEMENT (map));
+#line 1213 "ProjectLoader.c"
+       _tmp0_ = model_xml_element_get_name (map);
+       _tmp1_ = (NULL == _tmp0_) ? 0 : g_quark_from_string (_tmp0_);
+       if (_tmp1_ == ((0 != _tmp1__label0) ? _tmp1__label0 : (_tmp1__label0 = g_quark_from_static_string ("tempo"))))
+       switch (0) {
+               default:
+               {
+#line 185 "ProjectLoader.vala"
+                       model_project_builder_handle_tempo (self, map);
+#line 186 "ProjectLoader.vala"
+                       break;
+#line 1224 "ProjectLoader.c"
+               }
+       } else if (_tmp1_ == ((0 != _tmp1__label1) ? _tmp1__label1 : (_tmp1__label1 = g_quark_from_static_string ("time_signature"))))
+       switch (0) {
+               default:
+               {
+#line 188 "ProjectLoader.vala"
+                       model_project_builder_handle_time_signature (self, map);
+#line 189 "ProjectLoader.vala"
+                       break;
+#line 1234 "ProjectLoader.c"
+               }
+       } else
+       switch (0) {
+               default:
+               {
+#line 191 "ProjectLoader.vala"
+                       g_signal_emit_by_name (self, "error-occurred", "improper map node");
+#line 192 "ProjectLoader.vala"
+                       break;
+#line 1244 "ProjectLoader.c"
+               }
+       }
+}
+
+
+#line 196 "ProjectLoader.vala"
+static void model_project_builder_handle_library (ModelProjectBuilder* self, ModelXmlElement* library) {
+#line 196 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_PROJECT_BUILDER (self));
+#line 196 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_XML_ELEMENT (library));
+#line 197 "ProjectLoader.vala"
+       if (model_loader_handler_commit_library (self->priv->handler, library->attribute_names, library->attribute_names_length1, library->attribute_values, library->attribute_values_length1)) {
+#line 1258 "ProjectLoader.c"
+               {
+                       GeeIterator* _child_it;
+                       _child_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (model_xml_element_get_children (library)));
+#line 198 "ProjectLoader.vala"
+                       while (TRUE) {
+#line 1264 "ProjectLoader.c"
+                               ModelXmlElement* child;
+#line 198 "ProjectLoader.vala"
+                               if (!gee_iterator_next (_child_it)) {
+#line 198 "ProjectLoader.vala"
+                                       break;
+#line 1270 "ProjectLoader.c"
+                               }
+#line 198 "ProjectLoader.vala"
+                               child = (ModelXmlElement*) gee_iterator_get (_child_it);
+#line 199 "ProjectLoader.vala"
+                               if (!model_loader_handler_commit_clipfile (self->priv->handler, child->attribute_names, child->attribute_names_length1, child->attribute_values, child->attribute_values_length1)) {
+#line 200 "ProjectLoader.vala"
+                                       g_signal_emit_by_name (self, "error-occurred", "Improper library node");
+#line 1278 "ProjectLoader.c"
+                               }
+                               _model_xml_element_unref0 (child);
+                       }
+                       _g_object_unref0 (_child_it);
+               }
+#line 202 "ProjectLoader.vala"
+               model_loader_handler_leave_library (self->priv->handler);
+#line 1286 "ProjectLoader.c"
+       }
+}
+
+
+#line 206 "ProjectLoader.vala"
+static void model_project_builder_handle_tracks (ModelProjectBuilder* self, ModelXmlElement* tracks) {
+#line 206 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_PROJECT_BUILDER (self));
+#line 206 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_XML_ELEMENT (tracks));
+#line 1297 "ProjectLoader.c"
+       {
+               GeeIterator* _child_it;
+               _child_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (model_xml_element_get_children (tracks)));
+#line 207 "ProjectLoader.vala"
+               while (TRUE) {
+#line 1303 "ProjectLoader.c"
+                       ModelXmlElement* child;
+#line 207 "ProjectLoader.vala"
+                       if (!gee_iterator_next (_child_it)) {
+#line 207 "ProjectLoader.vala"
+                               break;
+#line 1309 "ProjectLoader.c"
+                       }
+#line 207 "ProjectLoader.vala"
+                       child = (ModelXmlElement*) gee_iterator_get (_child_it);
+#line 208 "ProjectLoader.vala"
+                       model_project_builder_handle_track (self, child);
+#line 1315 "ProjectLoader.c"
+                       _model_xml_element_unref0 (child);
+               }
+               _g_object_unref0 (_child_it);
+       }
+}
+
+
+#line 212 "ProjectLoader.vala"
+static void model_project_builder_handle_preferences (ModelProjectBuilder* self, ModelXmlElement* preferences) {
+#line 212 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_PROJECT_BUILDER (self));
+#line 212 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_XML_ELEMENT (preferences));
+#line 1329 "ProjectLoader.c"
+       {
+               GeeIterator* _child_it;
+               _child_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (model_xml_element_get_children (preferences)));
+#line 213 "ProjectLoader.vala"
+               while (TRUE) {
+#line 1335 "ProjectLoader.c"
+                       ModelXmlElement* child;
+#line 213 "ProjectLoader.vala"
+                       if (!gee_iterator_next (_child_it)) {
+#line 213 "ProjectLoader.vala"
+                               break;
+#line 1341 "ProjectLoader.c"
+                       }
+#line 213 "ProjectLoader.vala"
+                       child = (ModelXmlElement*) gee_iterator_get (_child_it);
+#line 214 "ProjectLoader.vala"
+                       model_project_builder_handle_preference (self, child);
+#line 1347 "ProjectLoader.c"
+                       _model_xml_element_unref0 (child);
+               }
+               _g_object_unref0 (_child_it);
+       }
+}
+
+
+#line 217 "ProjectLoader.vala"
+static void model_project_builder_handle_maps (ModelProjectBuilder* self, ModelXmlElement* maps) {
+#line 217 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_PROJECT_BUILDER (self));
+#line 217 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_XML_ELEMENT (maps));
+#line 1361 "ProjectLoader.c"
+       {
+               GeeIterator* _child_it;
+               _child_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (model_xml_element_get_children (maps)));
+#line 218 "ProjectLoader.vala"
+               while (TRUE) {
+#line 1367 "ProjectLoader.c"
+                       ModelXmlElement* child;
+#line 218 "ProjectLoader.vala"
+                       if (!gee_iterator_next (_child_it)) {
+#line 218 "ProjectLoader.vala"
+                               break;
+#line 1373 "ProjectLoader.c"
+                       }
+#line 218 "ProjectLoader.vala"
+                       child = (ModelXmlElement*) gee_iterator_get (_child_it);
+#line 219 "ProjectLoader.vala"
+                       model_project_builder_handle_map (self, child);
+#line 1379 "ProjectLoader.c"
+                       _model_xml_element_unref0 (child);
+               }
+               _g_object_unref0 (_child_it);
+       }
+}
+
+
+#line 222 "ProjectLoader.vala"
+gboolean model_project_builder_check_project (ModelProjectBuilder* self, ModelXmlElement* root) {
+#line 1389 "ProjectLoader.c"
+       gboolean result = FALSE;
+       gboolean _tmp0_ = FALSE;
+#line 222 "ProjectLoader.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT_BUILDER (self), FALSE);
+#line 222 "ProjectLoader.vala"
+       g_return_val_if_fail ((root == NULL) || MODEL_IS_XML_ELEMENT (root), FALSE);
+#line 223 "ProjectLoader.vala"
+       if (root == NULL) {
+#line 224 "ProjectLoader.vala"
+               g_signal_emit_by_name (self, "error-occurred", "Invalid XML file!");
+#line 1400 "ProjectLoader.c"
+               result = FALSE;
+#line 225 "ProjectLoader.vala"
+               return result;
+#line 1404 "ProjectLoader.c"
+       }
+#line 228 "ProjectLoader.vala"
+       if (model_project_builder_check_name (self, "marina", root)) {
+#line 229 "ProjectLoader.vala"
+               _tmp0_ = model_loader_handler_commit_marina (self->priv->handler, root->attribute_names, root->attribute_names_length1, root->attribute_values, root->attribute_values_length1);
+#line 1410 "ProjectLoader.c"
+       } else {
+#line 228 "ProjectLoader.vala"
+               _tmp0_ = FALSE;
+#line 1414 "ProjectLoader.c"
+       }
+#line 228 "ProjectLoader.vala"
+       if (_tmp0_) {
+#line 1418 "ProjectLoader.c"
+               gboolean _tmp1_ = FALSE;
+               gboolean _tmp2_ = FALSE;
+               gboolean _tmp3_ = FALSE;
+               ModelXmlElement* _tmp4_;
+               gboolean _tmp5_;
+               gboolean _tmp8_ = FALSE;
+#line 230 "ProjectLoader.vala"
+               if (gee_collection_get_size (GEE_COLLECTION (model_xml_element_get_children (root))) != 3) {
+#line 230 "ProjectLoader.vala"
+                       _tmp1_ = gee_collection_get_size (GEE_COLLECTION (model_xml_element_get_children (root))) != 4;
+#line 1429 "ProjectLoader.c"
+               } else {
+#line 230 "ProjectLoader.vala"
+                       _tmp1_ = FALSE;
+#line 1433 "ProjectLoader.c"
+               }
+#line 230 "ProjectLoader.vala"
+               if (_tmp1_) {
+#line 231 "ProjectLoader.vala"
+                       g_signal_emit_by_name (self, "error-occurred", "Improper number of children!");
+#line 1439 "ProjectLoader.c"
+                       result = FALSE;
+#line 232 "ProjectLoader.vala"
+                       return result;
+#line 1443 "ProjectLoader.c"
+               }
+#line 235 "ProjectLoader.vala"
+               if ((_tmp5_ = !model_project_builder_check_name (self, "library", _tmp4_ = (ModelXmlElement*) gee_abstract_list_get (GEE_ABSTRACT_LIST (model_xml_element_get_children (root)), 0)), _model_xml_element_unref0 (_tmp4_), _tmp5_)) {
+#line 235 "ProjectLoader.vala"
+                       _tmp3_ = TRUE;
+#line 1449 "ProjectLoader.c"
+               } else {
+                       ModelXmlElement* _tmp6_;
+#line 236 "ProjectLoader.vala"
+                       _tmp3_ = !model_project_builder_check_name (self, "tracks", _tmp6_ = (ModelXmlElement*) gee_abstract_list_get (GEE_ABSTRACT_LIST (model_xml_element_get_children (root)), 1));
+#line 1454 "ProjectLoader.c"
+                       _model_xml_element_unref0 (_tmp6_);
+               }
+#line 235 "ProjectLoader.vala"
+               if (_tmp3_) {
+#line 235 "ProjectLoader.vala"
+                       _tmp2_ = TRUE;
+#line 1461 "ProjectLoader.c"
+               } else {
+                       ModelXmlElement* _tmp7_;
+#line 237 "ProjectLoader.vala"
+                       _tmp2_ = !model_project_builder_check_name (self, "preferences", _tmp7_ = (ModelXmlElement*) gee_abstract_list_get (GEE_ABSTRACT_LIST (model_xml_element_get_children (root)), 2));
+#line 1466 "ProjectLoader.c"
+                       _model_xml_element_unref0 (_tmp7_);
+               }
+#line 235 "ProjectLoader.vala"
+               if (_tmp2_) {
+#line 1471 "ProjectLoader.c"
+                       result = FALSE;
+#line 238 "ProjectLoader.vala"
+                       return result;
+#line 1475 "ProjectLoader.c"
+               }
+#line 240 "ProjectLoader.vala"
+               if (gee_collection_get_size (GEE_COLLECTION (model_xml_element_get_children (root))) == 4) {
+#line 1479 "ProjectLoader.c"
+                       ModelXmlElement* _tmp9_;
+#line 240 "ProjectLoader.vala"
+                       _tmp8_ = !model_project_builder_check_name (self, "maps", _tmp9_ = (ModelXmlElement*) gee_abstract_list_get (GEE_ABSTRACT_LIST (model_xml_element_get_children (root)), 3));
+#line 1483 "ProjectLoader.c"
+                       _model_xml_element_unref0 (_tmp9_);
+               } else {
+#line 240 "ProjectLoader.vala"
+                       _tmp8_ = FALSE;
+#line 1488 "ProjectLoader.c"
+               }
+#line 240 "ProjectLoader.vala"
+               if (_tmp8_) {
+#line 1492 "ProjectLoader.c"
+                       result = FALSE;
+#line 241 "ProjectLoader.vala"
+                       return result;
+#line 1496 "ProjectLoader.c"
+               }
+       } else {
+               result = FALSE;
+#line 244 "ProjectLoader.vala"
+               return result;
+#line 1502 "ProjectLoader.c"
+       }
+       result = TRUE;
+#line 245 "ProjectLoader.vala"
+       return result;
+#line 1507 "ProjectLoader.c"
+}
+
+
+#line 248 "ProjectLoader.vala"
+void model_project_builder_build_project (ModelProjectBuilder* self, ModelXmlElement* root) {
+#line 1513 "ProjectLoader.c"
+       ModelXmlElement* _tmp0_;
+       ModelXmlElement* _tmp1_;
+       ModelXmlElement* _tmp2_;
+#line 248 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_PROJECT_BUILDER (self));
+#line 248 "ProjectLoader.vala"
+       g_return_if_fail ((root == NULL) || MODEL_IS_XML_ELEMENT (root));
+#line 249 "ProjectLoader.vala"
+       model_project_builder_handle_library (self, _tmp0_ = (ModelXmlElement*) gee_abstract_list_get (GEE_ABSTRACT_LIST (model_xml_element_get_children (root)), 0));
+#line 1523 "ProjectLoader.c"
+       _model_xml_element_unref0 (_tmp0_);
+#line 250 "ProjectLoader.vala"
+       model_project_builder_handle_tracks (self, _tmp1_ = (ModelXmlElement*) gee_abstract_list_get (GEE_ABSTRACT_LIST (model_xml_element_get_children (root)), 1));
+#line 1527 "ProjectLoader.c"
+       _model_xml_element_unref0 (_tmp1_);
+#line 251 "ProjectLoader.vala"
+       model_project_builder_handle_preferences (self, _tmp2_ = (ModelXmlElement*) gee_abstract_list_get (GEE_ABSTRACT_LIST (model_xml_element_get_children (root)), 2));
+#line 1531 "ProjectLoader.c"
+       _model_xml_element_unref0 (_tmp2_);
+#line 252 "ProjectLoader.vala"
+       if (gee_collection_get_size (GEE_COLLECTION (model_xml_element_get_children (root))) == 4) {
+#line 1535 "ProjectLoader.c"
+               ModelXmlElement* _tmp3_;
+#line 253 "ProjectLoader.vala"
+               model_project_builder_handle_maps (self, _tmp3_ = (ModelXmlElement*) gee_abstract_list_get (GEE_ABSTRACT_LIST (model_xml_element_get_children (root)), 3));
+#line 1539 "ProjectLoader.c"
+               _model_xml_element_unref0 (_tmp3_);
+       }
+#line 256 "ProjectLoader.vala"
+       model_loader_handler_leave_marina (self->priv->handler);
+#line 1544 "ProjectLoader.c"
+}
+
+
+static void model_project_builder_class_init (ModelProjectBuilderClass * klass) {
+       model_project_builder_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ModelProjectBuilderPrivate));
+       G_OBJECT_CLASS (klass)->finalize = model_project_builder_finalize;
+       g_signal_new ("error_occurred", MODEL_TYPE_PROJECT_BUILDER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING);
+}
+
+
+static void model_project_builder_instance_init (ModelProjectBuilder * self) {
+       self->priv = MODEL_PROJECT_BUILDER_GET_PRIVATE (self);
+}
+
+
+static void model_project_builder_finalize (GObject* obj) {
+       ModelProjectBuilder * self;
+       self = MODEL_PROJECT_BUILDER (obj);
+       _g_object_unref0 (self->priv->handler);
+       G_OBJECT_CLASS (model_project_builder_parent_class)->finalize (obj);
+}
+
+
+GType model_project_builder_get_type (void) {
+       static volatile gsize model_project_builder_type_id__volatile = 0;
+       if (g_once_init_enter (&model_project_builder_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelProjectBuilderClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_project_builder_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelProjectBuilder), 0, (GInstanceInitFunc) model_project_builder_instance_init, NULL };
+               GType model_project_builder_type_id;
+               model_project_builder_type_id = g_type_register_static (G_TYPE_OBJECT, "ModelProjectBuilder", &g_define_type_info, 0);
+               g_once_init_leave (&model_project_builder_type_id__volatile, model_project_builder_type_id);
+       }
+       return model_project_builder_type_id__volatile;
+}
+
+
+#line 272 "ProjectLoader.vala"
+ModelXmlElement* model_xml_element_construct (GType object_type, const char* name, char** attribute_names, int attribute_names_length1, char** attribute_values, int attribute_values_length1, ModelXmlElement* parent) {
+#line 1583 "ProjectLoader.c"
+       ModelXmlElement* self;
+       char** _tmp1_;
+       gint _tmp0_;
+       char** _tmp3_;
+       gint _tmp2_;
+       GeeArrayList* _tmp4_;
+#line 272 "ProjectLoader.vala"
+       g_return_val_if_fail (name != NULL, NULL);
+#line 272 "ProjectLoader.vala"
+       g_return_val_if_fail ((parent == NULL) || MODEL_IS_XML_ELEMENT (parent), NULL);
+#line 1594 "ProjectLoader.c"
+       self = (ModelXmlElement*) g_type_create_instance (object_type);
+#line 274 "ProjectLoader.vala"
+       model_xml_element_set_name (self, name);
+#line 276 "ProjectLoader.vala"
+       self->attribute_names = (_tmp1_ = copy_array (attribute_names, attribute_names_length1, &_tmp0_), self->attribute_names = (_vala_array_free (self->attribute_names, self->attribute_names_length1, (GDestroyNotify) g_free), NULL), self->attribute_names_length1 = _tmp0_, _tmp1_);
+#line 277 "ProjectLoader.vala"
+       self->attribute_values = (_tmp3_ = copy_array (attribute_values, attribute_values_length1, &_tmp2_), self->attribute_values = (_vala_array_free (self->attribute_values, self->attribute_values_length1, (GDestroyNotify) g_free), NULL), self->attribute_values_length1 = _tmp2_, _tmp3_);
+#line 278 "ProjectLoader.vala"
+       model_xml_element_set_parent (self, parent);
+#line 279 "ProjectLoader.vala"
+       self->priv->_children = (_tmp4_ = gee_array_list_new (MODEL_TYPE_XML_ELEMENT, (GBoxedCopyFunc) model_xml_element_ref, model_xml_element_unref, NULL), _g_object_unref0 (self->priv->_children), _tmp4_);
+#line 1606 "ProjectLoader.c"
+       return self;
+}
+
+
+#line 272 "ProjectLoader.vala"
+ModelXmlElement* model_xml_element_new (const char* name, char** attribute_names, int attribute_names_length1, char** attribute_values, int attribute_values_length1, ModelXmlElement* parent) {
+#line 272 "ProjectLoader.vala"
+       return model_xml_element_construct (MODEL_TYPE_XML_ELEMENT, name, attribute_names, attribute_names_length1, attribute_values, attribute_values_length1, parent);
+#line 1615 "ProjectLoader.c"
+}
+
+
+#line 282 "ProjectLoader.vala"
+void model_xml_element_add_child (ModelXmlElement* self, ModelXmlElement* child_element) {
+#line 282 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_XML_ELEMENT (self));
+#line 282 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_XML_ELEMENT (child_element));
+#line 283 "ProjectLoader.vala"
+       gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->priv->_children), child_element);
+#line 1627 "ProjectLoader.c"
+}
+
+
+const char* model_xml_element_get_name (ModelXmlElement* self) {
+       const char* result;
+       g_return_val_if_fail (MODEL_IS_XML_ELEMENT (self), NULL);
+       result = self->priv->_name;
+#line 261 "ProjectLoader.vala"
+       return result;
+#line 1637 "ProjectLoader.c"
+}
+
+
+static void model_xml_element_set_name (ModelXmlElement* self, const char* value) {
+       char* _tmp0_;
+       g_return_if_fail (MODEL_IS_XML_ELEMENT (self));
+       self->priv->_name = (_tmp0_ = g_strdup (value), _g_free0 (self->priv->_name), _tmp0_);
+}
+
+
+GeeArrayList* model_xml_element_get_children (ModelXmlElement* self) {
+       GeeArrayList* result;
+       g_return_val_if_fail (MODEL_IS_XML_ELEMENT (self), NULL);
+       result = self->priv->_children;
+#line 267 "ProjectLoader.vala"
+       return result;
+#line 1654 "ProjectLoader.c"
+}
+
+
+ModelXmlElement* model_xml_element_get_parent (ModelXmlElement* self) {
+       ModelXmlElement* result;
+       g_return_val_if_fail (MODEL_IS_XML_ELEMENT (self), NULL);
+       result = self->priv->_parent;
+#line 269 "ProjectLoader.vala"
+       return result;
+#line 1664 "ProjectLoader.c"
+}
+
+
+static void model_xml_element_set_parent (ModelXmlElement* self, ModelXmlElement* value) {
+       g_return_if_fail (MODEL_IS_XML_ELEMENT (self));
+       self->priv->_parent = value;
+}
+
+
+static void model_value_xml_element_init (GValue* value) {
+       value->data[0].v_pointer = NULL;
+}
+
+
+static void model_value_xml_element_free_value (GValue* value) {
+       if (value->data[0].v_pointer) {
+               model_xml_element_unref (value->data[0].v_pointer);
+       }
+}
+
+
+static void model_value_xml_element_copy_value (const GValue* src_value, GValue* dest_value) {
+       if (src_value->data[0].v_pointer) {
+               dest_value->data[0].v_pointer = model_xml_element_ref (src_value->data[0].v_pointer);
+       } else {
+               dest_value->data[0].v_pointer = NULL;
+       }
+}
+
+
+static gpointer model_value_xml_element_peek_pointer (const GValue* value) {
+       return value->data[0].v_pointer;
+}
+
+
+static gchar* model_value_xml_element_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+       if (collect_values[0].v_pointer) {
+               ModelXmlElement* object;
+               object = collect_values[0].v_pointer;
+               if (object->parent_instance.g_class == NULL) {
+                       return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+               } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+                       return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+               }
+               value->data[0].v_pointer = model_xml_element_ref (object);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       return NULL;
+}
+
+
+static gchar* model_value_xml_element_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+       ModelXmlElement** object_p;
+       object_p = collect_values[0].v_pointer;
+       if (!object_p) {
+               return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+       }
+       if (!value->data[0].v_pointer) {
+               *object_p = NULL;
+       } else if (collect_flags && G_VALUE_NOCOPY_CONTENTS) {
+               *object_p = value->data[0].v_pointer;
+       } else {
+               *object_p = model_xml_element_ref (value->data[0].v_pointer);
+       }
+       return NULL;
+}
+
+
+GParamSpec* model_param_spec_xml_element (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+       ModelParamSpecXmlElement* spec;
+       g_return_val_if_fail (g_type_is_a (object_type, MODEL_TYPE_XML_ELEMENT), NULL);
+       spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+       G_PARAM_SPEC (spec)->value_type = object_type;
+       return G_PARAM_SPEC (spec);
+}
+
+
+gpointer model_value_get_xml_element (const GValue* value) {
+       g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_XML_ELEMENT), NULL);
+       return value->data[0].v_pointer;
+}
+
+
+void model_value_set_xml_element (GValue* value, gpointer v_object) {
+       ModelXmlElement* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_XML_ELEMENT));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, MODEL_TYPE_XML_ELEMENT));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+               value->data[0].v_pointer = v_object;
+               model_xml_element_ref (value->data[0].v_pointer);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               model_xml_element_unref (old);
+       }
+}
+
+
+void model_value_take_xml_element (GValue* value, gpointer v_object) {
+       ModelXmlElement* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_XML_ELEMENT));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, MODEL_TYPE_XML_ELEMENT));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+               value->data[0].v_pointer = v_object;
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               model_xml_element_unref (old);
+       }
+}
+
+
+static void model_xml_element_class_init (ModelXmlElementClass * klass) {
+       model_xml_element_parent_class = g_type_class_peek_parent (klass);
+       MODEL_XML_ELEMENT_CLASS (klass)->finalize = model_xml_element_finalize;
+       g_type_class_add_private (klass, sizeof (ModelXmlElementPrivate));
+}
+
+
+static void model_xml_element_instance_init (ModelXmlElement * self) {
+       self->priv = MODEL_XML_ELEMENT_GET_PRIVATE (self);
+       self->ref_count = 1;
+}
+
+
+static void model_xml_element_finalize (ModelXmlElement* obj) {
+       ModelXmlElement * self;
+       self = MODEL_XML_ELEMENT (obj);
+       _g_free0 (self->priv->_name);
+       self->attribute_names = (_vala_array_free (self->attribute_names, self->attribute_names_length1, (GDestroyNotify) g_free), NULL);
+       self->attribute_values = (_vala_array_free (self->attribute_values, self->attribute_values_length1, (GDestroyNotify) g_free), NULL);
+       _g_object_unref0 (self->priv->_children);
+}
+
+
+GType model_xml_element_get_type (void) {
+       static volatile gsize model_xml_element_type_id__volatile = 0;
+       if (g_once_init_enter (&model_xml_element_type_id__volatile)) {
+               static const GTypeValueTable g_define_type_value_table = { model_value_xml_element_init, model_value_xml_element_free_value, model_value_xml_element_copy_value, model_value_xml_element_peek_pointer, "p", model_value_xml_element_collect_value, "p", model_value_xml_element_lcopy_value };
+               static const GTypeInfo g_define_type_info = { sizeof (ModelXmlElementClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_xml_element_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelXmlElement), 0, (GInstanceInitFunc) model_xml_element_instance_init, &g_define_type_value_table };
+               static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+               GType model_xml_element_type_id;
+               model_xml_element_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ModelXmlElement", &g_define_type_info, &g_define_type_fundamental_info, 0);
+               g_once_init_leave (&model_xml_element_type_id__volatile, model_xml_element_type_id);
+       }
+       return model_xml_element_type_id__volatile;
+}
+
+
+gpointer model_xml_element_ref (gpointer instance) {
+       ModelXmlElement* self;
+       self = instance;
+       g_atomic_int_inc (&self->ref_count);
+       return instance;
+}
+
+
+void model_xml_element_unref (gpointer instance) {
+       ModelXmlElement* self;
+       self = instance;
+       if (g_atomic_int_dec_and_test (&self->ref_count)) {
+               MODEL_XML_ELEMENT_GET_CLASS (self)->finalize (self);
+               g_type_free_instance ((GTypeInstance *) self);
+       }
+}
+
+
+#line 307 "ProjectLoader.vala"
+static void _model_project_loader_on_load_error_model_loader_handler_load_error (ModelLoaderHandler* _sender, const char* error_message, gpointer self) {
+#line 1841 "ProjectLoader.c"
+       model_project_loader_on_load_error (self, error_message);
+}
+
+
+#line 312 "ProjectLoader.vala"
+static void _model_project_loader_on_handler_complete_model_loader_handler_complete (ModelLoaderHandler* _sender, gpointer self) {
+#line 1848 "ProjectLoader.c"
+       model_project_loader_on_handler_complete (self);
+}
+
+
+#line 300 "ProjectLoader.vala"
+ModelProjectLoader* model_project_loader_construct (GType object_type, ModelLoaderHandler* loader_handler, const char* file_name) {
+#line 1855 "ProjectLoader.c"
+       ModelProjectLoader * self;
+       char* _tmp0_;
+       ModelLoaderHandler* _tmp1_;
+#line 300 "ProjectLoader.vala"
+       g_return_val_if_fail (MODEL_IS_LOADER_HANDLER (loader_handler), NULL);
+#line 300 "ProjectLoader.vala"
+       self = (ModelProjectLoader*) g_object_new (object_type, NULL);
+#line 301 "ProjectLoader.vala"
+       self->priv->file_name = (_tmp0_ = g_strdup (file_name), _g_free0 (self->priv->file_name), _tmp0_);
+#line 302 "ProjectLoader.vala"
+       self->priv->loader_handler = (_tmp1_ = _g_object_ref0 (loader_handler), _g_object_unref0 (self->priv->loader_handler), _tmp1_);
+#line 303 "ProjectLoader.vala"
+       g_signal_connect_object (loader_handler, "load-error", (GCallback) _model_project_loader_on_load_error_model_loader_handler_load_error, self, 0);
+#line 304 "ProjectLoader.vala"
+       g_signal_connect_object (loader_handler, "complete", (GCallback) _model_project_loader_on_handler_complete_model_loader_handler_complete, self, 0);
+#line 1871 "ProjectLoader.c"
+       return self;
+}
+
+
+#line 300 "ProjectLoader.vala"
+ModelProjectLoader* model_project_loader_new (ModelLoaderHandler* loader_handler, const char* file_name) {
+#line 300 "ProjectLoader.vala"
+       return model_project_loader_construct (MODEL_TYPE_PROJECT_LOADER, loader_handler, file_name);
+#line 1880 "ProjectLoader.c"
+}
+
+
+#line 307 "ProjectLoader.vala"
+static void model_project_loader_on_load_error (ModelProjectLoader* self, const char* _error_) {
+#line 307 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_PROJECT_LOADER (self));
+#line 307 "ProjectLoader.vala"
+       g_return_if_fail (_error_ != NULL);
+#line 308 "ProjectLoader.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_load_error");
+#line 309 "ProjectLoader.vala"
+       g_signal_emit_by_name (self, "load-error", _error_);
+#line 1894 "ProjectLoader.c"
+}
+
+
+#line 312 "ProjectLoader.vala"
+static void model_project_loader_on_handler_complete (ModelProjectLoader* self) {
+#line 1900 "ProjectLoader.c"
+       gboolean _tmp0_ = FALSE;
+#line 312 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_PROJECT_LOADER (self));
+#line 313 "ProjectLoader.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_handler_complete");
+#line 314 "ProjectLoader.vala"
+       self->priv->handler_completed = TRUE;
+#line 315 "ProjectLoader.vala"
+       if (self->priv->project_load_completed) {
+#line 315 "ProjectLoader.vala"
+               _tmp0_ = !self->priv->load_completed_fired;
+#line 1912 "ProjectLoader.c"
+       } else {
+#line 315 "ProjectLoader.vala"
+               _tmp0_ = FALSE;
+#line 1916 "ProjectLoader.c"
+       }
+#line 315 "ProjectLoader.vala"
+       if (_tmp0_) {
+#line 316 "ProjectLoader.vala"
+               self->priv->load_completed_fired = TRUE;
+#line 317 "ProjectLoader.vala"
+               g_signal_emit_by_name (self, "load-complete");
+#line 1924 "ProjectLoader.c"
+       }
+}
+
+
+#line 307 "ProjectLoader.vala"
+static void _model_project_loader_on_load_error_model_project_builder_error_occurred (ModelProjectBuilder* _sender, const char* _error_, gpointer self) {
+#line 1931 "ProjectLoader.c"
+       model_project_loader_on_load_error (self, _error_);
+}
+
+
+#line 321 "ProjectLoader.vala"
+void model_project_loader_load (ModelProjectLoader* self) {
+#line 1938 "ProjectLoader.c"
+       GError * _inner_error_;
+       char* _tmp3_;
+       ModelXmlTreeLoader* tree_loader;
+       ModelProjectBuilder* builder;
+#line 321 "ProjectLoader.vala"
+       g_return_if_fail (MODEL_IS_PROJECT_LOADER (self));
+#line 1945 "ProjectLoader.c"
+       _inner_error_ = NULL;
+       {
+               char* _tmp1_;
+               char* _tmp0_ = NULL;
+#line 323 "ProjectLoader.vala"
+               g_file_get_contents (self->priv->file_name, &_tmp0_, &self->priv->text_len, &_inner_error_);
+#line 323 "ProjectLoader.vala"
+               self->priv->text = (_tmp1_ = _tmp0_, _g_free0 (self->priv->text), _tmp1_);
+#line 1954 "ProjectLoader.c"
+               if (_inner_error_ != NULL) {
+                       if (_inner_error_->domain == G_FILE_ERROR) {
+                               goto __catch13_g_file_error;
+                       }
+                       g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+                       g_clear_error (&_inner_error_);
+                       return;
+               }
+       }
+       goto __finally13;
+       __catch13_g_file_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+                       char* _tmp2_;
+#line 325 "ProjectLoader.vala"
+                       logging_emit (G_OBJECT (self), LOGGING_FACILITY_LOADING, LOGGING_LEVEL_MEDIUM, _tmp2_ = g_strdup_printf ("error loading %s: %s", self->priv->file_name, e->message));
+#line 1974 "ProjectLoader.c"
+                       _g_free0 (_tmp2_);
+#line 327 "ProjectLoader.vala"
+                       g_signal_emit_by_name (self, "load-error", e->message);
+#line 328 "ProjectLoader.vala"
+                       g_signal_emit_by_name (self, "load-complete");
+#line 1980 "ProjectLoader.c"
+                       _g_error_free0 (e);
+#line 329 "ProjectLoader.vala"
+                       return;
+#line 1984 "ProjectLoader.c"
+               }
+       }
+       __finally13:
+       if (_inner_error_ != NULL) {
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return;
+       }
+#line 331 "ProjectLoader.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_LOADING, LOGGING_LEVEL_VERBOSE, _tmp3_ = g_strdup_printf ("Building tree for %s", self->priv->file_name));
+#line 1995 "ProjectLoader.c"
+       _g_free0 (_tmp3_);
+#line 332 "ProjectLoader.vala"
+       tree_loader = model_xml_tree_loader_new (self->priv->text);
+#line 334 "ProjectLoader.vala"
+       builder = model_project_builder_new (self->priv->loader_handler);
+#line 335 "ProjectLoader.vala"
+       g_signal_connect_object (builder, "error-occurred", (GCallback) _model_project_loader_on_load_error_model_project_builder_error_occurred, self, 0);
+#line 337 "ProjectLoader.vala"
+       if (model_project_builder_check_project (builder, tree_loader->root)) {
+#line 2005 "ProjectLoader.c"
+               gboolean _tmp4_ = FALSE;
+#line 338 "ProjectLoader.vala"
+               logging_emit (G_OBJECT (self), LOGGING_FACILITY_LOADING, LOGGING_LEVEL_VERBOSE, "project checked out.  starting load");
+#line 339 "ProjectLoader.vala"
+               g_signal_emit_by_name (self, "load-started", self->priv->file_name);
+#line 340 "ProjectLoader.vala"
+               model_project_builder_build_project (builder, tree_loader->root);
+#line 341 "ProjectLoader.vala"
+               self->priv->project_load_completed = TRUE;
+#line 342 "ProjectLoader.vala"
+               if (self->priv->handler_completed) {
+#line 342 "ProjectLoader.vala"
+                       _tmp4_ = !self->priv->load_completed_fired;
+#line 2019 "ProjectLoader.c"
+               } else {
+#line 342 "ProjectLoader.vala"
+                       _tmp4_ = FALSE;
+#line 2023 "ProjectLoader.c"
+               }
+#line 342 "ProjectLoader.vala"
+               if (_tmp4_) {
+#line 343 "ProjectLoader.vala"
+                       self->priv->load_completed_fired = TRUE;
+#line 344 "ProjectLoader.vala"
+                       g_signal_emit_by_name (self, "load-complete");
+#line 2031 "ProjectLoader.c"
+               }
+       } else {
+#line 348 "ProjectLoader.vala"
+               logging_emit (G_OBJECT (self), LOGGING_FACILITY_LOADING, LOGGING_LEVEL_INFO, "project did not check out.  stopping.");
+#line 349 "ProjectLoader.vala"
+               g_signal_emit_by_name (self, "load-complete");
+#line 2038 "ProjectLoader.c"
+       }
+       _model_xml_tree_loader_unref0 (tree_loader);
+       _g_object_unref0 (builder);
+}
+
+
+static void model_project_loader_class_init (ModelProjectLoaderClass * klass) {
+       model_project_loader_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ModelProjectLoaderPrivate));
+       G_OBJECT_CLASS (klass)->finalize = model_project_loader_finalize;
+       g_signal_new ("load_started", MODEL_TYPE_PROJECT_LOADER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING);
+       g_signal_new ("load_complete", MODEL_TYPE_PROJECT_LOADER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+       g_signal_new ("load_error", MODEL_TYPE_PROJECT_LOADER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING);
+}
+
+
+static void model_project_loader_instance_init (ModelProjectLoader * self) {
+       self->priv = MODEL_PROJECT_LOADER_GET_PRIVATE (self);
+       self->priv->project_load_completed = FALSE;
+       self->priv->load_completed_fired = FALSE;
+       self->priv->handler_completed = FALSE;
+}
+
+
+static void model_project_loader_finalize (GObject* obj) {
+       ModelProjectLoader * self;
+       self = MODEL_PROJECT_LOADER (obj);
+       _g_free0 (self->priv->file_name);
+       _g_object_unref0 (self->priv->loader_handler);
+       _g_free0 (self->priv->text);
+       G_OBJECT_CLASS (model_project_loader_parent_class)->finalize (obj);
+}
+
+
+GType model_project_loader_get_type (void) {
+       static volatile gsize model_project_loader_type_id__volatile = 0;
+       if (g_once_init_enter (&model_project_loader_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelProjectLoaderClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_project_loader_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelProjectLoader), 0, (GInstanceInitFunc) model_project_loader_instance_init, NULL };
+               GType model_project_loader_type_id;
+               model_project_loader_type_id = g_type_register_static (G_TYPE_OBJECT, "ModelProjectLoader", &g_define_type_info, 0);
+               g_once_init_leave (&model_project_loader_type_id__volatile, model_project_loader_type_id);
+       }
+       return model_project_loader_type_id__volatile;
+}
+
+
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+       if ((array != NULL) && (destroy_func != NULL)) {
+               int i;
+               for (i = 0; i < array_length; i = i + 1) {
+                       if (((gpointer*) array)[i] != NULL) {
+                               destroy_func (((gpointer*) array)[i]);
+                       }
+               }
+       }
+}
+
+
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+       _vala_array_destroy (array, array_length, destroy_func);
+       g_free (array);
+}
+
+
+static gint _vala_array_length (gpointer array) {
+       int length;
+       length = 0;
+       if (array) {
+               while (((gpointer*) array)[length]) {
+                       length++;
+               }
+       }
+       return length;
+}
+
+
+static int _vala_strcmp0 (const char * str1, const char * str2) {
+       if (str1 == NULL) {
+               return -(str1 != str2);
+       }
+       if (str2 == NULL) {
+               return str1 != str2;
+       }
+       return strcmp (str1, str2);
+}
+
+
+
+