Initial commit
[fillmore] / src / marina / marina / project.c
diff --git a/src/marina/marina/project.c b/src/marina/marina/project.c
new file mode 100644 (file)
index 0000000..80312c7
--- /dev/null
@@ -0,0 +1,5147 @@
+/* project.c generated by valac, the Vala compiler
+ * generated from project.vala, do not modify */
+
+/* Copyright 2009-2010 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 <float.h>
+#include <math.h>
+#include <gst/gst.h>
+#include <gdk-pixbuf/gdk-pixdata.h>
+#include <stdio.h>
+#include <gdk/gdk.h>
+#include <errno.h>
+#include <gtk/gtk.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_MEDIA_LOADER_HANDLER (model_media_loader_handler_get_type ())
+#define MODEL_MEDIA_LOADER_HANDLER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_MEDIA_LOADER_HANDLER, ModelMediaLoaderHandler))
+#define MODEL_MEDIA_LOADER_HANDLER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_MEDIA_LOADER_HANDLER, ModelMediaLoaderHandlerClass))
+#define MODEL_IS_MEDIA_LOADER_HANDLER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_MEDIA_LOADER_HANDLER))
+#define MODEL_IS_MEDIA_LOADER_HANDLER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_MEDIA_LOADER_HANDLER))
+#define MODEL_MEDIA_LOADER_HANDLER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_MEDIA_LOADER_HANDLER, ModelMediaLoaderHandlerClass))
+
+typedef struct _ModelMediaLoaderHandler ModelMediaLoaderHandler;
+typedef struct _ModelMediaLoaderHandlerClass ModelMediaLoaderHandlerClass;
+typedef struct _ModelMediaLoaderHandlerPrivate ModelMediaLoaderHandlerPrivate;
+
+#define MODEL_TYPE_PROJECT (model_project_get_type ())
+#define MODEL_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_PROJECT, ModelProject))
+#define MODEL_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_PROJECT, ModelProjectClass))
+#define MODEL_IS_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_PROJECT))
+#define MODEL_IS_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_PROJECT))
+#define MODEL_PROJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_PROJECT, ModelProjectClass))
+
+typedef struct _ModelProject ModelProject;
+typedef struct _ModelProjectClass ModelProjectClass;
+
+#define MODEL_TYPE_TRACK (model_track_get_type ())
+#define MODEL_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TRACK, ModelTrack))
+#define MODEL_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_TRACK, ModelTrackClass))
+#define MODEL_IS_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TRACK))
+#define MODEL_IS_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_TRACK))
+#define MODEL_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_TRACK, ModelTrackClass))
+
+typedef struct _ModelTrack ModelTrack;
+typedef struct _ModelTrackClass ModelTrackClass;
+
+#define MODEL_TYPE_FETCHER (model_fetcher_get_type ())
+#define MODEL_FETCHER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_FETCHER, ModelFetcher))
+#define MODEL_FETCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_FETCHER, ModelFetcherClass))
+#define MODEL_IS_FETCHER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_FETCHER))
+#define MODEL_IS_FETCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_FETCHER))
+#define MODEL_FETCHER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_FETCHER, ModelFetcherClass))
+
+typedef struct _ModelFetcher ModelFetcher;
+typedef struct _ModelFetcherClass ModelFetcherClass;
+
+#define MODEL_TYPE_CLIP_FETCHER (model_clip_fetcher_get_type ())
+#define MODEL_CLIP_FETCHER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_FETCHER, ModelClipFetcher))
+#define MODEL_CLIP_FETCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_FETCHER, ModelClipFetcherClass))
+#define MODEL_IS_CLIP_FETCHER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_FETCHER))
+#define MODEL_IS_CLIP_FETCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_FETCHER))
+#define MODEL_CLIP_FETCHER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_FETCHER, ModelClipFetcherClass))
+
+typedef struct _ModelClipFetcher ModelClipFetcher;
+typedef struct _ModelClipFetcherClass ModelClipFetcherClass;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+#define TYPE_FRACTION (fraction_get_type ())
+typedef struct _Fraction Fraction;
+
+#define MODEL_TYPE_AUDIO_TRACK (model_audio_track_get_type ())
+#define MODEL_AUDIO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_AUDIO_TRACK, ModelAudioTrack))
+#define MODEL_AUDIO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_AUDIO_TRACK, ModelAudioTrackClass))
+#define MODEL_IS_AUDIO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_AUDIO_TRACK))
+#define MODEL_IS_AUDIO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_AUDIO_TRACK))
+#define MODEL_AUDIO_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_AUDIO_TRACK, ModelAudioTrackClass))
+
+typedef struct _ModelAudioTrack ModelAudioTrack;
+typedef struct _ModelAudioTrackClass ModelAudioTrackClass;
+
+#define MODEL_TYPE_VIDEO_TRACK (model_video_track_get_type ())
+#define MODEL_VIDEO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_VIDEO_TRACK, ModelVideoTrack))
+#define MODEL_VIDEO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_VIDEO_TRACK, ModelVideoTrackClass))
+#define MODEL_IS_VIDEO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_VIDEO_TRACK))
+#define MODEL_IS_VIDEO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_VIDEO_TRACK))
+#define MODEL_VIDEO_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_VIDEO_TRACK, ModelVideoTrackClass))
+
+typedef struct _ModelVideoTrack ModelVideoTrack;
+typedef struct _ModelVideoTrackClass ModelVideoTrackClass;
+typedef struct _ModelFetcherPrivate ModelFetcherPrivate;
+
+#define MODEL_TYPE_CLIP_FILE (model_clip_file_get_type ())
+#define MODEL_CLIP_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_FILE, ModelClipFile))
+#define MODEL_CLIP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_FILE, ModelClipFileClass))
+#define MODEL_IS_CLIP_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_FILE))
+#define MODEL_IS_CLIP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_FILE))
+#define MODEL_CLIP_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_FILE, ModelClipFileClass))
+
+typedef struct _ModelClipFile ModelClipFile;
+typedef struct _ModelClipFileClass ModelClipFileClass;
+
+#define MODEL_TYPE_MEDIA_TYPE (model_media_type_get_type ())
+
+#define MODEL_TYPE_CLIP (model_clip_get_type ())
+#define MODEL_CLIP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP, ModelClip))
+#define MODEL_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP, ModelClipClass))
+#define MODEL_IS_CLIP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP))
+#define MODEL_IS_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP))
+#define MODEL_CLIP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP, ModelClipClass))
+
+typedef struct _ModelClip ModelClip;
+typedef struct _ModelClipClass ModelClipClass;
+
+#define LOGGING_TYPE_FACILITY (logging_facility_get_type ())
+
+#define LOGGING_TYPE_LEVEL (logging_level_get_type ())
+typedef struct _ModelClipFilePrivate ModelClipFilePrivate;
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+
+#define MODEL_TYPE_TEMPO_INFORMATION (model_tempo_information_get_type ())
+#define MODEL_TEMPO_INFORMATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TEMPO_INFORMATION, ModelTempoInformation))
+#define MODEL_IS_TEMPO_INFORMATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TEMPO_INFORMATION))
+#define MODEL_TEMPO_INFORMATION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MODEL_TYPE_TEMPO_INFORMATION, ModelTempoInformationIface))
+
+typedef struct _ModelTempoInformation ModelTempoInformation;
+typedef struct _ModelTempoInformationIface ModelTempoInformationIface;
+typedef struct _ModelProjectPrivate ModelProjectPrivate;
+
+#define TYPE_TIME_CODE (time_code_get_type ())
+typedef struct _TimeCode TimeCode;
+
+#define VIEW_TYPE_MEDIA_ENGINE (view_media_engine_get_type ())
+#define VIEW_MEDIA_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngine))
+#define VIEW_MEDIA_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngineClass))
+#define VIEW_IS_MEDIA_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_MEDIA_ENGINE))
+#define VIEW_IS_MEDIA_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_MEDIA_ENGINE))
+#define VIEW_MEDIA_ENGINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngineClass))
+
+typedef struct _ViewMediaEngine ViewMediaEngine;
+typedef struct _ViewMediaEngineClass ViewMediaEngineClass;
+
+#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;
+
+#define MODEL_TYPE_UNDO_MANAGER (model_undo_manager_get_type ())
+#define MODEL_UNDO_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_UNDO_MANAGER, ModelUndoManager))
+#define MODEL_UNDO_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_UNDO_MANAGER, ModelUndoManagerClass))
+#define MODEL_IS_UNDO_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_UNDO_MANAGER))
+#define MODEL_IS_UNDO_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_UNDO_MANAGER))
+#define MODEL_UNDO_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_UNDO_MANAGER, ModelUndoManagerClass))
+
+typedef struct _ModelUndoManager ModelUndoManager;
+typedef struct _ModelUndoManagerClass ModelUndoManagerClass;
+
+#define MODEL_TYPE_LIBRARY_IMPORTER (model_library_importer_get_type ())
+#define MODEL_LIBRARY_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporter))
+#define MODEL_LIBRARY_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporterClass))
+#define MODEL_IS_LIBRARY_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_LIBRARY_IMPORTER))
+#define MODEL_IS_LIBRARY_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_LIBRARY_IMPORTER))
+#define MODEL_LIBRARY_IMPORTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporterClass))
+
+typedef struct _ModelLibraryImporter ModelLibraryImporter;
+typedef struct _ModelLibraryImporterClass ModelLibraryImporterClass;
+
+#define MODEL_TYPE_THUMBNAIL_FETCHER (model_thumbnail_fetcher_get_type ())
+#define MODEL_THUMBNAIL_FETCHER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_THUMBNAIL_FETCHER, ModelThumbnailFetcher))
+#define MODEL_THUMBNAIL_FETCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_THUMBNAIL_FETCHER, ModelThumbnailFetcherClass))
+#define MODEL_IS_THUMBNAIL_FETCHER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_THUMBNAIL_FETCHER))
+#define MODEL_IS_THUMBNAIL_FETCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_THUMBNAIL_FETCHER))
+#define MODEL_THUMBNAIL_FETCHER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_THUMBNAIL_FETCHER, ModelThumbnailFetcherClass))
+
+typedef struct _ModelThumbnailFetcher ModelThumbnailFetcher;
+typedef struct _ModelThumbnailFetcherClass ModelThumbnailFetcherClass;
+
+#define MODEL_TYPE_FETCHER_COMPLETION (model_fetcher_completion_get_type ())
+#define MODEL_FETCHER_COMPLETION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_FETCHER_COMPLETION, ModelFetcherCompletion))
+#define MODEL_FETCHER_COMPLETION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_FETCHER_COMPLETION, ModelFetcherCompletionClass))
+#define MODEL_IS_FETCHER_COMPLETION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_FETCHER_COMPLETION))
+#define MODEL_IS_FETCHER_COMPLETION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_FETCHER_COMPLETION))
+#define MODEL_FETCHER_COMPLETION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_FETCHER_COMPLETION, ModelFetcherCompletionClass))
+
+typedef struct _ModelFetcherCompletion ModelFetcherCompletion;
+typedef struct _ModelFetcherCompletionClass ModelFetcherCompletionClass;
+#define _model_fetcher_completion_unref0(var) ((var == NULL) ? NULL : (var = (model_fetcher_completion_unref (var), NULL)))
+#define _model_undo_manager_unref0(var) ((var == NULL) ? NULL : (var = (model_undo_manager_unref (var), NULL)))
+
+#define TYPE_PLAY_STATE (play_state_get_type ())
+typedef struct _ModelTrackPrivate ModelTrackPrivate;
+
+#define MODEL_TYPE_GAP (model_gap_get_type ())
+#define MODEL_GAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_GAP, ModelGap))
+#define MODEL_GAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_GAP, ModelGapClass))
+#define MODEL_IS_GAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_GAP))
+#define MODEL_IS_GAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_GAP))
+#define MODEL_GAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_GAP, ModelGapClass))
+
+typedef struct _ModelGap ModelGap;
+typedef struct _ModelGapClass ModelGapClass;
+typedef struct _ModelGapPrivate ModelGapPrivate;
+#define _model_gap_unref0(var) ((var == NULL) ? NULL : (var = (model_gap_unref (var), NULL)))
+
+#define TYPE_MULTI_FILE_PROGRESS_INTERFACE (multi_file_progress_interface_get_type ())
+#define MULTI_FILE_PROGRESS_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MULTI_FILE_PROGRESS_INTERFACE, MultiFileProgressInterface))
+#define IS_MULTI_FILE_PROGRESS_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MULTI_FILE_PROGRESS_INTERFACE))
+#define MULTI_FILE_PROGRESS_INTERFACE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_MULTI_FILE_PROGRESS_INTERFACE, MultiFileProgressInterfaceIface))
+
+typedef struct _MultiFileProgressInterface MultiFileProgressInterface;
+typedef struct _MultiFileProgressInterfaceIface MultiFileProgressInterfaceIface;
+typedef struct _ViewMediaEnginePrivate ViewMediaEnginePrivate;
+
+#define MODEL_TYPE_COMMAND (model_command_get_type ())
+#define MODEL_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_COMMAND, ModelCommand))
+#define MODEL_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_COMMAND, ModelCommandClass))
+#define MODEL_IS_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_COMMAND))
+#define MODEL_IS_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_COMMAND))
+#define MODEL_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_COMMAND, ModelCommandClass))
+
+typedef struct _ModelCommand ModelCommand;
+typedef struct _ModelCommandClass ModelCommandClass;
+
+#define MODEL_TYPE_ADD_CLIP_COMMAND (model_add_clip_command_get_type ())
+#define MODEL_ADD_CLIP_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_ADD_CLIP_COMMAND, ModelAddClipCommand))
+#define MODEL_ADD_CLIP_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_ADD_CLIP_COMMAND, ModelAddClipCommandClass))
+#define MODEL_IS_ADD_CLIP_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_ADD_CLIP_COMMAND))
+#define MODEL_IS_ADD_CLIP_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_ADD_CLIP_COMMAND))
+#define MODEL_ADD_CLIP_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_ADD_CLIP_COMMAND, ModelAddClipCommandClass))
+
+typedef struct _ModelAddClipCommand ModelAddClipCommand;
+typedef struct _ModelAddClipCommandClass ModelAddClipCommandClass;
+#define _model_command_unref0(var) ((var == NULL) ? NULL : (var = (model_command_unref (var), NULL)))
+typedef struct _ModelClipPrivate ModelClipPrivate;
+
+#define MODEL_TYPE_CLIP_FILE_DELETE_COMMAND (model_clip_file_delete_command_get_type ())
+#define MODEL_CLIP_FILE_DELETE_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_FILE_DELETE_COMMAND, ModelClipFileDeleteCommand))
+#define MODEL_CLIP_FILE_DELETE_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_FILE_DELETE_COMMAND, ModelClipFileDeleteCommandClass))
+#define MODEL_IS_CLIP_FILE_DELETE_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_FILE_DELETE_COMMAND))
+#define MODEL_IS_CLIP_FILE_DELETE_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_FILE_DELETE_COMMAND))
+#define MODEL_CLIP_FILE_DELETE_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_FILE_DELETE_COMMAND, ModelClipFileDeleteCommandClass))
+
+typedef struct _ModelClipFileDeleteCommand ModelClipFileDeleteCommand;
+typedef struct _ModelClipFileDeleteCommandClass ModelClipFileDeleteCommandClass;
+#define _fclose0(var) ((var == NULL) ? NULL : (var = (fclose (var), NULL)))
+
+#define MODEL_TYPE_TIMELINE_IMPORTER (model_timeline_importer_get_type ())
+#define MODEL_TIMELINE_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TIMELINE_IMPORTER, ModelTimelineImporter))
+#define MODEL_TIMELINE_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_TIMELINE_IMPORTER, ModelTimelineImporterClass))
+#define MODEL_IS_TIMELINE_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TIMELINE_IMPORTER))
+#define MODEL_IS_TIMELINE_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_TIMELINE_IMPORTER))
+#define MODEL_TIMELINE_IMPORTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_TIMELINE_IMPORTER, ModelTimelineImporterClass))
+
+typedef struct _ModelTimelineImporter ModelTimelineImporter;
+typedef struct _ModelTimelineImporterClass ModelTimelineImporterClass;
+typedef struct _ModelLibraryImporterPrivate ModelLibraryImporterPrivate;
+
+#define MODEL_TYPE_CLIP_IMPORTER (model_clip_importer_get_type ())
+#define MODEL_CLIP_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_IMPORTER, ModelClipImporter))
+#define MODEL_CLIP_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_IMPORTER, ModelClipImporterClass))
+#define MODEL_IS_CLIP_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_IMPORTER))
+#define MODEL_IS_CLIP_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_IMPORTER))
+#define MODEL_CLIP_IMPORTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_IMPORTER, ModelClipImporterClass))
+
+typedef struct _ModelClipImporter ModelClipImporter;
+typedef struct _ModelClipImporterClass ModelClipImporterClass;
+
+#define TYPE_MULTI_FILE_PROGRESS (multi_file_progress_get_type ())
+#define MULTI_FILE_PROGRESS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MULTI_FILE_PROGRESS, MultiFileProgress))
+#define MULTI_FILE_PROGRESS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MULTI_FILE_PROGRESS, MultiFileProgressClass))
+#define IS_MULTI_FILE_PROGRESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MULTI_FILE_PROGRESS))
+#define IS_MULTI_FILE_PROGRESS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MULTI_FILE_PROGRESS))
+#define MULTI_FILE_PROGRESS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MULTI_FILE_PROGRESS, MultiFileProgressClass))
+
+typedef struct _MultiFileProgress MultiFileProgress;
+typedef struct _MultiFileProgressClass MultiFileProgressClass;
+
+#define MODEL_TYPE_TIME_SIGNATURE_COMMAND (model_time_signature_command_get_type ())
+#define MODEL_TIME_SIGNATURE_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TIME_SIGNATURE_COMMAND, ModelTimeSignatureCommand))
+#define MODEL_TIME_SIGNATURE_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_TIME_SIGNATURE_COMMAND, ModelTimeSignatureCommandClass))
+#define MODEL_IS_TIME_SIGNATURE_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TIME_SIGNATURE_COMMAND))
+#define MODEL_IS_TIME_SIGNATURE_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_TIME_SIGNATURE_COMMAND))
+#define MODEL_TIME_SIGNATURE_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_TIME_SIGNATURE_COMMAND, ModelTimeSignatureCommandClass))
+
+typedef struct _ModelTimeSignatureCommand ModelTimeSignatureCommand;
+typedef struct _ModelTimeSignatureCommandClass ModelTimeSignatureCommandClass;
+
+#define MODEL_TYPE_BPM_COMMAND (model_bpm_command_get_type ())
+#define MODEL_BPM_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_BPM_COMMAND, ModelBpmCommand))
+#define MODEL_BPM_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_BPM_COMMAND, ModelBpmCommandClass))
+#define MODEL_IS_BPM_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_BPM_COMMAND))
+#define MODEL_IS_BPM_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_BPM_COMMAND))
+#define MODEL_BPM_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_BPM_COMMAND, ModelBpmCommandClass))
+
+typedef struct _ModelBpmCommand ModelBpmCommand;
+typedef struct _ModelBpmCommandClass ModelBpmCommandClass;
+
+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 _ModelMediaLoaderHandler {
+       ModelLoaderHandler parent_instance;
+       ModelMediaLoaderHandlerPrivate * priv;
+       ModelProject* the_project;
+       ModelTrack* current_track;
+};
+
+struct _ModelMediaLoaderHandlerClass {
+       ModelLoaderHandlerClass parent_class;
+};
+
+struct _ModelMediaLoaderHandlerPrivate {
+       GeeArrayList* clipfetchers;
+       gint num_clipfiles_complete;
+};
+
+struct _Fraction {
+       gint numerator;
+       gint denominator;
+};
+
+struct _ModelFetcher {
+       GObject parent_instance;
+       ModelFetcherPrivate * priv;
+       GstElement* filesrc;
+       GstElement* decodebin;
+       GstPipeline* pipeline;
+       ModelClipFile* clipfile;
+       char* error_string;
+};
+
+struct _ModelFetcherClass {
+       GObjectClass parent_class;
+       void (*on_pad_added) (ModelFetcher* self, GstPad* pad);
+       void (*on_state_change) (ModelFetcher* self, GstBus* bus, GstMessage* message);
+};
+
+typedef enum  {
+       MODEL_MEDIA_TYPE_AUDIO,
+       MODEL_MEDIA_TYPE_VIDEO
+} ModelMediaType;
+
+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 _ModelClipFile {
+       GObject parent_instance;
+       ModelClipFilePrivate * priv;
+       char* filename;
+       GstCaps* video_caps;
+       GstCaps* audio_caps;
+       GdkPixbuf* thumbnail;
+};
+
+struct _ModelClipFileClass {
+       GObjectClass parent_class;
+};
+
+struct _ModelTempoInformationIface {
+       GTypeInterface parent_iface;
+       void (*get_time_signature) (ModelTempoInformation* self, Fraction* result);
+       gint (*get_bpm) (ModelTempoInformation* self);
+};
+
+struct _TimeCode {
+       gint hour;
+       gint minute;
+       gint second;
+       gint frame;
+       gboolean drop_code;
+};
+
+struct _ModelProject {
+       GObject parent_instance;
+       ModelProjectPrivate * priv;
+       GeeArrayList* tracks;
+       GeeArrayList* inactive_tracks;
+       GeeArrayList* clipfiles;
+       ViewMediaEngine* media_engine;
+       char* project_file;
+       ModelProjectLoader* loader;
+       ModelUndoManager* undo_manager;
+       ModelLibraryImporter* importer;
+       Fraction default_framerate;
+       gboolean click_during_play;
+       gboolean click_during_record;
+       double click_volume;
+       gboolean library_visible;
+       gint library_width;
+       gboolean snap_to_clip;
+};
+
+struct _ModelProjectClass {
+       GObjectClass parent_class;
+       void (*get_clip_time) (ModelProject* self, ModelClipFile* f, TimeCode* result);
+       char* (*get_project_file) (ModelProject* self);
+       void (*do_append) (ModelProject* self, ModelTrack* track, ModelClipFile* clipfile, const char* name, gint64 insert_time);
+       void (*add_track) (ModelProject* self, ModelTrack* track);
+       void (*insert_track) (ModelProject* self, gint index, ModelTrack* track);
+       void (*load) (ModelProject* self, const char* fname);
+       void (*save) (ModelProject* self, const char* filename);
+       char* (*get_app_name) (ModelProject* self);
+       void (*load_complete) (ModelProject* self);
+};
+
+struct _ModelProjectPrivate {
+       GeeHashSet* pending;
+       GeeArrayList* pending_thumbs;
+       ModelFetcherCompletion* fetcher_completion;
+       gint tempo;
+       Fraction time_signature;
+};
+
+typedef enum  {
+       PLAY_STATE_STOPPED,
+       PLAY_STATE_PRE_PLAY,
+       PLAY_STATE_PLAYING,
+       PLAY_STATE_PRE_RECORD_NULL,
+       PLAY_STATE_PRE_RECORD,
+       PLAY_STATE_RECORDING,
+       PLAY_STATE_POST_RECORD,
+       PLAY_STATE_PRE_EXPORT,
+       PLAY_STATE_EXPORTING,
+       PLAY_STATE_CANCEL_EXPORT,
+       PLAY_STATE_LOADING,
+       PLAY_STATE_CLOSING,
+       PLAY_STATE_CLOSED
+} PlayState;
+
+struct _ModelTrack {
+       GObject parent_instance;
+       ModelTrackPrivate * priv;
+       ModelProject* project;
+       GeeArrayList* clips;
+       char* display_name;
+};
+
+struct _ModelTrackClass {
+       GObjectClass parent_class;
+       char* (*name) (ModelTrack* self);
+       ModelMediaType (*media_type) (ModelTrack* self);
+       gboolean (*check) (ModelTrack* self, ModelClip* clip);
+       void (*on_clip_updated) (ModelTrack* self, ModelClip* clip);
+       void (*write_attributes) (ModelTrack* self, FILE* f);
+};
+
+struct _ModelGap {
+       GTypeInstance parent_instance;
+       volatile int ref_count;
+       ModelGapPrivate * priv;
+       gint64 start;
+       gint64 end;
+};
+
+struct _ModelGapClass {
+       GTypeClass parent_class;
+       void (*finalize) (ModelGap *self);
+};
+
+struct _MultiFileProgressInterfaceIface {
+       GTypeInterface parent_iface;
+       void (*cancel) (MultiFileProgressInterface* self);
+       void (*complete) (MultiFileProgressInterface* self);
+};
+
+struct _ViewMediaEngine {
+       GObject parent_instance;
+       ViewMediaEnginePrivate * priv;
+       GstPipeline* pipeline;
+       GstBin* record_bin;
+       GstElement* converter;
+       GstElement* adder;
+       GstState gst_state;
+       PlayState play_state;
+       gint64 position;
+       gboolean playing;
+       ModelAudioTrack* record_track;
+       ModelClip* record_region;
+};
+
+struct _ViewMediaEngineClass {
+       GObjectClass parent_class;
+       void (*do_null_state_export) (ViewMediaEngine* self, gint64 length);
+       void (*pause) (ViewMediaEngine* self);
+};
+
+struct _ModelClip {
+       GObject parent_instance;
+       ModelClipPrivate * priv;
+       ModelClipFile* clipfile;
+       ModelMediaType type;
+       gboolean is_recording;
+       char* name;
+};
+
+struct _ModelClipClass {
+       GObjectClass parent_class;
+};
+
+struct _ModelLibraryImporter {
+       GObject parent_instance;
+       ModelLibraryImporterPrivate * priv;
+       ModelProject* project;
+       ModelClipImporter* importer;
+};
+
+struct _ModelLibraryImporterClass {
+       GObjectClass parent_class;
+       void (*append_existing_clipfile) (ModelLibraryImporter* self, ModelClipFile* f);
+       void (*on_clip_complete) (ModelLibraryImporter* self, ModelClipFile* f);
+};
+
+
+static gpointer model_media_loader_handler_parent_class = NULL;
+extern Fraction model_project_INVALID_FRAME_RATE;
+Fraction model_project_INVALID_FRAME_RATE = {0};
+static gpointer model_project_parent_class = NULL;
+static ModelTempoInformationIface* model_project_model_tempo_information_parent_iface = NULL;
+
+GType model_loader_handler_get_type (void);
+GType model_media_loader_handler_get_type (void);
+GType model_project_get_type (void);
+GType model_track_get_type (void);
+GType model_fetcher_get_type (void);
+GType model_clip_fetcher_get_type (void);
+#define MODEL_MEDIA_LOADER_HANDLER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_MEDIA_LOADER_HANDLER, ModelMediaLoaderHandlerPrivate))
+enum  {
+       MODEL_MEDIA_LOADER_HANDLER_DUMMY_PROPERTY
+};
+ModelLoaderHandler* model_loader_handler_new (void);
+ModelLoaderHandler* model_loader_handler_construct (GType object_type);
+ModelMediaLoaderHandler* model_media_loader_handler_new (ModelProject* the_project);
+ModelMediaLoaderHandler* model_media_loader_handler_construct (GType object_type, ModelProject* the_project);
+gint model_project_get_file_version (ModelProject* self);
+static gboolean model_media_loader_handler_real_commit_marina (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+GType fraction_get_type (void);
+Fraction* fraction_dup (const Fraction* self);
+void fraction_free (Fraction* self);
+void model_project_set_default_framerate (ModelProject* self, Fraction* rate);
+void fraction_init (Fraction *self, gint numerator, gint denominator);
+static gboolean model_media_loader_handler_real_commit_library (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+ModelAudioTrack* model_audio_track_new (ModelProject* project, const char* display_name);
+ModelAudioTrack* model_audio_track_construct (GType object_type, ModelProject* project, const char* display_name);
+GType model_audio_track_get_type (void);
+void model_project_add_track (ModelProject* self, ModelTrack* track);
+void _model_audio_track_set_pan (ModelAudioTrack* self, double new_value);
+void _model_audio_track_set_volume (ModelAudioTrack* self, double new_volume);
+void model_audio_track_set_default_num_channels (ModelAudioTrack* self, gint num);
+ModelVideoTrack* model_video_track_new (ModelProject* project);
+ModelVideoTrack* model_video_track_construct (GType object_type, ModelProject* project);
+GType model_video_track_get_type (void);
+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_media_loader_handler_real_commit_track (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+static void model_media_loader_handler_real_leave_track (ModelLoaderHandler* base);
+GType model_clip_file_get_type (void);
+GType model_media_type_get_type (void);
+ModelMediaType model_track_media_type (ModelTrack* self);
+ModelClip* model_clip_new (ModelClipFile* clipfile, ModelMediaType t, const char* name, gint64 start, gint64 media_start, gint64 duration, gboolean is_recording);
+ModelClip* model_clip_construct (GType object_type, ModelClipFile* clipfile, ModelMediaType t, const char* name, gint64 start, gint64 media_start, gint64 duration, gboolean is_recording);
+GType model_clip_get_type (void);
+void model_track_add (ModelTrack* self, ModelClip* c, gint64 pos, gboolean select);
+static gboolean model_media_loader_handler_real_commit_clip (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+GType logging_facility_get_type (void);
+GType logging_level_get_type (void);
+void logging_emit (GObject* object, LoggingFacility facility, LoggingLevel level, const char* message);
+void model_project_add_clipfile (ModelProject* self, ModelClipFile* clipfile);
+static void model_media_loader_handler_fetcher_ready (ModelMediaLoaderHandler* self, ModelFetcher* f);
+ModelClipFetcher* model_clip_fetcher_new (const char* filename, GError** error);
+ModelClipFetcher* model_clip_fetcher_construct (GType object_type, const char* filename, GError** error);
+static void _model_media_loader_handler_fetcher_ready_model_fetcher_ready (ModelFetcher* _sender, ModelFetcher* fetcher, gpointer self);
+static gboolean model_media_loader_handler_real_commit_clipfile (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+void _model_project_set_bpm (ModelProject* self, gint bpm);
+static gboolean model_media_loader_handler_real_commit_tempo_entry (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+void _model_project_set_time_signature (ModelProject* self, Fraction* time_signature);
+void fraction_init_from_string (Fraction *self, const char* s);
+static gboolean model_media_loader_handler_real_commit_time_signature_entry (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+GType model_tempo_information_get_type (void);
+GType time_code_get_type (void);
+TimeCode* time_code_dup (const TimeCode* self);
+void time_code_free (TimeCode* self);
+GType view_media_engine_get_type (void);
+GType model_project_loader_get_type (void);
+gpointer model_undo_manager_ref (gpointer instance);
+void model_undo_manager_unref (gpointer instance);
+GParamSpec* model_param_spec_undo_manager (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void model_value_set_undo_manager (GValue* value, gpointer v_object);
+void model_value_take_undo_manager (GValue* value, gpointer v_object);
+gpointer model_value_get_undo_manager (const GValue* value);
+GType model_undo_manager_get_type (void);
+GType model_library_importer_get_type (void);
+static gboolean model_media_loader_handler_real_commit_click (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+static gboolean model_media_loader_handler_real_commit_library_preference (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1);
+static void model_media_loader_handler_real_leave_library (ModelLoaderHandler* base);
+static void model_media_loader_handler_finalize (GObject* obj);
+GType model_thumbnail_fetcher_get_type (void);
+gpointer model_fetcher_completion_ref (gpointer instance);
+void model_fetcher_completion_unref (gpointer instance);
+GParamSpec* model_param_spec_fetcher_completion (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void model_value_set_fetcher_completion (GValue* value, gpointer v_object);
+void model_value_take_fetcher_completion (GValue* value, gpointer v_object);
+gpointer model_value_get_fetcher_completion (const GValue* value);
+GType model_fetcher_completion_get_type (void);
+#define MODEL_PROJECT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_PROJECT, ModelProjectPrivate))
+enum  {
+       MODEL_PROJECT_DUMMY_PROPERTY
+};
+#define MODEL_PROJECT_FILLMORE_FILE_EXTENSION "fill"
+#define MODEL_PROJECT_FILLMORE_FILE_FILTER "*." MODEL_PROJECT_FILLMORE_FILE_EXTENSION
+#define MODEL_PROJECT_LOMBARD_FILE_EXTENSION "lom"
+#define MODEL_PROJECT_LOMBARD_FILE_FILTER "*." MODEL_PROJECT_LOMBARD_FILE_EXTENSION
+#define MODEL_PROJECT_license "\n" \
+"%s is free software; you can redistribute it and/or modify it under th" \
+"e \n" \
+"terms of the GNU Lesser General Public License as published by the Fre" \
+"e \n" \
+"Software Foundation; either version 2.1 of the License, or (at your op" \
+"tion) \n" \
+"any later version.\n" \
+"\n" \
+"%s is distributed in the hope that it will be useful, but WITHOUT \n" \
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or " \
+"FITNESS\n" \
+"FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License f" \
+"or \n" \
+"more details.\n" \
+"\n" \
+"You should have received a copy of the GNU Lesser General Public Licen" \
+"se \n" \
+"along with %s; if not, write to the Free Software Foundation, Inc., \n" \
+"51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA\n"
+void model_project_get_clip_time (ModelProject* self, ModelClipFile* f, TimeCode* result);
+static void model_project_real_get_clip_time (ModelProject* self, ModelClipFile* f, TimeCode* result);
+ModelUndoManager* model_undo_manager_new (void);
+ModelUndoManager* model_undo_manager_construct (GType object_type);
+ViewMediaEngine* view_media_engine_new (ModelProject* project, gboolean include_video, GError** error);
+ViewMediaEngine* view_media_engine_construct (GType object_type, ModelProject* project, gboolean include_video, GError** error);
+void view_media_engine_on_track_added (ViewMediaEngine* self, ModelTrack* track);
+static void _view_media_engine_on_track_added_model_project_track_added (ModelProject* _sender, ModelTrack* track, gpointer self);
+void model_project_on_playstate_changed (ModelProject* self);
+static void _model_project_on_playstate_changed_view_media_engine_playstate_changed (ViewMediaEngine* _sender, gpointer self);
+void model_project_on_error_occurred (ModelProject* self, const char* major_error, const char* minor_error);
+static void _model_project_on_error_occurred_view_media_engine_error_occurred (ViewMediaEngine* _sender, const char* major_message, const char* minor_message, gpointer self);
+ModelProject* model_project_construct (GType object_type, const char* filename, gboolean include_video, GError** error);
+GType play_state_get_type (void);
+PlayState view_media_engine_get_play_state (ViewMediaEngine* self);
+static void model_project_ClearTrackMeters (ModelProject* self);
+char* model_project_get_project_file (ModelProject* self);
+static char* model_project_real_get_project_file (ModelProject* self);
+ModelClipFile* model_project_get_clipfile (ModelProject* self, gint index);
+gint model_project_get_clipfile_index (ModelProject* self, ModelClipFile* find);
+ModelTrack* model_project_track_from_clip (ModelProject* self, ModelClip* clip);
+void model_project_print_graph (ModelProject* self, GstBin* bin, const char* file_name);
+gint64 model_track_get_length (ModelTrack* self);
+gint64 model_project_get_length (ModelProject* self);
+gint64 model_track_snap_clip (ModelTrack* self, ModelClip* c, gint64 span);
+gint64 model_clip_get_start (ModelClip* self);
+gint64 model_project_snap_clip (ModelProject* self, ModelClip* c, gint64 span);
+gboolean model_track_snap_coord (ModelTrack* self, gint64* coord, gint64 span);
+void model_project_snap_coord (ModelProject* self, gint64* coord, gint64 span);
+gpointer model_gap_ref (gpointer instance);
+void model_gap_unref (gpointer instance);
+GParamSpec* model_param_spec_gap (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void model_value_set_gap (GValue* value, gpointer v_object);
+void model_value_take_gap (GValue* value, gpointer v_object);
+gpointer model_value_get_gap (const GValue* value);
+GType model_gap_get_type (void);
+ModelGap* model_gap_intersect (ModelGap* self, ModelGap* g);
+ModelGap* model_track_find_first_gap (ModelTrack* self, gint64 start);
+static ModelGap* model_project_get_gap_intersection (ModelProject* self, ModelGap* gap);
+gboolean model_gap_is_empty (ModelGap* self);
+gboolean model_project_can_delete_gap (ModelProject* self, ModelGap* gap);
+void model_track_delete_gap (ModelTrack* self, ModelGap* g);
+void model_project_delete_gap (ModelProject* self, ModelGap* gap);
+gint64 model_clip_file_get_length (ModelClipFile* self);
+void model_track_append_at_time (ModelTrack* self, ModelClip* c, gint64 time, gboolean select);
+void model_project_do_append (ModelProject* self, ModelTrack* track, ModelClipFile* clipfile, const char* name, gint64 insert_time);
+static void model_project_real_do_append (ModelProject* self, ModelTrack* track, ModelClipFile* clipfile, const char* name, gint64 insert_time);
+char* isolate_filename (const char* path);
+void model_project_append (ModelProject* self, ModelTrack* track, ModelClipFile* clipfile);
+void model_project_add (ModelProject* self, ModelTrack* track, ModelClipFile* clipfile, gint64 time);
+void model_project_reseek (ModelProject* self);
+void model_project_on_clip_removed (ModelProject* self, ModelTrack* t, ModelClip* clip);
+void model_undo_manager_start_transaction (ModelUndoManager* self, const char* description);
+ModelClip* model_track_get_clip_by_position (ModelTrack* self, gint64 pos);
+gint64 model_project_transport_get_position (ModelProject* self);
+void model_track_split_at (ModelTrack* self, gint64 position);
+void model_undo_manager_end_transaction (ModelUndoManager* self, const char* description);
+void model_project_split_at_playhead (ModelProject* self);
+gint64 model_clip_get_end (ModelClip* self);
+gint64 model_clip_get_duration (ModelClip* self);
+gboolean model_project_can_trim (ModelProject* self, gboolean* left);
+void model_track_trim (ModelTrack* self, ModelClip* clip, gint64 delta, GdkWindowEdge edge);
+void model_project_transport_go (ModelProject* self, gint64 position);
+void model_project_trim_to_playhead (ModelProject* self);
+void view_media_engine_go (ViewMediaEngine* self, gint64 pos);
+GType multi_file_progress_interface_get_type (void);
+gboolean model_project_transport_is_playing (ModelProject* self);
+gboolean model_project_transport_is_recording (ModelProject* self);
+gboolean model_project_playhead_on_clip (ModelProject* self);
+gboolean model_track_are_contiguous_clips (ModelTrack* self, gint64 position);
+gboolean model_project_playhead_on_contiguous_clip (ModelProject* self);
+char* model_track_get_display_name (ModelTrack* self);
+gboolean model_project_is_duplicate_track_name (ModelProject* self, ModelTrack* track, const char* new_name);
+static void _model_project_on_clip_removed_model_track_clip_removed (ModelTrack* _sender, ModelClip* clip, gpointer self);
+static void _model_project_on_error_occurred_model_track_error_occurred (ModelTrack* _sender, const char* major_error, const char* minor_error, gpointer self);
+static void model_project_real_add_track (ModelProject* self, ModelTrack* track);
+void model_project_insert_track (ModelProject* self, gint index, ModelTrack* track);
+static void model_project_real_insert_track (ModelProject* self, gint index, ModelTrack* track);
+void model_track_hide (ModelTrack* self);
+void model_project_add_inactive_track (ModelProject* self, ModelTrack* track);
+void model_project_remove_track (ModelProject* self, ModelTrack* track);
+void model_project_remove_track_at (ModelProject* self, gint index);
+ModelAddClipCommand* model_add_clip_command_new (ModelProject* project, ModelClipFile* clip_file);
+ModelAddClipCommand* model_add_clip_command_construct (GType object_type, ModelProject* project, ModelClipFile* clip_file);
+gpointer model_command_ref (gpointer instance);
+void model_command_unref (gpointer instance);
+GParamSpec* model_param_spec_command (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void model_value_set_command (GValue* value, gpointer v_object);
+void model_value_take_command (GValue* value, gpointer v_object);
+gpointer model_value_get_command (const GValue* value);
+GType model_command_get_type (void);
+GType model_add_clip_command_get_type (void);
+void model_project_do_command (ModelProject* self, ModelCommand* the_command);
+gboolean model_clip_file_is_online (ModelClipFile* self);
+gboolean model_clip_file_is_of_type (ModelClipFile* self, ModelMediaType t);
+ModelThumbnailFetcher* model_thumbnail_fetcher_new (ModelClipFile* f, gint64 time, GError** error);
+ModelThumbnailFetcher* model_thumbnail_fetcher_construct (GType object_type, ModelClipFile* f, gint64 time, GError** error);
+static void model_project_on_thumbnail_ready (ModelProject* self, ModelFetcher* f);
+static void _model_project_on_thumbnail_ready_model_fetcher_ready (ModelFetcher* _sender, ModelFetcher* fetcher, gpointer self);
+void _model_project_add_clipfile (ModelProject* self, ModelClipFile* clipfile, GError** error);
+ModelClipFile* model_project_find_clipfile (ModelProject* self, const char* filename);
+gboolean model_project_clipfile_on_track (ModelProject* self, const char* filename);
+void model_track_delete_clip (ModelTrack* self, ModelClip* clip);
+static void model_project_delete_clipfile_from_tracks (ModelProject* self, ModelClipFile* cf);
+void _model_project_remove_clipfile (ModelProject* self, ModelClipFile* cf);
+ModelClipFileDeleteCommand* model_clip_file_delete_command_new (ModelProject* p, ModelClipFile* cf);
+ModelClipFileDeleteCommand* model_clip_file_delete_command_construct (GType object_type, ModelProject* p, ModelClipFile* cf);
+GType model_clip_file_delete_command_get_type (void);
+void model_project_remove_clipfile (ModelProject* self, const char* filename);
+void model_project_go_start (ModelProject* self);
+void model_project_go_end (ModelProject* self);
+gint64 model_track_previous_edit (ModelTrack* self, gint64 pos);
+void model_project_go_previous (ModelProject* self);
+gint64 model_track_next_edit (ModelTrack* self, gint64 pos);
+void model_project_go_next (ModelProject* self);
+void model_project_set_name (ModelProject* self, const char* filename);
+char* model_project_get_app_name (ModelProject* self);
+char* model_project_get_file_display_name (ModelProject* self);
+void view_media_engine_set_gst_state (ViewMediaEngine* self, GstState state);
+void model_track_delete_all_clips (ModelTrack* self);
+void model_project_clear (ModelProject* self);
+gboolean model_project_can_export (ModelProject* self);
+void model_project_on_load_started (ModelProject* self, const char* filename);
+static void model_project_on_load_error (ModelProject* self, const char* _error_);
+void model_undo_manager_reset (ModelUndoManager* self);
+static void model_project_on_load_complete (ModelProject* 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_on_load_started_model_project_loader_load_started (ModelProjectLoader* _sender, const char* filename, gpointer self);
+static void _model_project_on_load_error_model_project_loader_load_error (ModelProjectLoader* _sender, const char* _error_, gpointer self);
+static void _model_project_on_load_complete_model_project_loader_load_complete (ModelProjectLoader* _sender, gpointer self);
+void view_media_engine_on_load_complete (ViewMediaEngine* self);
+static void _view_media_engine_on_load_complete_model_project_loader_load_complete (ModelProjectLoader* _sender, gpointer self);
+void view_media_engine_set_play_state (ViewMediaEngine* self, PlayState play_state);
+void model_project_loader_load (ModelProjectLoader* self);
+void model_project_load (ModelProject* self, const char* fname);
+static void model_project_real_load (ModelProject* self, const char* fname);
+gboolean model_video_track_get_framerate (ModelVideoTrack* self, Fraction* rate);
+gboolean fraction_equal (Fraction *self, Fraction* f);
+void model_project_save_library (ModelProject* self, FILE* f);
+void model_track_save (ModelTrack* self, FILE* f);
+char* fraction_to_string (Fraction *self);
+void model_undo_manager_mark_clean (ModelUndoManager* self);
+void model_project_save (ModelProject* self, const char* filename);
+static void model_project_real_save (ModelProject* self, const char* filename);
+void view_media_engine_close (ViewMediaEngine* self);
+void model_project_close (ModelProject* self);
+void model_fetcher_completion_complete (ModelFetcherCompletion* self, ModelFetcher* fetcher);
+void model_project_on_importer_clip_complete (ModelProject* self, ModelClipFetcher* fetcher);
+static void model_project_on_fetcher_ready (ModelProject* self, ModelFetcher* fetcher);
+static void _model_project_on_fetcher_ready_model_fetcher_ready (ModelFetcher* _sender, ModelFetcher* fetcher, gpointer self);
+void model_project_create_clip_fetcher (ModelProject* self, ModelFetcherCompletion* fetcher_completion, const char* filename, GError** error);
+char* get_file_extension (const char* path);
+gboolean model_project_is_project_extension (ModelProject* self, const char* filename);
+void model_undo_manager_do_command (ModelUndoManager* self, ModelCommand* the_command);
+void model_undo_manager_undo (ModelUndoManager* self);
+void model_project_undo (ModelProject* self);
+ModelTimelineImporter* model_timeline_importer_new (ModelTrack* track, ModelProject* p, gint64 time_to_add, gboolean both_tracks);
+ModelTimelineImporter* model_timeline_importer_construct (GType object_type, ModelTrack* track, ModelProject* p, gint64 time_to_add, gboolean both_tracks);
+GType model_timeline_importer_get_type (void);
+ModelLibraryImporter* model_library_importer_new (ModelProject* p);
+ModelLibraryImporter* model_library_importer_construct (GType object_type, ModelProject* p);
+GType model_clip_importer_get_type (void);
+MultiFileProgress* multi_file_progress_new (GtkWindow* parent, gint num_files, const char* dialog_title, MultiFileProgressInterface* provider);
+MultiFileProgress* multi_file_progress_construct (GType object_type, GtkWindow* parent, gint num_files, const char* dialog_title, MultiFileProgressInterface* provider);
+GType multi_file_progress_get_type (void);
+void model_project_create_clip_importer (ModelProject* self, ModelTrack* track, gboolean timeline_add, gint64 time_to_add, gboolean both_tracks, GtkWindow* progress_window_parent, gint number);
+char* model_project_get_version (ModelProject* self);
+static char* model_project_real_get_app_name (ModelProject* self);
+char* model_project_get_license (ModelProject* self);
+ModelTimeSignatureCommand* model_time_signature_command_new (ModelProject* project, Fraction* new_time_signature);
+ModelTimeSignatureCommand* model_time_signature_command_construct (GType object_type, ModelProject* project, Fraction* new_time_signature);
+GType model_time_signature_command_get_type (void);
+void model_project_set_time_signature (ModelProject* self, Fraction* time_signature);
+static void model_project_real_get_time_signature (ModelTempoInformation* base, Fraction* result);
+ModelBpmCommand* model_bpm_command_new (ModelProject* project, gint new_bpm);
+ModelBpmCommand* model_bpm_command_construct (GType object_type, ModelProject* project, gint new_bpm);
+GType model_bpm_command_get_type (void);
+void model_project_set_bpm (ModelProject* self, gint bpm);
+static gint model_project_real_get_bpm (ModelTempoInformation* base);
+static char* model_project_get_path (ModelProject* self);
+char* model_project_get_audio_path (ModelProject* self);
+ModelVideoTrack* model_project_find_video_track (ModelProject* self);
+ModelAudioTrack* model_project_find_audio_track (ModelProject* self);
+void model_project_load_complete (ModelProject* self);
+static void model_project_real_load_complete (ModelProject* self);
+static void model_project_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);
+
+const char* MODEL_PROJECT_authors[5] = {"Robert Powell <rob@yorba.org>", "Adam Dingle <adam@yorba.org>", "Andrew O'Mahony <andrew.omahony@att.net>", "Dru Moore <usr@dru-id.co.uk>", NULL};
+
+static void g_cclosure_user_marshal_VOID__STRING_STRING (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
+
+#line 19 "project.vala"
+ModelMediaLoaderHandler* model_media_loader_handler_construct (GType object_type, ModelProject* the_project) {
+#line 871 "project.c"
+       ModelMediaLoaderHandler * self;
+       ModelTrack* _tmp0_;
+#line 19 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (the_project), NULL);
+#line 19 "project.vala"
+       self = (ModelMediaLoaderHandler*) model_loader_handler_construct (object_type);
+#line 20 "project.vala"
+       self->the_project = the_project;
+#line 21 "project.vala"
+       self->current_track = (_tmp0_ = NULL, _g_object_unref0 (self->current_track), _tmp0_);
+#line 882 "project.c"
+       return self;
+}
+
+
+#line 19 "project.vala"
+ModelMediaLoaderHandler* model_media_loader_handler_new (ModelProject* the_project) {
+#line 19 "project.vala"
+       return model_media_loader_handler_construct (MODEL_TYPE_MEDIA_LOADER_HANDLER, the_project);
+#line 891 "project.c"
+}
+
+
+#line 24 "project.vala"
+static gboolean model_media_loader_handler_real_commit_marina (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 897 "project.c"
+       ModelMediaLoaderHandler * self;
+       gboolean result = FALSE;
+       gint number_of_attributes;
+       gboolean _tmp0_ = FALSE;
+       self = MODEL_MEDIA_LOADER_HANDLER (base);
+#line 25 "project.vala"
+       number_of_attributes = attr_names_length1;
+#line 26 "project.vala"
+       if (number_of_attributes != 1) {
+#line 26 "project.vala"
+               _tmp0_ = TRUE;
+#line 909 "project.c"
+       } else {
+#line 27 "project.vala"
+               _tmp0_ = _vala_strcmp0 (attr_names[0], "version") != 0;
+#line 913 "project.c"
+       }
+#line 26 "project.vala"
+       if (_tmp0_) {
+#line 28 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", "Missing version information");
+#line 919 "project.c"
+               result = FALSE;
+#line 29 "project.vala"
+               return result;
+#line 923 "project.c"
+       }
+#line 32 "project.vala"
+       if (model_project_get_file_version (self->the_project) < atoi (attr_values[0])) {
+#line 927 "project.c"
+               char* _tmp1_;
+#line 33 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", _tmp1_ = g_strdup_printf ("Version mismatch! (File Version: %d, App Version: %d)", model_project_get_file_version (self->the_project), atoi (attr_values[0])));
+#line 931 "project.c"
+               _g_free0 (_tmp1_);
+               result = FALSE;
+#line 35 "project.vala"
+               return result;
+#line 936 "project.c"
+       }
+#line 38 "project.vala"
+       self->priv->num_clipfiles_complete = 0;
+#line 940 "project.c"
+       result = TRUE;
+#line 39 "project.vala"
+       return result;
+#line 944 "project.c"
+}
+
+
+#line 42 "project.vala"
+static gboolean model_media_loader_handler_real_commit_library (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 950 "project.c"
+       ModelMediaLoaderHandler * self;
+       gboolean result = FALSE;
+       char** _tmp1_;
+       gint _arr_size_;
+       gint arr_length1;
+       char** _tmp0_;
+       char** arr;
+       Fraction _tmp3_;
+       Fraction _tmp2_ = {0};
+       self = MODEL_MEDIA_LOADER_HANDLER (base);
+#line 44 "project.vala"
+       if (attr_names_length1 != 1) {
+#line 963 "project.c"
+               result = TRUE;
+#line 45 "project.vala"
+               return result;
+#line 967 "project.c"
+       }
+#line 47 "project.vala"
+       if (_vala_strcmp0 (attr_names[0], "framerate") != 0) {
+#line 48 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", "Missing framerate tag");
+#line 973 "project.c"
+               result = FALSE;
+#line 49 "project.vala"
+               return result;
+#line 977 "project.c"
+       }
+       arr = (_tmp1_ = _tmp0_ = g_strsplit (attr_values[0], "/", 0), arr_length1 = _vala_array_length (_tmp0_), _arr_size_ = arr_length1, _tmp1_);
+#line 53 "project.vala"
+       if (arr_length1 != 2) {
+#line 54 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", "Invalid framerate attribute");
+#line 984 "project.c"
+               result = FALSE;
+               arr = (_vala_array_free (arr, arr_length1, (GDestroyNotify) g_free), NULL);
+#line 55 "project.vala"
+               return result;
+#line 989 "project.c"
+       }
+#line 58 "project.vala"
+       model_project_set_default_framerate (self->the_project, (_tmp3_ = (fraction_init (&_tmp2_, atoi (arr[0]), atoi (arr[1])), _tmp2_), &_tmp3_));
+#line 993 "project.c"
+       result = TRUE;
+       arr = (_vala_array_free (arr, arr_length1, (GDestroyNotify) g_free), NULL);
+#line 59 "project.vala"
+       return result;
+#line 998 "project.c"
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+#line 62 "project.vala"
+static gboolean model_media_loader_handler_real_commit_track (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 1009 "project.c"
+       ModelMediaLoaderHandler * self;
+       gboolean result = FALSE;
+       gint number_of_attributes;
+       char* name;
+       char* type;
+       self = MODEL_MEDIA_LOADER_HANDLER (base);
+#line 63 "project.vala"
+       g_assert (self->current_track == NULL);
+#line 65 "project.vala"
+       number_of_attributes = attr_names_length1;
+#line 66 "project.vala"
+       name = NULL;
+#line 67 "project.vala"
+       type = NULL;
+#line 1024 "project.c"
+       {
+               gint i;
+#line 68 "project.vala"
+               i = 0;
+#line 1029 "project.c"
+               {
+                       gboolean _tmp0_;
+#line 68 "project.vala"
+                       _tmp0_ = TRUE;
+#line 68 "project.vala"
+                       while (TRUE) {
+#line 1036 "project.c"
+                               GQuark _tmp4_;
+                               const char* _tmp3_;
+                               static GQuark _tmp4__label0 = 0;
+                               static GQuark _tmp4__label1 = 0;
+#line 68 "project.vala"
+                               if (!_tmp0_) {
+#line 68 "project.vala"
+                                       i = i + 1;
+#line 1045 "project.c"
+                               }
+#line 68 "project.vala"
+                               _tmp0_ = FALSE;
+#line 68 "project.vala"
+                               if (!(i < number_of_attributes)) {
+#line 68 "project.vala"
+                                       break;
+#line 1053 "project.c"
+                               }
+                               _tmp3_ = attr_names[i];
+                               _tmp4_ = (NULL == _tmp3_) ? 0 : g_quark_from_string (_tmp3_);
+                               if (_tmp4_ == ((0 != _tmp4__label0) ? _tmp4__label0 : (_tmp4__label0 = g_quark_from_static_string ("type"))))
+                               switch (0) {
+                                       default:
+                                       {
+                                               char* _tmp1_;
+#line 71 "project.vala"
+                                               type = (_tmp1_ = g_strdup (attr_values[i]), _g_free0 (type), _tmp1_);
+#line 72 "project.vala"
+                                               break;
+#line 1066 "project.c"
+                                       }
+                               } else if (_tmp4_ == ((0 != _tmp4__label1) ? _tmp4__label1 : (_tmp4__label1 = g_quark_from_static_string ("name"))))
+                               switch (0) {
+                                       default:
+                                       {
+                                               char* _tmp2_;
+#line 74 "project.vala"
+                                               name = (_tmp2_ = g_strdup (attr_values[i]), _g_free0 (name), _tmp2_);
+#line 75 "project.vala"
+                                               break;
+#line 1077 "project.c"
+                                       }
+                               } else
+                               switch (0) {
+                                       default:
+                                       {
+#line 77 "project.vala"
+                                               break;
+#line 1085 "project.c"
+                                       }
+                               }
+                       }
+               }
+       }
+#line 81 "project.vala"
+       if (name == NULL) {
+#line 82 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", "Missing track name");
+#line 1095 "project.c"
+               result = FALSE;
+               _g_free0 (name);
+               _g_free0 (type);
+#line 83 "project.vala"
+               return result;
+#line 1101 "project.c"
+       }
+#line 86 "project.vala"
+       if (type == NULL) {
+#line 87 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", "Missing track type");
+#line 1107 "project.c"
+               result = FALSE;
+               _g_free0 (name);
+               _g_free0 (type);
+#line 88 "project.vala"
+               return result;
+#line 1113 "project.c"
+       }
+#line 91 "project.vala"
+       if (_vala_strcmp0 (type, "audio") == 0) {
+#line 1117 "project.c"
+               ModelAudioTrack* audio_track;
+               ModelTrack* _tmp5_;
+#line 92 "project.vala"
+               audio_track = model_audio_track_new (self->the_project, name);
+#line 93 "project.vala"
+               self->current_track = (_tmp5_ = _g_object_ref0 (MODEL_TRACK (audio_track)), _g_object_unref0 (self->current_track), _tmp5_);
+#line 94 "project.vala"
+               model_project_add_track (self->the_project, self->current_track);
+#line 1126 "project.c"
+               {
+                       gint i;
+#line 96 "project.vala"
+                       i = 0;
+#line 1131 "project.c"
+                       {
+                               gboolean _tmp6_;
+#line 96 "project.vala"
+                               _tmp6_ = TRUE;
+#line 96 "project.vala"
+                               while (TRUE) {
+#line 1138 "project.c"
+                                       GQuark _tmp8_;
+                                       const char* _tmp7_;
+                                       static GQuark _tmp8__label0 = 0;
+                                       static GQuark _tmp8__label1 = 0;
+                                       static GQuark _tmp8__label2 = 0;
+#line 96 "project.vala"
+                                       if (!_tmp6_) {
+#line 96 "project.vala"
+                                               i = i + 1;
+#line 1148 "project.c"
+                                       }
+#line 96 "project.vala"
+                                       _tmp6_ = FALSE;
+#line 96 "project.vala"
+                                       if (!(i < number_of_attributes)) {
+#line 96 "project.vala"
+                                               break;
+#line 1156 "project.c"
+                                       }
+                                       _tmp7_ = attr_names[i];
+                                       _tmp8_ = (NULL == _tmp7_) ? 0 : g_quark_from_string (_tmp7_);
+                                       if (_tmp8_ == ((0 != _tmp8__label0) ? _tmp8__label0 : (_tmp8__label0 = g_quark_from_static_string ("panorama"))))
+                                       switch (0) {
+                                               default:
+                                               {
+#line 99 "project.vala"
+                                                       _model_audio_track_set_pan (audio_track, g_ascii_strtod (attr_values[i], NULL));
+#line 100 "project.vala"
+                                                       break;
+#line 1168 "project.c"
+                                               }
+                                       } else if (_tmp8_ == ((0 != _tmp8__label1) ? _tmp8__label1 : (_tmp8__label1 = g_quark_from_static_string ("volume"))))
+                                       switch (0) {
+                                               default:
+                                               {
+#line 102 "project.vala"
+                                                       _model_audio_track_set_volume (audio_track, g_ascii_strtod (attr_values[i], NULL));
+#line 103 "project.vala"
+                                                       break;
+#line 1178 "project.c"
+                                               }
+                                       } else if (_tmp8_ == ((0 != _tmp8__label2) ? _tmp8__label2 : (_tmp8__label2 = g_quark_from_static_string ("channels"))))
+                                       switch (0) {
+                                               default:
+                                               {
+#line 105 "project.vala"
+                                                       model_audio_track_set_default_num_channels (audio_track, atoi (attr_values[i]));
+#line 106 "project.vala"
+                                                       break;
+#line 1188 "project.c"
+                                               }
+                                       } else
+                                       switch (0) {
+                                               default:
+                                               {
+#line 108 "project.vala"
+                                                       break;
+#line 1196 "project.c"
+                                               }
+                                       }
+                               }
+                       }
+               }
+               result = TRUE;
+               _g_object_unref0 (audio_track);
+               _g_free0 (name);
+               _g_free0 (type);
+#line 111 "project.vala"
+               return result;
+#line 1208 "project.c"
+       } else {
+#line 112 "project.vala"
+               if (_vala_strcmp0 (type, "video") == 0) {
+#line 1212 "project.c"
+                       ModelTrack* _tmp9_;
+#line 113 "project.vala"
+                       self->current_track = (_tmp9_ = MODEL_TRACK (model_video_track_new (self->the_project)), _g_object_unref0 (self->current_track), _tmp9_);
+#line 114 "project.vala"
+                       model_project_add_track (self->the_project, self->current_track);
+#line 1218 "project.c"
+               }
+       }
+       result = MODEL_LOADER_HANDLER_CLASS (model_media_loader_handler_parent_class)->commit_track (MODEL_LOADER_HANDLER (self), attr_names, attr_names_length1, attr_values, attr_values_length1);
+       _g_free0 (name);
+       _g_free0 (type);
+#line 117 "project.vala"
+       return result;
+#line 1226 "project.c"
+}
+
+
+#line 120 "project.vala"
+static void model_media_loader_handler_real_leave_track (ModelLoaderHandler* base) {
+#line 1232 "project.c"
+       ModelMediaLoaderHandler * self;
+       ModelTrack* _tmp0_;
+       self = MODEL_MEDIA_LOADER_HANDLER (base);
+#line 121 "project.vala"
+       g_assert (self->current_track != NULL);
+#line 122 "project.vala"
+       self->current_track = (_tmp0_ = NULL, _g_object_unref0 (self->current_track), _tmp0_);
+#line 1240 "project.c"
+}
+
+
+#line 125 "project.vala"
+static gboolean model_media_loader_handler_real_commit_clip (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 1246 "project.c"
+       ModelMediaLoaderHandler * self;
+       gboolean result = FALSE;
+       gint number_of_attributes;
+       gint id;
+       char* clip_name;
+       gint64 start;
+       gint64 media_start;
+       gint64 duration;
+       ModelClipFetcher* _tmp6_;
+       ModelClip* _tmp7_;
+       ModelClip* clip;
+       self = MODEL_MEDIA_LOADER_HANDLER (base);
+#line 126 "project.vala"
+       g_assert (self->current_track != NULL);
+#line 128 "project.vala"
+       number_of_attributes = attr_names_length1;
+#line 129 "project.vala"
+       id = -1;
+#line 130 "project.vala"
+       clip_name = NULL;
+#line 131 "project.vala"
+       start = (gint64) (-1);
+#line 132 "project.vala"
+       media_start = (gint64) (-1);
+#line 133 "project.vala"
+       duration = (gint64) (-1);
+#line 1273 "project.c"
+       {
+               gint i;
+#line 134 "project.vala"
+               i = 0;
+#line 1278 "project.c"
+               {
+                       gboolean _tmp0_;
+#line 134 "project.vala"
+                       _tmp0_ = TRUE;
+#line 134 "project.vala"
+                       while (TRUE) {
+#line 1285 "project.c"
+                               GQuark _tmp4_;
+                               const char* _tmp3_;
+                               static GQuark _tmp4__label0 = 0;
+                               static GQuark _tmp4__label1 = 0;
+                               static GQuark _tmp4__label2 = 0;
+                               static GQuark _tmp4__label3 = 0;
+                               static GQuark _tmp4__label4 = 0;
+#line 134 "project.vala"
+                               if (!_tmp0_) {
+#line 134 "project.vala"
+                                       i++;
+#line 1297 "project.c"
+                               }
+#line 134 "project.vala"
+                               _tmp0_ = FALSE;
+#line 134 "project.vala"
+                               if (!(i < number_of_attributes)) {
+#line 134 "project.vala"
+                                       break;
+#line 1305 "project.c"
+                               }
+                               _tmp3_ = attr_names[i];
+                               _tmp4_ = (NULL == _tmp3_) ? 0 : g_quark_from_string (_tmp3_);
+                               if (_tmp4_ == ((0 != _tmp4__label0) ? _tmp4__label0 : (_tmp4__label0 = g_quark_from_static_string ("id"))))
+                               switch (0) {
+                                       default:
+                                       {
+#line 137 "project.vala"
+                                               id = atoi (attr_values[i]);
+#line 138 "project.vala"
+                                               break;
+#line 1317 "project.c"
+                                       }
+                               } else if (_tmp4_ == ((0 != _tmp4__label1) ? _tmp4__label1 : (_tmp4__label1 = g_quark_from_static_string ("name"))))
+                               switch (0) {
+                                       default:
+                                       {
+                                               char* _tmp1_;
+#line 140 "project.vala"
+                                               clip_name = (_tmp1_ = g_strdup (attr_values[i]), _g_free0 (clip_name), _tmp1_);
+#line 141 "project.vala"
+                                               break;
+#line 1328 "project.c"
+                                       }
+                               } else if (_tmp4_ == ((0 != _tmp4__label2) ? _tmp4__label2 : (_tmp4__label2 = g_quark_from_static_string ("start"))))
+                               switch (0) {
+                                       default:
+                                       {
+#line 143 "project.vala"
+                                               start = g_ascii_strtoll (attr_values[i], NULL, 0);
+#line 144 "project.vala"
+                                               break;
+#line 1338 "project.c"
+                                       }
+                               } else if (_tmp4_ == ((0 != _tmp4__label3) ? _tmp4__label3 : (_tmp4__label3 = g_quark_from_static_string ("media-start"))))
+                               switch (0) {
+                                       default:
+                                       {
+#line 146 "project.vala"
+                                               media_start = g_ascii_strtoll (attr_values[i], NULL, 0);
+#line 147 "project.vala"
+                                               break;
+#line 1348 "project.c"
+                                       }
+                               } else if (_tmp4_ == ((0 != _tmp4__label4) ? _tmp4__label4 : (_tmp4__label4 = g_quark_from_static_string ("duration"))))
+                               switch (0) {
+                                       default:
+                                       {
+#line 149 "project.vala"
+                                               duration = g_ascii_strtoll (attr_values[i], NULL, 0);
+#line 150 "project.vala"
+                                               break;
+#line 1358 "project.c"
+                                       }
+                               } else
+                               switch (0) {
+                                       default:
+                                       {
+                                               char* _tmp2_;
+#line 153 "project.vala"
+                                               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", _tmp2_ = g_strdup_printf ("Unknown attribute %s", attr_names[i]));
+#line 1367 "project.c"
+                                               _g_free0 (_tmp2_);
+                                               result = FALSE;
+                                               _g_free0 (clip_name);
+#line 154 "project.vala"
+                                               return result;
+#line 1373 "project.c"
+                                       }
+                               }
+                       }
+               }
+       }
+#line 158 "project.vala"
+       if (id == (-1)) {
+#line 159 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", "missing clip id");
+#line 1383 "project.c"
+               result = FALSE;
+               _g_free0 (clip_name);
+#line 160 "project.vala"
+               return result;
+#line 1388 "project.c"
+       }
+#line 163 "project.vala"
+       if (clip_name == NULL) {
+#line 164 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", "missing clip_name");
+#line 1394 "project.c"
+               result = FALSE;
+               _g_free0 (clip_name);
+#line 165 "project.vala"
+               return result;
+#line 1399 "project.c"
+       }
+#line 168 "project.vala"
+       if (start == (-1)) {
+#line 169 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", "missing start time");
+#line 1405 "project.c"
+               result = FALSE;
+               _g_free0 (clip_name);
+#line 170 "project.vala"
+               return result;
+#line 1410 "project.c"
+       }
+#line 173 "project.vala"
+       if (media_start == (-1)) {
+#line 174 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", "missing media_start");
+#line 1416 "project.c"
+               result = FALSE;
+               _g_free0 (clip_name);
+#line 175 "project.vala"
+               return result;
+#line 1421 "project.c"
+       }
+#line 178 "project.vala"
+       if (duration == (-1)) {
+#line 179 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", "missing duration");
+#line 1427 "project.c"
+               result = FALSE;
+               _g_free0 (clip_name);
+#line 180 "project.vala"
+               return result;
+#line 1432 "project.c"
+       }
+#line 183 "project.vala"
+       if (id >= gee_collection_get_size (GEE_COLLECTION (self->priv->clipfetchers))) {
+#line 1436 "project.c"
+               char* _tmp5_;
+#line 184 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", _tmp5_ = g_strdup_printf ("clip file id %s was not loaded", clip_name));
+#line 1440 "project.c"
+               _g_free0 (_tmp5_);
+               result = FALSE;
+               _g_free0 (clip_name);
+#line 185 "project.vala"
+               return result;
+#line 1446 "project.c"
+       }
+#line 188 "project.vala"
+       clip = (_tmp7_ = model_clip_new (MODEL_FETCHER (_tmp6_ = (ModelClipFetcher*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->priv->clipfetchers), id))->clipfile, model_track_media_type (self->current_track), clip_name, start, media_start, duration, FALSE), _g_object_unref0 (_tmp6_), _tmp7_);
+#line 190 "project.vala"
+       model_track_add (self->current_track, clip, start, FALSE);
+#line 1452 "project.c"
+       result = TRUE;
+       _g_free0 (clip_name);
+       _g_object_unref0 (clip);
+#line 191 "project.vala"
+       return result;
+#line 1458 "project.c"
+}
+
+
+#line 194 "project.vala"
+static void model_media_loader_handler_fetcher_ready (ModelMediaLoaderHandler* self, ModelFetcher* f) {
+#line 194 "project.vala"
+       g_return_if_fail (MODEL_IS_MEDIA_LOADER_HANDLER (self));
+#line 194 "project.vala"
+       g_return_if_fail (MODEL_IS_FETCHER (f));
+#line 195 "project.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "fetcher_ready");
+#line 196 "project.vala"
+       if (f->error_string != NULL) {
+#line 1472 "project.c"
+               char* _tmp0_;
+#line 197 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", _tmp0_ = g_strdup_printf ("Could not load %s.", f->clipfile->filename));
+#line 1476 "project.c"
+               _g_free0 (_tmp0_);
+#line 198 "project.vala"
+               g_warning ("project.vala:198: Could not load %s: %s", f->clipfile->filename, f->error_string);
+#line 1480 "project.c"
+       }
+#line 200 "project.vala"
+       model_project_add_clipfile (self->the_project, f->clipfile);
+#line 201 "project.vala"
+       self->priv->num_clipfiles_complete++;
+#line 202 "project.vala"
+       if (self->priv->num_clipfiles_complete == gee_collection_get_size (GEE_COLLECTION (self->priv->clipfetchers))) {
+#line 203 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "complete");
+#line 1490 "project.c"
+       }
+}
+
+
+#line 194 "project.vala"
+static void _model_media_loader_handler_fetcher_ready_model_fetcher_ready (ModelFetcher* _sender, ModelFetcher* fetcher, gpointer self) {
+#line 1497 "project.c"
+       model_media_loader_handler_fetcher_ready (self, fetcher);
+}
+
+
+#line 207 "project.vala"
+static gboolean model_media_loader_handler_real_commit_clipfile (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 1504 "project.c"
+       ModelMediaLoaderHandler * self;
+       gboolean result = FALSE;
+       GError * _inner_error_;
+       char* filename;
+       gint id;
+       self = MODEL_MEDIA_LOADER_HANDLER (base);
+       _inner_error_ = NULL;
+#line 208 "project.vala"
+       filename = NULL;
+#line 209 "project.vala"
+       id = -1;
+#line 1516 "project.c"
+       {
+               gint i;
+#line 211 "project.vala"
+               i = 0;
+#line 1521 "project.c"
+               {
+                       gboolean _tmp0_;
+#line 211 "project.vala"
+                       _tmp0_ = TRUE;
+#line 211 "project.vala"
+                       while (TRUE) {
+#line 211 "project.vala"
+                               if (!_tmp0_) {
+#line 211 "project.vala"
+                                       i++;
+#line 1532 "project.c"
+                               }
+#line 211 "project.vala"
+                               _tmp0_ = FALSE;
+#line 211 "project.vala"
+                               if (!(i < attr_names_length1)) {
+#line 211 "project.vala"
+                                       break;
+#line 1540 "project.c"
+                               }
+#line 212 "project.vala"
+                               if (_vala_strcmp0 (attr_names[i], "filename") == 0) {
+#line 1544 "project.c"
+                                       char* _tmp1_;
+#line 213 "project.vala"
+                                       filename = (_tmp1_ = g_strdup (attr_values[i]), _g_free0 (filename), _tmp1_);
+#line 1548 "project.c"
+                               } else {
+#line 214 "project.vala"
+                                       if (_vala_strcmp0 (attr_names[i], "id") == 0) {
+#line 215 "project.vala"
+                                               id = atoi (attr_values[i]);
+#line 1554 "project.c"
+                                       }
+                               }
+                       }
+               }
+       }
+#line 219 "project.vala"
+       if (filename == NULL) {
+#line 220 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", "Invalid clipfile filename");
+#line 1564 "project.c"
+               result = FALSE;
+               _g_free0 (filename);
+#line 221 "project.vala"
+               return result;
+#line 1569 "project.c"
+       }
+#line 224 "project.vala"
+       if (id < 0) {
+#line 225 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", "Invalid clipfile id");
+#line 1575 "project.c"
+               result = FALSE;
+               _g_free0 (filename);
+#line 226 "project.vala"
+               return result;
+#line 1580 "project.c"
+       }
+       {
+               ModelClipFetcher* fetcher;
+#line 230 "project.vala"
+               fetcher = model_clip_fetcher_new (filename, &_inner_error_);
+#line 1586 "project.c"
+               if (_inner_error_ != NULL) {
+                       goto __catch14_g_error;
+               }
+#line 231 "project.vala"
+               g_signal_connect_object (MODEL_FETCHER (fetcher), "ready", (GCallback) _model_media_loader_handler_fetcher_ready_model_fetcher_ready, self, 0);
+#line 232 "project.vala"
+               gee_abstract_list_insert (GEE_ABSTRACT_LIST (self->priv->clipfetchers), id, fetcher);
+#line 1594 "project.c"
+               _g_object_unref0 (fetcher);
+       }
+       goto __finally14;
+       __catch14_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+#line 234 "project.vala"
+                       g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", e->message);
+#line 1606 "project.c"
+                       result = FALSE;
+                       _g_error_free0 (e);
+                       _g_free0 (filename);
+#line 235 "project.vala"
+                       return result;
+#line 1612 "project.c"
+               }
+       }
+       __finally14:
+       if (_inner_error_ != NULL) {
+               _g_free0 (filename);
+               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 FALSE;
+       }
+       result = TRUE;
+       _g_free0 (filename);
+#line 237 "project.vala"
+       return result;
+#line 1626 "project.c"
+}
+
+
+#line 240 "project.vala"
+static gboolean model_media_loader_handler_real_commit_tempo_entry (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 1632 "project.c"
+       ModelMediaLoaderHandler * self;
+       gboolean result = FALSE;
+       self = MODEL_MEDIA_LOADER_HANDLER (base);
+#line 241 "project.vala"
+       if (_vala_strcmp0 (attr_names[0], "tempo") != 0) {
+#line 242 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", "Invalid attribute on tempo entry");
+#line 1640 "project.c"
+               result = FALSE;
+#line 243 "project.vala"
+               return result;
+#line 1644 "project.c"
+       }
+#line 246 "project.vala"
+       _model_project_set_bpm (self->the_project, atoi (attr_values[0]));
+#line 1648 "project.c"
+       result = TRUE;
+#line 247 "project.vala"
+       return result;
+#line 1652 "project.c"
+}
+
+
+#line 250 "project.vala"
+static gboolean model_media_loader_handler_real_commit_time_signature_entry (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 1658 "project.c"
+       ModelMediaLoaderHandler * self;
+       gboolean result = FALSE;
+       Fraction _tmp1_;
+       Fraction _tmp0_ = {0};
+       self = MODEL_MEDIA_LOADER_HANDLER (base);
+#line 251 "project.vala"
+       if (_vala_strcmp0 (attr_names[0], "signature") != 0) {
+#line 252 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", "Invalid attribute on time signature");
+#line 1668 "project.c"
+               result = FALSE;
+#line 253 "project.vala"
+               return result;
+#line 1672 "project.c"
+       }
+#line 256 "project.vala"
+       _model_project_set_time_signature (self->the_project, (_tmp1_ = (fraction_init_from_string (&_tmp0_, attr_values[0]), _tmp0_), &_tmp1_));
+#line 1676 "project.c"
+       result = TRUE;
+#line 257 "project.vala"
+       return result;
+#line 1680 "project.c"
+}
+
+
+#line 260 "project.vala"
+static gboolean model_media_loader_handler_real_commit_click (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 1686 "project.c"
+       ModelMediaLoaderHandler * self;
+       gboolean result = FALSE;
+       self = MODEL_MEDIA_LOADER_HANDLER (base);
+       {
+               gint i;
+#line 261 "project.vala"
+               i = 0;
+#line 1694 "project.c"
+               {
+                       gboolean _tmp0_;
+#line 261 "project.vala"
+                       _tmp0_ = TRUE;
+#line 261 "project.vala"
+                       while (TRUE) {
+#line 1701 "project.c"
+                               GQuark _tmp3_;
+                               const char* _tmp2_;
+                               static GQuark _tmp3__label0 = 0;
+                               static GQuark _tmp3__label1 = 0;
+                               static GQuark _tmp3__label2 = 0;
+#line 261 "project.vala"
+                               if (!_tmp0_) {
+#line 261 "project.vala"
+                                       i = i + 1;
+#line 1711 "project.c"
+                               }
+#line 261 "project.vala"
+                               _tmp0_ = FALSE;
+#line 261 "project.vala"
+                               if (!(i < attr_names_length1)) {
+#line 261 "project.vala"
+                                       break;
+#line 1719 "project.c"
+                               }
+                               _tmp2_ = attr_names[i];
+                               _tmp3_ = (NULL == _tmp2_) ? 0 : g_quark_from_string (_tmp2_);
+                               if (_tmp3_ == ((0 != _tmp3__label0) ? _tmp3__label0 : (_tmp3__label0 = g_quark_from_static_string ("on_play"))))
+                               switch (0) {
+                                       default:
+                                       {
+#line 264 "project.vala"
+                                               self->the_project->click_during_play = _vala_strcmp0 (attr_values[i], "true") == 0;
+#line 265 "project.vala"
+                                               break;
+#line 1731 "project.c"
+                                       }
+                               } else if (_tmp3_ == ((0 != _tmp3__label1) ? _tmp3__label1 : (_tmp3__label1 = g_quark_from_static_string ("on_record"))))
+                               switch (0) {
+                                       default:
+                                       {
+#line 267 "project.vala"
+                                               self->the_project->click_during_record = _vala_strcmp0 (attr_values[i], "true") == 0;
+#line 268 "project.vala"
+                                               break;
+#line 1741 "project.c"
+                                       }
+                               } else if (_tmp3_ == ((0 != _tmp3__label2) ? _tmp3__label2 : (_tmp3__label2 = g_quark_from_static_string ("volume"))))
+                               switch (0) {
+                                       default:
+                                       {
+#line 270 "project.vala"
+                                               self->the_project->click_volume = g_ascii_strtod (attr_values[i], NULL);
+#line 271 "project.vala"
+                                               break;
+#line 1751 "project.c"
+                                       }
+                               } else
+                               switch (0) {
+                                       default:
+                                       {
+                                               char* _tmp1_;
+#line 273 "project.vala"
+                                               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", _tmp1_ = g_strdup_printf ("unknown attribute for click '%s'", attr_names[i]));
+#line 1760 "project.c"
+                                               _g_free0 (_tmp1_);
+                                               result = FALSE;
+#line 274 "project.vala"
+                                               return result;
+#line 1765 "project.c"
+                                       }
+                               }
+                       }
+               }
+       }
+       result = TRUE;
+#line 277 "project.vala"
+       return result;
+#line 1774 "project.c"
+}
+
+
+#line 280 "project.vala"
+static gboolean model_media_loader_handler_real_commit_library_preference (ModelLoaderHandler* base, char** attr_names, int attr_names_length1, char** attr_values, int attr_values_length1) {
+#line 1780 "project.c"
+       ModelMediaLoaderHandler * self;
+       gboolean result = FALSE;
+       self = MODEL_MEDIA_LOADER_HANDLER (base);
+       {
+               gint i;
+#line 281 "project.vala"
+               i = 0;
+#line 1788 "project.c"
+               {
+                       gboolean _tmp0_;
+#line 281 "project.vala"
+                       _tmp0_ = TRUE;
+#line 281 "project.vala"
+                       while (TRUE) {
+#line 1795 "project.c"
+                               GQuark _tmp3_;
+                               const char* _tmp2_;
+                               static GQuark _tmp3__label0 = 0;
+                               static GQuark _tmp3__label1 = 0;
+#line 281 "project.vala"
+                               if (!_tmp0_) {
+#line 281 "project.vala"
+                                       i = i + 1;
+#line 1804 "project.c"
+                               }
+#line 281 "project.vala"
+                               _tmp0_ = FALSE;
+#line 281 "project.vala"
+                               if (!(i < attr_names_length1)) {
+#line 281 "project.vala"
+                                       break;
+#line 1812 "project.c"
+                               }
+                               _tmp2_ = attr_names[i];
+                               _tmp3_ = (NULL == _tmp2_) ? 0 : g_quark_from_string (_tmp2_);
+                               if (_tmp3_ == ((0 != _tmp3__label0) ? _tmp3__label0 : (_tmp3__label0 = g_quark_from_static_string ("width"))))
+                               switch (0) {
+                                       default:
+                                       {
+#line 284 "project.vala"
+                                               self->the_project->library_width = atoi (attr_values[i]);
+#line 285 "project.vala"
+                                               break;
+#line 1824 "project.c"
+                                       }
+                               } else if (_tmp3_ == ((0 != _tmp3__label1) ? _tmp3__label1 : (_tmp3__label1 = g_quark_from_static_string ("visible"))))
+                               switch (0) {
+                                       default:
+                                       {
+#line 287 "project.vala"
+                                               self->the_project->library_visible = _vala_strcmp0 (attr_values[i], "true") == 0;
+#line 288 "project.vala"
+                                               break;
+#line 1834 "project.c"
+                                       }
+                               } else
+                               switch (0) {
+                                       default:
+                                       {
+                                               char* _tmp1_;
+#line 290 "project.vala"
+                                               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "load-error", _tmp1_ = g_strdup_printf ("unknown attribute for library '%s'", attr_names[i]));
+#line 1843 "project.c"
+                                               _g_free0 (_tmp1_);
+                                               result = FALSE;
+#line 291 "project.vala"
+                                               return result;
+#line 1848 "project.c"
+                                       }
+                               }
+                       }
+               }
+       }
+       result = TRUE;
+#line 294 "project.vala"
+       return result;
+#line 1857 "project.c"
+}
+
+
+#line 297 "project.vala"
+static void model_media_loader_handler_real_leave_library (ModelLoaderHandler* base) {
+#line 1863 "project.c"
+       ModelMediaLoaderHandler * self;
+       self = MODEL_MEDIA_LOADER_HANDLER (base);
+#line 298 "project.vala"
+       if (gee_collection_get_size (GEE_COLLECTION (self->priv->clipfetchers)) == 0) {
+#line 299 "project.vala"
+               g_signal_emit_by_name (MODEL_LOADER_HANDLER (self), "complete");
+#line 1870 "project.c"
+       }
+}
+
+
+static void model_media_loader_handler_class_init (ModelMediaLoaderHandlerClass * klass) {
+       model_media_loader_handler_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ModelMediaLoaderHandlerPrivate));
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_marina = model_media_loader_handler_real_commit_marina;
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_library = model_media_loader_handler_real_commit_library;
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_track = model_media_loader_handler_real_commit_track;
+       MODEL_LOADER_HANDLER_CLASS (klass)->leave_track = model_media_loader_handler_real_leave_track;
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_clip = model_media_loader_handler_real_commit_clip;
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_clipfile = model_media_loader_handler_real_commit_clipfile;
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_tempo_entry = model_media_loader_handler_real_commit_tempo_entry;
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_time_signature_entry = model_media_loader_handler_real_commit_time_signature_entry;
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_click = model_media_loader_handler_real_commit_click;
+       MODEL_LOADER_HANDLER_CLASS (klass)->commit_library_preference = model_media_loader_handler_real_commit_library_preference;
+       MODEL_LOADER_HANDLER_CLASS (klass)->leave_library = model_media_loader_handler_real_leave_library;
+       G_OBJECT_CLASS (klass)->finalize = model_media_loader_handler_finalize;
+}
+
+
+static void model_media_loader_handler_instance_init (ModelMediaLoaderHandler * self) {
+       self->priv = MODEL_MEDIA_LOADER_HANDLER_GET_PRIVATE (self);
+       self->priv->clipfetchers = gee_array_list_new (MODEL_TYPE_CLIP_FETCHER, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL);
+}
+
+
+static void model_media_loader_handler_finalize (GObject* obj) {
+       ModelMediaLoaderHandler * self;
+       self = MODEL_MEDIA_LOADER_HANDLER (obj);
+       _g_object_unref0 (self->current_track);
+       _g_object_unref0 (self->priv->clipfetchers);
+       G_OBJECT_CLASS (model_media_loader_handler_parent_class)->finalize (obj);
+}
+
+
+GType model_media_loader_handler_get_type (void) {
+       static volatile gsize model_media_loader_handler_type_id__volatile = 0;
+       if (g_once_init_enter (&model_media_loader_handler_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelMediaLoaderHandlerClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_media_loader_handler_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelMediaLoaderHandler), 0, (GInstanceInitFunc) model_media_loader_handler_instance_init, NULL };
+               GType model_media_loader_handler_type_id;
+               model_media_loader_handler_type_id = g_type_register_static (MODEL_TYPE_LOADER_HANDLER, "ModelMediaLoaderHandler", &g_define_type_info, 0);
+               g_once_init_leave (&model_media_loader_handler_type_id__volatile, model_media_loader_handler_type_id);
+       }
+       return model_media_loader_handler_type_id__volatile;
+}
+
+
+#line 383 "project.vala"
+static void model_project_real_get_clip_time (ModelProject* self, ModelClipFile* f, TimeCode* result) {
+#line 1922 "project.c"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+       g_critical ("Type `%s' does not implement abstract method `model_project_get_clip_time'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+       return;
+}
+
+
+#line 383 "project.vala"
+void model_project_get_clip_time (ModelProject* self, ModelClipFile* f, TimeCode* result) {
+#line 383 "project.vala"
+       MODEL_PROJECT_GET_CLASS (self)->get_clip_time (self, f, result);
+#line 1933 "project.c"
+}
+
+
+#line 1145 "MediaEngine.vala"
+static void _view_media_engine_on_track_added_model_project_track_added (ModelProject* _sender, ModelTrack* track, gpointer self) {
+#line 1939 "project.c"
+       view_media_engine_on_track_added (self, track);
+}
+
+
+#line 397 "project.vala"
+static void _model_project_on_playstate_changed_view_media_engine_playstate_changed (ViewMediaEngine* _sender, gpointer self) {
+#line 1946 "project.c"
+       model_project_on_playstate_changed (self);
+}
+
+
+#line 924 "project.vala"
+static void _model_project_on_error_occurred_view_media_engine_error_occurred (ViewMediaEngine* _sender, const char* major_message, const char* minor_message, gpointer self) {
+#line 1953 "project.c"
+       model_project_on_error_occurred (self, major_message, minor_message);
+}
+
+
+#line 385 "project.vala"
+ModelProject* model_project_construct (GType object_type, const char* filename, gboolean include_video, GError** error) {
+#line 1960 "project.c"
+       GError * _inner_error_;
+       ModelProject * self;
+       ModelUndoManager* _tmp0_;
+       char* _tmp1_;
+       ViewMediaEngine* _tmp2_;
+       ViewMediaEngine* _tmp3_;
+       _inner_error_ = NULL;
+#line 385 "project.vala"
+       self = (ModelProject*) g_object_new (object_type, NULL);
+#line 386 "project.vala"
+       self->undo_manager = (_tmp0_ = model_undo_manager_new (), _model_undo_manager_unref0 (self->undo_manager), _tmp0_);
+#line 387 "project.vala"
+       self->project_file = (_tmp1_ = g_strdup (filename), _g_free0 (self->project_file), _tmp1_);
+#line 389 "project.vala"
+       _tmp2_ = view_media_engine_new (self, include_video, &_inner_error_);
+#line 1976 "project.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 389 "project.vala"
+       self->media_engine = (_tmp3_ = _tmp2_, _g_object_unref0 (self->media_engine), _tmp3_);
+#line 390 "project.vala"
+       g_signal_connect_object (self, "track-added", (GCallback) _view_media_engine_on_track_added_model_project_track_added, self->media_engine, 0);
+#line 391 "project.vala"
+       g_signal_connect_object (self->media_engine, "playstate-changed", (GCallback) _model_project_on_playstate_changed_view_media_engine_playstate_changed, self, 0);
+#line 392 "project.vala"
+       g_signal_connect_object (self->media_engine, "error-occurred", (GCallback) _model_project_on_error_occurred_view_media_engine_error_occurred, self, 0);
+#line 394 "project.vala"
+       model_project_set_default_framerate (self, &model_project_INVALID_FRAME_RATE);
+#line 1992 "project.c"
+       return self;
+}
+
+
+#line 397 "project.vala"
+void model_project_on_playstate_changed (ModelProject* self) {
+#line 397 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 398 "project.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_playstate_changed");
+#line 399 "project.vala"
+       switch (view_media_engine_get_play_state (self->media_engine)) {
+#line 2005 "project.c"
+               case PLAY_STATE_STOPPED:
+               {
+#line 401 "project.vala"
+                       model_project_ClearTrackMeters (self);
+#line 402 "project.vala"
+                       break;
+#line 2012 "project.c"
+               }
+               case PLAY_STATE_CLOSED:
+               {
+#line 404 "project.vala"
+                       g_signal_emit_by_name (self, "closed");
+#line 405 "project.vala"
+                       break;
+#line 2020 "project.c"
+               }
+       }
+#line 407 "project.vala"
+       g_signal_emit_by_name (self, "playstate-changed", view_media_engine_get_play_state (self->media_engine));
+#line 2025 "project.c"
+}
+
+
+#line 410 "project.vala"
+static char* model_project_real_get_project_file (ModelProject* self) {
+#line 2031 "project.c"
+       char* result = NULL;
+#line 410 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), NULL);
+#line 2035 "project.c"
+       result = g_strdup (self->project_file);
+#line 411 "project.vala"
+       return result;
+#line 2039 "project.c"
+}
+
+
+#line 410 "project.vala"
+char* model_project_get_project_file (ModelProject* self) {
+#line 410 "project.vala"
+       return MODEL_PROJECT_GET_CLASS (self)->get_project_file (self);
+#line 2047 "project.c"
+}
+
+
+#line 414 "project.vala"
+ModelClipFile* model_project_get_clipfile (ModelProject* self, gint index) {
+#line 2053 "project.c"
+       ModelClipFile* result = NULL;
+       gboolean _tmp0_ = FALSE;
+#line 414 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), NULL);
+#line 415 "project.vala"
+       if (index < 0) {
+#line 415 "project.vala"
+               _tmp0_ = TRUE;
+#line 2062 "project.c"
+       } else {
+#line 416 "project.vala"
+               _tmp0_ = index >= gee_collection_get_size (GEE_COLLECTION (self->clipfiles));
+#line 2066 "project.c"
+       }
+#line 415 "project.vala"
+       if (_tmp0_) {
+#line 2070 "project.c"
+               result = NULL;
+#line 417 "project.vala"
+               return result;
+#line 2074 "project.c"
+       }
+       result = (ModelClipFile*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clipfiles), index);
+#line 418 "project.vala"
+       return result;
+#line 2079 "project.c"
+}
+
+
+#line 421 "project.vala"
+gint model_project_get_clipfile_index (ModelProject* self, ModelClipFile* find) {
+#line 2085 "project.c"
+       gint result = 0;
+       gint i;
+#line 421 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), 0);
+#line 421 "project.vala"
+       g_return_val_if_fail (MODEL_IS_CLIP_FILE (find), 0);
+#line 422 "project.vala"
+       i = 0;
+#line 2094 "project.c"
+       {
+               GeeIterator* _f_it;
+               _f_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->clipfiles));
+#line 423 "project.vala"
+               while (TRUE) {
+#line 2100 "project.c"
+                       ModelClipFile* f;
+#line 423 "project.vala"
+                       if (!gee_iterator_next (_f_it)) {
+#line 423 "project.vala"
+                               break;
+#line 2106 "project.c"
+                       }
+#line 423 "project.vala"
+                       f = (ModelClipFile*) gee_iterator_get (_f_it);
+#line 424 "project.vala"
+                       if (f == find) {
+#line 2112 "project.c"
+                               result = i;
+                               _g_object_unref0 (f);
+                               _g_object_unref0 (_f_it);
+#line 425 "project.vala"
+                               return result;
+#line 2118 "project.c"
+                       }
+#line 426 "project.vala"
+                       i++;
+#line 2122 "project.c"
+                       _g_object_unref0 (f);
+               }
+               _g_object_unref0 (_f_it);
+       }
+       result = -1;
+#line 428 "project.vala"
+       return result;
+#line 2130 "project.c"
+}
+
+
+#line 431 "project.vala"
+ModelTrack* model_project_track_from_clip (ModelProject* self, ModelClip* clip) {
+#line 2136 "project.c"
+       ModelTrack* result = NULL;
+#line 431 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), NULL);
+#line 431 "project.vala"
+       g_return_val_if_fail (MODEL_IS_CLIP (clip), NULL);
+#line 2142 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 432 "project.vala"
+               while (TRUE) {
+#line 2148 "project.c"
+                       ModelTrack* track;
+#line 432 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 432 "project.vala"
+                               break;
+#line 2154 "project.c"
+                       }
+#line 432 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 2158 "project.c"
+                       {
+                               GeeIterator* _match_it;
+                               _match_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (track->clips));
+#line 433 "project.vala"
+                               while (TRUE) {
+#line 2164 "project.c"
+                                       ModelClip* match;
+#line 433 "project.vala"
+                                       if (!gee_iterator_next (_match_it)) {
+#line 433 "project.vala"
+                                               break;
+#line 2170 "project.c"
+                                       }
+#line 433 "project.vala"
+                                       match = (ModelClip*) gee_iterator_get (_match_it);
+#line 434 "project.vala"
+                                       if (match == clip) {
+#line 2176 "project.c"
+                                               result = track;
+                                               _g_object_unref0 (match);
+                                               _g_object_unref0 (_match_it);
+                                               _g_object_unref0 (_track_it);
+#line 435 "project.vala"
+                                               return result;
+#line 2183 "project.c"
+                                       }
+                                       _g_object_unref0 (match);
+                               }
+                               _g_object_unref0 (_match_it);
+                       }
+                       _g_object_unref0 (track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+       result = NULL;
+#line 439 "project.vala"
+       return result;
+#line 2196 "project.c"
+}
+
+
+#line 442 "project.vala"
+void model_project_print_graph (ModelProject* self, GstBin* bin, const char* file_name) {
+#line 442 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 442 "project.vala"
+       g_return_if_fail (GST_IS_BIN (bin));
+#line 442 "project.vala"
+       g_return_if_fail (file_name != NULL);
+#line 443 "project.vala"
+       GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (bin, GST_DEBUG_GRAPH_SHOW_ALL, file_name);
+#line 2210 "project.c"
+}
+
+
+#line 446 "project.vala"
+gint64 model_project_get_length (ModelProject* self) {
+#line 2216 "project.c"
+       gint64 result = 0LL;
+       gint64 max;
+#line 446 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), 0LL);
+#line 447 "project.vala"
+       max = (gint64) 0;
+#line 2223 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 448 "project.vala"
+               while (TRUE) {
+#line 2229 "project.c"
+                       ModelTrack* track;
+#line 448 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 448 "project.vala"
+                               break;
+#line 2235 "project.c"
+                       }
+#line 448 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 449 "project.vala"
+                       max = MAX (max, model_track_get_length (track));
+#line 2241 "project.c"
+                       _g_object_unref0 (track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+       result = max;
+#line 451 "project.vala"
+       return result;
+#line 2249 "project.c"
+}
+
+
+#line 454 "project.vala"
+gint64 model_project_snap_clip (ModelProject* self, ModelClip* c, gint64 span) {
+#line 2255 "project.c"
+       gint64 result = 0LL;
+#line 454 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), 0LL);
+#line 454 "project.vala"
+       g_return_val_if_fail (MODEL_IS_CLIP (c), 0LL);
+#line 2261 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 455 "project.vala"
+               while (TRUE) {
+#line 2267 "project.c"
+                       ModelTrack* track;
+                       gint64 new_start;
+#line 455 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 455 "project.vala"
+                               break;
+#line 2274 "project.c"
+                       }
+#line 455 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 456 "project.vala"
+                       new_start = model_track_snap_clip (track, c, span);
+#line 457 "project.vala"
+                       if (new_start != model_clip_get_start (c)) {
+#line 2282 "project.c"
+                               result = new_start;
+                               _g_object_unref0 (track);
+                               _g_object_unref0 (_track_it);
+#line 458 "project.vala"
+                               return result;
+#line 2288 "project.c"
+                       }
+                       _g_object_unref0 (track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+       result = model_clip_get_start (c);
+#line 461 "project.vala"
+       return result;
+#line 2297 "project.c"
+}
+
+
+#line 464 "project.vala"
+void model_project_snap_coord (ModelProject* self, gint64* coord, gint64 span) {
+#line 464 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 2305 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 465 "project.vala"
+               while (TRUE) {
+#line 2311 "project.c"
+                       ModelTrack* track;
+#line 465 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 465 "project.vala"
+                               break;
+#line 2317 "project.c"
+                       }
+#line 465 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 466 "project.vala"
+                       if (model_track_snap_coord (track, coord, span)) {
+#line 2323 "project.c"
+                               _g_object_unref0 (track);
+#line 467 "project.vala"
+                               break;
+#line 2327 "project.c"
+                       }
+                       _g_object_unref0 (track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+}
+
+
+static gpointer _model_gap_ref0 (gpointer self) {
+       return self ? model_gap_ref (self) : NULL;
+}
+
+
+#line 472 "project.vala"
+static ModelGap* model_project_get_gap_intersection (ModelProject* self, ModelGap* gap) {
+#line 2343 "project.c"
+       ModelGap* result = NULL;
+       ModelGap* intersection;
+#line 472 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), NULL);
+#line 472 "project.vala"
+       g_return_val_if_fail (MODEL_IS_GAP (gap), NULL);
+#line 473 "project.vala"
+       intersection = _model_gap_ref0 (gap);
+#line 2352 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 475 "project.vala"
+               while (TRUE) {
+#line 2358 "project.c"
+                       ModelTrack* track;
+                       ModelGap* _tmp1_;
+                       ModelGap* _tmp0_;
+#line 475 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 475 "project.vala"
+                               break;
+#line 2366 "project.c"
+                       }
+#line 475 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 476 "project.vala"
+                       intersection = (_tmp1_ = model_gap_intersect (intersection, _tmp0_ = model_track_find_first_gap (track, intersection->start)), _model_gap_unref0 (intersection), _tmp1_);
+#line 2372 "project.c"
+                       _model_gap_unref0 (_tmp0_);
+                       _g_object_unref0 (track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+       result = intersection;
+#line 479 "project.vala"
+       return result;
+#line 2381 "project.c"
+}
+
+
+#line 482 "project.vala"
+gboolean model_project_can_delete_gap (ModelProject* self, ModelGap* gap) {
+#line 2387 "project.c"
+       gboolean result = FALSE;
+       ModelGap* intersection;
+#line 482 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), FALSE);
+#line 482 "project.vala"
+       g_return_val_if_fail (MODEL_IS_GAP (gap), FALSE);
+#line 483 "project.vala"
+       intersection = model_project_get_gap_intersection (self, gap);
+#line 2396 "project.c"
+       result = !model_gap_is_empty (intersection);
+       _model_gap_unref0 (intersection);
+#line 484 "project.vala"
+       return result;
+#line 2401 "project.c"
+}
+
+
+#line 487 "project.vala"
+void model_project_delete_gap (ModelProject* self, ModelGap* gap) {
+#line 2407 "project.c"
+       ModelGap* intersection;
+#line 487 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 487 "project.vala"
+       g_return_if_fail (MODEL_IS_GAP (gap));
+#line 488 "project.vala"
+       intersection = model_project_get_gap_intersection (self, gap);
+#line 489 "project.vala"
+       g_assert (!model_gap_is_empty (intersection));
+#line 2417 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 491 "project.vala"
+               while (TRUE) {
+#line 2423 "project.c"
+                       ModelTrack* track;
+#line 491 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 491 "project.vala"
+                               break;
+#line 2429 "project.c"
+                       }
+#line 491 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 492 "project.vala"
+                       model_track_delete_gap (track, intersection);
+#line 2435 "project.c"
+                       _g_object_unref0 (track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+       _model_gap_unref0 (intersection);
+}
+
+
+#line 496 "project.vala"
+static void model_project_real_do_append (ModelProject* self, ModelTrack* track, ModelClipFile* clipfile, const char* name, gint64 insert_time) {
+#line 2446 "project.c"
+       ModelClip* clip;
+#line 496 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 496 "project.vala"
+       g_return_if_fail (MODEL_IS_TRACK (track));
+#line 496 "project.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FILE (clipfile));
+#line 496 "project.vala"
+       g_return_if_fail (name != NULL);
+#line 498 "project.vala"
+       switch (model_track_media_type (track)) {
+#line 2458 "project.c"
+               case MODEL_MEDIA_TYPE_AUDIO:
+               {
+#line 500 "project.vala"
+                       if (clipfile->audio_caps == NULL) {
+#line 501 "project.vala"
+                               return;
+#line 2465 "project.c"
+                       }
+#line 503 "project.vala"
+                       break;
+#line 2469 "project.c"
+               }
+               case MODEL_MEDIA_TYPE_VIDEO:
+               {
+#line 505 "project.vala"
+                       if (clipfile->video_caps == NULL) {
+#line 506 "project.vala"
+                               return;
+#line 2477 "project.c"
+                       }
+#line 508 "project.vala"
+                       break;
+#line 2481 "project.c"
+               }
+       }
+#line 511 "project.vala"
+       clip = model_clip_new (clipfile, model_track_media_type (track), name, (gint64) 0, (gint64) 0, model_clip_file_get_length (clipfile), FALSE);
+#line 512 "project.vala"
+       model_track_append_at_time (track, clip, insert_time, TRUE);
+#line 2488 "project.c"
+       _g_object_unref0 (clip);
+}
+
+
+#line 496 "project.vala"
+void model_project_do_append (ModelProject* self, ModelTrack* track, ModelClipFile* clipfile, const char* name, gint64 insert_time) {
+#line 496 "project.vala"
+       MODEL_PROJECT_GET_CLASS (self)->do_append (self, track, clipfile, name, insert_time);
+#line 2497 "project.c"
+}
+
+
+#line 515 "project.vala"
+void model_project_append (ModelProject* self, ModelTrack* track, ModelClipFile* clipfile) {
+#line 2503 "project.c"
+       char* name;
+       gint64 insert_time;
+#line 515 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 515 "project.vala"
+       g_return_if_fail (MODEL_IS_TRACK (track));
+#line 515 "project.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FILE (clipfile));
+#line 516 "project.vala"
+       name = isolate_filename (clipfile->filename);
+#line 517 "project.vala"
+       insert_time = (gint64) 0;
+#line 2516 "project.c"
+       {
+               GeeIterator* _temp_track_it;
+               _temp_track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 519 "project.vala"
+               while (TRUE) {
+#line 2522 "project.c"
+                       ModelTrack* temp_track;
+#line 519 "project.vala"
+                       if (!gee_iterator_next (_temp_track_it)) {
+#line 519 "project.vala"
+                               break;
+#line 2528 "project.c"
+                       }
+#line 519 "project.vala"
+                       temp_track = (ModelTrack*) gee_iterator_get (_temp_track_it);
+#line 520 "project.vala"
+                       insert_time = MAX (insert_time, model_track_get_length (temp_track));
+#line 2534 "project.c"
+                       _g_object_unref0 (temp_track);
+               }
+               _g_object_unref0 (_temp_track_it);
+       }
+#line 522 "project.vala"
+       model_project_do_append (self, track, clipfile, name, insert_time);
+#line 2541 "project.c"
+       _g_free0 (name);
+}
+
+
+#line 525 "project.vala"
+void model_project_add (ModelProject* self, ModelTrack* track, ModelClipFile* clipfile, gint64 time) {
+#line 2548 "project.c"
+       char* name;
+#line 525 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 525 "project.vala"
+       g_return_if_fail (MODEL_IS_TRACK (track));
+#line 525 "project.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FILE (clipfile));
+#line 526 "project.vala"
+       name = isolate_filename (clipfile->filename);
+#line 527 "project.vala"
+       model_project_do_append (self, track, clipfile, name, time);
+#line 2560 "project.c"
+       _g_free0 (name);
+}
+
+
+#line 530 "project.vala"
+void model_project_on_clip_removed (ModelProject* self, ModelTrack* t, ModelClip* clip) {
+#line 530 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 530 "project.vala"
+       g_return_if_fail (MODEL_IS_TRACK (t));
+#line 530 "project.vala"
+       g_return_if_fail (MODEL_IS_CLIP (clip));
+#line 531 "project.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_removed");
+#line 532 "project.vala"
+       model_project_reseek (self);
+#line 2577 "project.c"
+}
+
+
+#line 535 "project.vala"
+void model_project_split_at_playhead (ModelProject* self) {
+#line 2583 "project.c"
+       char* description;
+#line 535 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 536 "project.vala"
+       description = g_strdup ("Split At Playhead");
+#line 537 "project.vala"
+       model_undo_manager_start_transaction (self->undo_manager, description);
+#line 2591 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 538 "project.vala"
+               while (TRUE) {
+#line 2597 "project.c"
+                       ModelTrack* track;
+                       ModelClip* _tmp0_;
+                       gboolean _tmp1_;
+#line 538 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 538 "project.vala"
+                               break;
+#line 2605 "project.c"
+                       }
+#line 538 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 539 "project.vala"
+                       if ((_tmp1_ = (_tmp0_ = model_track_get_clip_by_position (track, model_project_transport_get_position (self))) != NULL, _g_object_unref0 (_tmp0_), _tmp1_)) {
+#line 540 "project.vala"
+                               model_track_split_at (track, model_project_transport_get_position (self));
+#line 2613 "project.c"
+                       }
+                       _g_object_unref0 (track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+#line 543 "project.vala"
+       model_undo_manager_end_transaction (self->undo_manager, description);
+#line 2621 "project.c"
+       _g_free0 (description);
+}
+
+
+#line 546 "project.vala"
+gboolean model_project_can_trim (ModelProject* self, gboolean* left) {
+#line 2628 "project.c"
+       gboolean result = FALSE;
+       ModelClip* first_clip;
+       gint64 start;
+       gint64 end;
+       gboolean start_same;
+       gboolean end_same;
+       gboolean _tmp4_ = FALSE;
+       gboolean _tmp5_ = FALSE;
+#line 546 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), FALSE);
+#line 547 "project.vala"
+       first_clip = NULL;
+#line 553 "project.vala"
+       start = (gint64) 0;
+#line 554 "project.vala"
+       end = (gint64) 0;
+#line 555 "project.vala"
+       start_same = TRUE;
+#line 556 "project.vala"
+       end_same = TRUE;
+#line 2649 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 557 "project.vala"
+               while (TRUE) {
+#line 2655 "project.c"
+                       ModelTrack* track;
+                       ModelClip* clip;
+                       gboolean _tmp0_ = FALSE;
+#line 557 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 557 "project.vala"
+                               break;
+#line 2663 "project.c"
+                       }
+#line 557 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 558 "project.vala"
+                       clip = model_track_get_clip_by_position (track, model_project_transport_get_position (self));
+#line 559 "project.vala"
+                       if (first_clip != NULL) {
+#line 559 "project.vala"
+                               _tmp0_ = clip != NULL;
+#line 2673 "project.c"
+                       } else {
+#line 559 "project.vala"
+                               _tmp0_ = FALSE;
+#line 2677 "project.c"
+                       }
+#line 559 "project.vala"
+                       if (_tmp0_) {
+#line 2681 "project.c"
+                               gboolean _tmp1_ = FALSE;
+                               gboolean _tmp2_ = FALSE;
+#line 560 "project.vala"
+                               if (start_same) {
+#line 560 "project.vala"
+                                       _tmp1_ = start == model_clip_get_start (clip);
+#line 2688 "project.c"
+                               } else {
+#line 560 "project.vala"
+                                       _tmp1_ = FALSE;
+#line 2692 "project.c"
+                               }
+#line 560 "project.vala"
+                               start_same = _tmp1_;
+#line 561 "project.vala"
+                               if (end_same) {
+#line 561 "project.vala"
+                                       _tmp2_ = end == model_clip_get_end (clip);
+#line 2700 "project.c"
+                               } else {
+#line 561 "project.vala"
+                                       _tmp2_ = FALSE;
+#line 2704 "project.c"
+                               }
+#line 561 "project.vala"
+                               end_same = _tmp2_;
+#line 2708 "project.c"
+                       } else {
+#line 562 "project.vala"
+                               if (clip != NULL) {
+#line 2712 "project.c"
+                                       ModelClip* _tmp3_;
+#line 563 "project.vala"
+                                       first_clip = (_tmp3_ = _g_object_ref0 (clip), _g_object_unref0 (first_clip), _tmp3_);
+#line 564 "project.vala"
+                                       start = model_clip_get_start (first_clip);
+#line 565 "project.vala"
+                                       end = model_clip_get_end (first_clip);
+#line 2720 "project.c"
+                               }
+                       }
+                       _g_object_unref0 (track);
+                       _g_object_unref0 (clip);
+               }
+               _g_object_unref0 (_track_it);
+       }
+#line 569 "project.vala"
+       if (first_clip == NULL) {
+#line 2730 "project.c"
+               result = FALSE;
+               _g_object_unref0 (first_clip);
+#line 570 "project.vala"
+               return result;
+#line 2735 "project.c"
+       }
+#line 573 "project.vala"
+       if (start_same) {
+#line 573 "project.vala"
+               _tmp4_ = !end_same;
+#line 2741 "project.c"
+       } else {
+#line 573 "project.vala"
+               _tmp4_ = FALSE;
+#line 2745 "project.c"
+       }
+#line 573 "project.vala"
+       if (_tmp4_) {
+#line 574 "project.vala"
+               *left = TRUE;
+#line 2751 "project.c"
+               result = TRUE;
+               _g_object_unref0 (first_clip);
+#line 575 "project.vala"
+               return result;
+#line 2756 "project.c"
+       }
+#line 578 "project.vala"
+       if (!start_same) {
+#line 578 "project.vala"
+               _tmp5_ = end_same;
+#line 2762 "project.c"
+       } else {
+#line 578 "project.vala"
+               _tmp5_ = FALSE;
+#line 2766 "project.c"
+       }
+#line 578 "project.vala"
+       if (_tmp5_) {
+#line 579 "project.vala"
+               *left = FALSE;
+#line 2772 "project.c"
+               result = TRUE;
+               _g_object_unref0 (first_clip);
+#line 580 "project.vala"
+               return result;
+#line 2777 "project.c"
+       }
+#line 584 "project.vala"
+       *left = (model_project_transport_get_position (self) - model_clip_get_start (first_clip)) < (model_clip_get_duration (first_clip) / 2);
+#line 2781 "project.c"
+       result = TRUE;
+       _g_object_unref0 (first_clip);
+#line 585 "project.vala"
+       return result;
+#line 2786 "project.c"
+}
+
+
+#line 588 "project.vala"
+void model_project_trim_to_playhead (ModelProject* self) {
+#line 2792 "project.c"
+       gboolean left = FALSE;
+       char* description;
+       ModelClip* first_clip;
+       gboolean _tmp1_ = FALSE;
+#line 588 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 590 "project.vala"
+       if (!model_project_can_trim (self, &left)) {
+#line 591 "project.vala"
+               return;
+#line 2803 "project.c"
+       }
+#line 593 "project.vala"
+       description = g_strdup ("Trim To Playhead");
+#line 594 "project.vala"
+       first_clip = NULL;
+#line 595 "project.vala"
+       model_undo_manager_start_transaction (self->undo_manager, description);
+#line 2811 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 596 "project.vala"
+               while (TRUE) {
+#line 2817 "project.c"
+                       ModelTrack* track;
+                       ModelClip* clip;
+#line 596 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 596 "project.vala"
+                               break;
+#line 2824 "project.c"
+                       }
+#line 596 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 597 "project.vala"
+                       clip = model_track_get_clip_by_position (track, model_project_transport_get_position (self));
+#line 598 "project.vala"
+                       if (clip != NULL) {
+#line 2832 "project.c"
+                               gint64 delta = 0LL;
+                               GdkWindowEdge _tmp0_ = 0;
+#line 600 "project.vala"
+                               if (left) {
+#line 601 "project.vala"
+                                       delta = model_project_transport_get_position (self) - model_clip_get_start (clip);
+#line 2839 "project.c"
+                               } else {
+#line 603 "project.vala"
+                                       delta = model_project_transport_get_position (self) - model_clip_get_end (clip);
+#line 2843 "project.c"
+                               }
+#line 605 "project.vala"
+                               if (left) {
+#line 605 "project.vala"
+                                       _tmp0_ = GDK_WINDOW_EDGE_WEST;
+#line 2849 "project.c"
+                               } else {
+#line 605 "project.vala"
+                                       _tmp0_ = GDK_WINDOW_EDGE_EAST;
+#line 2853 "project.c"
+                               }
+#line 605 "project.vala"
+                               model_track_trim (track, clip, delta, _tmp0_);
+#line 2857 "project.c"
+                       }
+                       _g_object_unref0 (track);
+                       _g_object_unref0 (clip);
+               }
+               _g_object_unref0 (_track_it);
+       }
+#line 608 "project.vala"
+       model_undo_manager_end_transaction (self->undo_manager, description);
+#line 610 "project.vala"
+       if (left) {
+#line 610 "project.vala"
+               _tmp1_ = first_clip != NULL;
+#line 2870 "project.c"
+       } else {
+#line 610 "project.vala"
+               _tmp1_ = FALSE;
+#line 2874 "project.c"
+       }
+#line 610 "project.vala"
+       if (_tmp1_) {
+#line 611 "project.vala"
+               model_project_transport_go (self, model_clip_get_start (first_clip));
+#line 2880 "project.c"
+       }
+       _g_free0 (description);
+       _g_object_unref0 (first_clip);
+}
+
+
+#line 615 "project.vala"
+void model_project_transport_go (ModelProject* self, gint64 position) {
+#line 615 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 616 "project.vala"
+       view_media_engine_go (self->media_engine, position);
+#line 2893 "project.c"
+}
+
+
+#line 619 "project.vala"
+gboolean model_project_transport_is_playing (ModelProject* self) {
+#line 2899 "project.c"
+       gboolean result = FALSE;
+#line 619 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), FALSE);
+#line 2903 "project.c"
+       result = self->media_engine->playing;
+#line 620 "project.vala"
+       return result;
+#line 2907 "project.c"
+}
+
+
+#line 623 "project.vala"
+gboolean model_project_transport_is_recording (ModelProject* self) {
+#line 2913 "project.c"
+       gboolean result = FALSE;
+       gboolean _tmp0_ = FALSE;
+#line 623 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), FALSE);
+#line 624 "project.vala"
+       if (view_media_engine_get_play_state (self->media_engine) == PLAY_STATE_PRE_RECORD) {
+#line 624 "project.vala"
+               _tmp0_ = TRUE;
+#line 2922 "project.c"
+       } else {
+#line 625 "project.vala"
+               _tmp0_ = view_media_engine_get_play_state (self->media_engine) == PLAY_STATE_RECORDING;
+#line 2926 "project.c"
+       }
+       result = _tmp0_;
+#line 624 "project.vala"
+       return result;
+#line 2931 "project.c"
+}
+
+
+#line 628 "project.vala"
+gboolean model_project_playhead_on_clip (ModelProject* self) {
+#line 2937 "project.c"
+       gboolean result = FALSE;
+#line 628 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), FALSE);
+#line 2941 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 629 "project.vala"
+               while (TRUE) {
+#line 2947 "project.c"
+                       ModelTrack* track;
+                       ModelClip* _tmp0_;
+                       gboolean _tmp1_;
+#line 629 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 629 "project.vala"
+                               break;
+#line 2955 "project.c"
+                       }
+#line 629 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 630 "project.vala"
+                       if ((_tmp1_ = (_tmp0_ = model_track_get_clip_by_position (track, model_project_transport_get_position (self))) != NULL, _g_object_unref0 (_tmp0_), _tmp1_)) {
+#line 2961 "project.c"
+                               result = TRUE;
+                               _g_object_unref0 (track);
+                               _g_object_unref0 (_track_it);
+#line 631 "project.vala"
+                               return result;
+#line 2967 "project.c"
+                       }
+                       _g_object_unref0 (track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+       result = FALSE;
+#line 634 "project.vala"
+       return result;
+#line 2976 "project.c"
+}
+
+
+#line 637 "project.vala"
+gboolean model_project_playhead_on_contiguous_clip (ModelProject* self) {
+#line 2982 "project.c"
+       gboolean result = FALSE;
+#line 637 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), FALSE);
+#line 2986 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 638 "project.vala"
+               while (TRUE) {
+#line 2992 "project.c"
+                       ModelTrack* track;
+#line 638 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 638 "project.vala"
+                               break;
+#line 2998 "project.c"
+                       }
+#line 638 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 639 "project.vala"
+                       if (model_track_are_contiguous_clips (track, model_project_transport_get_position (self))) {
+#line 3004 "project.c"
+                               result = TRUE;
+                               _g_object_unref0 (track);
+                               _g_object_unref0 (_track_it);
+#line 640 "project.vala"
+                               return result;
+#line 3010 "project.c"
+                       }
+                       _g_object_unref0 (track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+       result = FALSE;
+#line 643 "project.vala"
+       return result;
+#line 3019 "project.c"
+}
+
+
+#line 646 "project.vala"
+gboolean model_project_is_duplicate_track_name (ModelProject* self, ModelTrack* track, const char* new_name) {
+#line 3025 "project.c"
+       gboolean result = FALSE;
+#line 646 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), FALSE);
+#line 646 "project.vala"
+       g_return_val_if_fail ((track == NULL) || MODEL_IS_TRACK (track), FALSE);
+#line 646 "project.vala"
+       g_return_val_if_fail (new_name != NULL, FALSE);
+#line 647 "project.vala"
+       g_assert (_vala_strcmp0 (new_name, "") != 0);
+#line 3035 "project.c"
+       {
+               GeeIterator* _this_track_it;
+               _this_track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 648 "project.vala"
+               while (TRUE) {
+#line 3041 "project.c"
+                       ModelTrack* this_track;
+#line 648 "project.vala"
+                       if (!gee_iterator_next (_this_track_it)) {
+#line 648 "project.vala"
+                               break;
+#line 3047 "project.c"
+                       }
+#line 648 "project.vala"
+                       this_track = (ModelTrack*) gee_iterator_get (_this_track_it);
+#line 649 "project.vala"
+                       if (track != this_track) {
+#line 3053 "project.c"
+                               char* _tmp0_;
+                               gboolean _tmp1_;
+#line 650 "project.vala"
+                               if ((_tmp1_ = _vala_strcmp0 (_tmp0_ = model_track_get_display_name (this_track), new_name) == 0, _g_free0 (_tmp0_), _tmp1_)) {
+#line 3058 "project.c"
+                                       result = TRUE;
+                                       _g_object_unref0 (this_track);
+                                       _g_object_unref0 (_this_track_it);
+#line 651 "project.vala"
+                                       return result;
+#line 3064 "project.c"
+                               }
+                       }
+                       _g_object_unref0 (this_track);
+               }
+               _g_object_unref0 (_this_track_it);
+       }
+       {
+               GeeIterator* _this_track_it;
+               _this_track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->inactive_tracks));
+#line 656 "project.vala"
+               while (TRUE) {
+#line 3076 "project.c"
+                       ModelTrack* this_track;
+#line 656 "project.vala"
+                       if (!gee_iterator_next (_this_track_it)) {
+#line 656 "project.vala"
+                               break;
+#line 3082 "project.c"
+                       }
+#line 656 "project.vala"
+                       this_track = (ModelTrack*) gee_iterator_get (_this_track_it);
+#line 657 "project.vala"
+                       if (track != this_track) {
+#line 3088 "project.c"
+                               char* _tmp2_;
+                               gboolean _tmp3_;
+#line 658 "project.vala"
+                               if ((_tmp3_ = _vala_strcmp0 (_tmp2_ = model_track_get_display_name (this_track), new_name) == 0, _g_free0 (_tmp2_), _tmp3_)) {
+#line 3093 "project.c"
+                                       result = TRUE;
+                                       _g_object_unref0 (this_track);
+                                       _g_object_unref0 (_this_track_it);
+#line 659 "project.vala"
+                                       return result;
+#line 3099 "project.c"
+                               }
+                       }
+                       _g_object_unref0 (this_track);
+               }
+               _g_object_unref0 (_this_track_it);
+       }
+       result = FALSE;
+#line 663 "project.vala"
+       return result;
+#line 3109 "project.c"
+}
+
+
+#line 530 "project.vala"
+static void _model_project_on_clip_removed_model_track_clip_removed (ModelTrack* _sender, ModelClip* clip, gpointer self) {
+#line 3115 "project.c"
+       model_project_on_clip_removed (self, _sender, clip);
+}
+
+
+#line 924 "project.vala"
+static void _model_project_on_error_occurred_model_track_error_occurred (ModelTrack* _sender, const char* major_error, const char* minor_error, gpointer self) {
+#line 3122 "project.c"
+       model_project_on_error_occurred (self, major_error, minor_error);
+}
+
+
+#line 666 "project.vala"
+static void model_project_real_add_track (ModelProject* self, ModelTrack* track) {
+#line 666 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 666 "project.vala"
+       g_return_if_fail (MODEL_IS_TRACK (track));
+#line 667 "project.vala"
+       g_signal_connect_object (track, "clip-removed", (GCallback) _model_project_on_clip_removed_model_track_clip_removed, self, 0);
+#line 668 "project.vala"
+       g_signal_connect_object (track, "error-occurred", (GCallback) _model_project_on_error_occurred_model_track_error_occurred, self, 0);
+#line 669 "project.vala"
+       gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->tracks), track);
+#line 670 "project.vala"
+       g_signal_emit_by_name (self, "track-added", track);
+#line 3141 "project.c"
+}
+
+
+#line 666 "project.vala"
+void model_project_add_track (ModelProject* self, ModelTrack* track) {
+#line 666 "project.vala"
+       MODEL_PROJECT_GET_CLASS (self)->add_track (self, track);
+#line 3149 "project.c"
+}
+
+
+#line 672 "project.vala"
+static void model_project_real_insert_track (ModelProject* self, gint index, ModelTrack* track) {
+#line 672 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 672 "project.vala"
+       g_return_if_fail (MODEL_IS_TRACK (track));
+#line 673 "project.vala"
+       if (0 > index) {
+#line 673 "project.vala"
+               index = 0;
+#line 3163 "project.c"
+       }
+#line 674 "project.vala"
+       if (gee_collection_get_size (GEE_COLLECTION (self->tracks)) <= index) {
+#line 675 "project.vala"
+               model_project_add_track (self, track);
+#line 3169 "project.c"
+       } else {
+#line 678 "project.vala"
+               g_signal_connect_object (track, "clip-removed", (GCallback) _model_project_on_clip_removed_model_track_clip_removed, self, 0);
+#line 679 "project.vala"
+               g_signal_connect_object (track, "error-occurred", (GCallback) _model_project_on_error_occurred_model_track_error_occurred, self, 0);
+#line 680 "project.vala"
+               gee_abstract_list_insert (GEE_ABSTRACT_LIST (self->tracks), index, track);
+#line 681 "project.vala"
+               g_signal_emit_by_name (self, "track-added", track);
+#line 3179 "project.c"
+       }
+}
+
+
+#line 672 "project.vala"
+void model_project_insert_track (ModelProject* self, gint index, ModelTrack* track) {
+#line 672 "project.vala"
+       MODEL_PROJECT_GET_CLASS (self)->insert_track (self, index, track);
+#line 3188 "project.c"
+}
+
+
+#line 685 "project.vala"
+void model_project_add_inactive_track (ModelProject* self, ModelTrack* track) {
+#line 685 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 685 "project.vala"
+       g_return_if_fail (MODEL_IS_TRACK (track));
+#line 686 "project.vala"
+       model_track_hide (track);
+#line 687 "project.vala"
+       gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->inactive_tracks), track);
+#line 3202 "project.c"
+}
+
+
+#line 690 "project.vala"
+void model_project_remove_track (ModelProject* self, ModelTrack* track) {
+#line 690 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 690 "project.vala"
+       g_return_if_fail (MODEL_IS_TRACK (track));
+#line 691 "project.vala"
+       gst_element_set_state (GST_ELEMENT (self->media_engine->pipeline), GST_STATE_NULL);
+#line 692 "project.vala"
+       g_signal_emit_by_name (track, "track-removed", track);
+#line 693 "project.vala"
+       gee_abstract_collection_remove (GEE_ABSTRACT_COLLECTION (self->tracks), track);
+#line 694 "project.vala"
+       g_signal_emit_by_name (self, "track-removed", track);
+#line 3220 "project.c"
+}
+
+
+#line 697 "project.vala"
+void model_project_remove_track_at (ModelProject* self, gint index) {
+#line 3226 "project.c"
+       ModelTrack* _tmp0_;
+#line 697 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 698 "project.vala"
+       model_project_remove_track (self, _tmp0_ = (ModelTrack*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->tracks), index));
+#line 3232 "project.c"
+       _g_object_unref0 (_tmp0_);
+}
+
+
+#line 701 "project.vala"
+void model_project_add_clipfile (ModelProject* self, ModelClipFile* clipfile) {
+#line 3239 "project.c"
+       ModelCommand* command;
+#line 701 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 701 "project.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FILE (clipfile));
+#line 702 "project.vala"
+       command = MODEL_COMMAND (model_add_clip_command_new (self, clipfile));
+#line 703 "project.vala"
+       model_project_do_command (self, command);
+#line 3249 "project.c"
+       _model_command_unref0 (command);
+}
+
+
+#line 717 "project.vala"
+static void _model_project_on_thumbnail_ready_model_fetcher_ready (ModelFetcher* _sender, ModelFetcher* fetcher, gpointer self) {
+#line 3256 "project.c"
+       model_project_on_thumbnail_ready (self, fetcher);
+}
+
+
+#line 706 "project.vala"
+void _model_project_add_clipfile (ModelProject* self, ModelClipFile* clipfile, GError** error) {
+#line 3263 "project.c"
+       GError * _inner_error_;
+       gboolean _tmp0_ = FALSE;
+#line 706 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 706 "project.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FILE (clipfile));
+#line 3270 "project.c"
+       _inner_error_ = NULL;
+#line 707 "project.vala"
+       gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->clipfiles), clipfile);
+#line 708 "project.vala"
+       if (model_clip_file_is_online (clipfile)) {
+#line 708 "project.vala"
+               _tmp0_ = model_clip_file_is_of_type (clipfile, MODEL_MEDIA_TYPE_VIDEO);
+#line 3278 "project.c"
+       } else {
+#line 708 "project.vala"
+               _tmp0_ = FALSE;
+#line 3282 "project.c"
+       }
+#line 708 "project.vala"
+       if (_tmp0_) {
+#line 3286 "project.c"
+               ModelThumbnailFetcher* fetcher;
+#line 709 "project.vala"
+               fetcher = model_thumbnail_fetcher_new (clipfile, (gint64) 0, &_inner_error_);
+#line 3290 "project.c"
+               if (_inner_error_ != NULL) {
+                       g_propagate_error (error, _inner_error_);
+                       return;
+               }
+#line 710 "project.vala"
+               g_signal_connect_object (MODEL_FETCHER (fetcher), "ready", (GCallback) _model_project_on_thumbnail_ready_model_fetcher_ready, self, 0);
+#line 711 "project.vala"
+               gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->priv->pending_thumbs), fetcher);
+#line 3299 "project.c"
+               _g_object_unref0 (fetcher);
+       } else {
+#line 713 "project.vala"
+               g_signal_emit_by_name (self, "clipfile-added", clipfile);
+#line 3304 "project.c"
+       }
+}
+
+
+#line 717 "project.vala"
+static void model_project_on_thumbnail_ready (ModelProject* self, ModelFetcher* f) {
+#line 3311 "project.c"
+       ModelFetcher* _tmp0_;
+#line 717 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 717 "project.vala"
+       g_return_if_fail (MODEL_IS_FETCHER (f));
+#line 718 "project.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_thumbnail_ready");
+#line 719 "project.vala"
+       g_signal_emit_by_name (self, "clipfile-added", f->clipfile);
+#line 720 "project.vala"
+       gee_abstract_collection_remove (GEE_ABSTRACT_COLLECTION (self->priv->pending_thumbs), (_tmp0_ = f, MODEL_IS_THUMBNAIL_FETCHER (_tmp0_) ? ((ModelThumbnailFetcher*) _tmp0_) : NULL));
+#line 3323 "project.c"
+}
+
+
+#line 723 "project.vala"
+gboolean model_project_clipfile_on_track (ModelProject* self, const char* filename) {
+#line 3329 "project.c"
+       gboolean result = FALSE;
+       ModelClipFile* cf;
+#line 723 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), FALSE);
+#line 723 "project.vala"
+       g_return_val_if_fail (filename != NULL, FALSE);
+#line 724 "project.vala"
+       cf = model_project_find_clipfile (self, filename);
+#line 3338 "project.c"
+       {
+               GeeIterator* _t_it;
+               _t_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 726 "project.vala"
+               while (TRUE) {
+#line 3344 "project.c"
+                       ModelTrack* t;
+#line 726 "project.vala"
+                       if (!gee_iterator_next (_t_it)) {
+#line 726 "project.vala"
+                               break;
+#line 3350 "project.c"
+                       }
+#line 726 "project.vala"
+                       t = (ModelTrack*) gee_iterator_get (_t_it);
+#line 3354 "project.c"
+                       {
+                               GeeIterator* _c_it;
+                               _c_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (t->clips));
+#line 727 "project.vala"
+                               while (TRUE) {
+#line 3360 "project.c"
+                                       ModelClip* c;
+#line 727 "project.vala"
+                                       if (!gee_iterator_next (_c_it)) {
+#line 727 "project.vala"
+                                               break;
+#line 3366 "project.c"
+                                       }
+#line 727 "project.vala"
+                                       c = (ModelClip*) gee_iterator_get (_c_it);
+#line 728 "project.vala"
+                                       if (c->clipfile == cf) {
+#line 3372 "project.c"
+                                               result = TRUE;
+                                               _g_object_unref0 (c);
+                                               _g_object_unref0 (_c_it);
+                                               _g_object_unref0 (t);
+                                               _g_object_unref0 (_t_it);
+                                               _g_object_unref0 (cf);
+#line 729 "project.vala"
+                                               return result;
+#line 3381 "project.c"
+                                       }
+                                       _g_object_unref0 (c);
+                               }
+                               _g_object_unref0 (_c_it);
+                       }
+                       _g_object_unref0 (t);
+               }
+               _g_object_unref0 (_t_it);
+       }
+       {
+               GeeIterator* _t_it;
+               _t_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->inactive_tracks));
+#line 733 "project.vala"
+               while (TRUE) {
+#line 3396 "project.c"
+                       ModelTrack* t;
+#line 733 "project.vala"
+                       if (!gee_iterator_next (_t_it)) {
+#line 733 "project.vala"
+                               break;
+#line 3402 "project.c"
+                       }
+#line 733 "project.vala"
+                       t = (ModelTrack*) gee_iterator_get (_t_it);
+#line 3406 "project.c"
+                       {
+                               GeeIterator* _c_it;
+                               _c_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (t->clips));
+#line 734 "project.vala"
+                               while (TRUE) {
+#line 3412 "project.c"
+                                       ModelClip* c;
+#line 734 "project.vala"
+                                       if (!gee_iterator_next (_c_it)) {
+#line 734 "project.vala"
+                                               break;
+#line 3418 "project.c"
+                                       }
+#line 734 "project.vala"
+                                       c = (ModelClip*) gee_iterator_get (_c_it);
+#line 735 "project.vala"
+                                       if (c->clipfile == cf) {
+#line 3424 "project.c"
+                                               result = TRUE;
+                                               _g_object_unref0 (c);
+                                               _g_object_unref0 (_c_it);
+                                               _g_object_unref0 (t);
+                                               _g_object_unref0 (_t_it);
+                                               _g_object_unref0 (cf);
+#line 736 "project.vala"
+                                               return result;
+#line 3433 "project.c"
+                                       }
+                                       _g_object_unref0 (c);
+                               }
+                               _g_object_unref0 (_c_it);
+                       }
+                       _g_object_unref0 (t);
+               }
+               _g_object_unref0 (_t_it);
+       }
+       result = FALSE;
+       _g_object_unref0 (cf);
+#line 740 "project.vala"
+       return result;
+#line 3447 "project.c"
+}
+
+
+#line 743 "project.vala"
+static void model_project_delete_clipfile_from_tracks (ModelProject* self, ModelClipFile* cf) {
+#line 743 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 743 "project.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FILE (cf));
+#line 3457 "project.c"
+       {
+               GeeIterator* _t_it;
+               _t_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 744 "project.vala"
+               while (TRUE) {
+#line 3463 "project.c"
+                       ModelTrack* t;
+#line 744 "project.vala"
+                       if (!gee_iterator_next (_t_it)) {
+#line 744 "project.vala"
+                               break;
+#line 3469 "project.c"
+                       }
+#line 744 "project.vala"
+                       t = (ModelTrack*) gee_iterator_get (_t_it);
+#line 3473 "project.c"
+                       {
+                               gint i;
+#line 745 "project.vala"
+                               i = 0;
+#line 3478 "project.c"
+                               {
+                                       gboolean _tmp0_;
+#line 745 "project.vala"
+                                       _tmp0_ = TRUE;
+#line 745 "project.vala"
+                                       while (TRUE) {
+#line 3485 "project.c"
+                                               ModelClip* _tmp1_;
+                                               gboolean _tmp2_;
+#line 745 "project.vala"
+                                               if (!_tmp0_) {
+#line 745 "project.vala"
+                                                       i++;
+#line 3492 "project.c"
+                                               }
+#line 745 "project.vala"
+                                               _tmp0_ = FALSE;
+#line 745 "project.vala"
+                                               if (!(i < gee_collection_get_size (GEE_COLLECTION (t->clips)))) {
+#line 745 "project.vala"
+                                                       break;
+#line 3500 "project.c"
+                                               }
+#line 746 "project.vala"
+                                               if ((_tmp2_ = (_tmp1_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (t->clips), i))->clipfile == cf, _g_object_unref0 (_tmp1_), _tmp2_)) {
+#line 3504 "project.c"
+                                                       ModelClip* _tmp3_;
+#line 747 "project.vala"
+                                                       model_track_delete_clip (t, _tmp3_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (t->clips), i));
+#line 3508 "project.c"
+                                                       _g_object_unref0 (_tmp3_);
+#line 748 "project.vala"
+                                                       i--;
+#line 3512 "project.c"
+                                               }
+                                       }
+                               }
+                       }
+                       _g_object_unref0 (t);
+               }
+               _g_object_unref0 (_t_it);
+       }
+       {
+               GeeIterator* _t_it;
+               _t_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->inactive_tracks));
+#line 753 "project.vala"
+               while (TRUE) {
+#line 3526 "project.c"
+                       ModelTrack* t;
+#line 753 "project.vala"
+                       if (!gee_iterator_next (_t_it)) {
+#line 753 "project.vala"
+                               break;
+#line 3532 "project.c"
+                       }
+#line 753 "project.vala"
+                       t = (ModelTrack*) gee_iterator_get (_t_it);
+#line 3536 "project.c"
+                       {
+                               gint i;
+#line 754 "project.vala"
+                               i = 0;
+#line 3541 "project.c"
+                               {
+                                       gboolean _tmp4_;
+#line 754 "project.vala"
+                                       _tmp4_ = TRUE;
+#line 754 "project.vala"
+                                       while (TRUE) {
+#line 3548 "project.c"
+                                               ModelClip* _tmp5_;
+                                               gboolean _tmp6_;
+#line 754 "project.vala"
+                                               if (!_tmp4_) {
+#line 754 "project.vala"
+                                                       i++;
+#line 3555 "project.c"
+                                               }
+#line 754 "project.vala"
+                                               _tmp4_ = FALSE;
+#line 754 "project.vala"
+                                               if (!(i < gee_collection_get_size (GEE_COLLECTION (t->clips)))) {
+#line 754 "project.vala"
+                                                       break;
+#line 3563 "project.c"
+                                               }
+#line 755 "project.vala"
+                                               if ((_tmp6_ = (_tmp5_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (t->clips), i))->clipfile == cf, _g_object_unref0 (_tmp5_), _tmp6_)) {
+#line 3567 "project.c"
+                                                       ModelClip* _tmp7_;
+#line 756 "project.vala"
+                                                       model_track_delete_clip (t, _tmp7_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (t->clips), i));
+#line 3571 "project.c"
+                                                       _g_object_unref0 (_tmp7_);
+#line 757 "project.vala"
+                                                       i--;
+#line 3575 "project.c"
+                                               }
+                                       }
+                               }
+                       }
+                       _g_object_unref0 (t);
+               }
+               _g_object_unref0 (_t_it);
+       }
+}
+
+
+#line 763 "project.vala"
+void _model_project_remove_clipfile (ModelProject* self, ModelClipFile* cf) {
+#line 763 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 763 "project.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FILE (cf));
+#line 764 "project.vala"
+       gee_abstract_collection_remove (GEE_ABSTRACT_COLLECTION (self->clipfiles), cf);
+#line 765 "project.vala"
+       g_signal_emit_by_name (self, "clipfile-removed", cf);
+#line 3597 "project.c"
+}
+
+
+#line 768 "project.vala"
+void model_project_remove_clipfile (ModelProject* self, const char* filename) {
+#line 3603 "project.c"
+       ModelClipFile* cf;
+#line 768 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 768 "project.vala"
+       g_return_if_fail (filename != NULL);
+#line 769 "project.vala"
+       cf = model_project_find_clipfile (self, filename);
+#line 770 "project.vala"
+       if (cf != NULL) {
+#line 3613 "project.c"
+               char* description;
+               ModelCommand* clipfile_delete;
+#line 771 "project.vala"
+               description = g_strdup ("Delete From Library");
+#line 772 "project.vala"
+               model_undo_manager_start_transaction (self->undo_manager, description);
+#line 774 "project.vala"
+               model_project_delete_clipfile_from_tracks (self, cf);
+#line 776 "project.vala"
+               clipfile_delete = MODEL_COMMAND (model_clip_file_delete_command_new (self, cf));
+#line 777 "project.vala"
+               model_project_do_command (self, clipfile_delete);
+#line 779 "project.vala"
+               model_undo_manager_end_transaction (self->undo_manager, description);
+#line 3628 "project.c"
+               _g_free0 (description);
+               _model_command_unref0 (clipfile_delete);
+       }
+       _g_object_unref0 (cf);
+}
+
+
+#line 783 "project.vala"
+ModelClipFile* model_project_find_clipfile (ModelProject* self, const char* filename) {
+#line 3638 "project.c"
+       ModelClipFile* result = NULL;
+#line 783 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), NULL);
+#line 783 "project.vala"
+       g_return_val_if_fail (filename != NULL, NULL);
+#line 3644 "project.c"
+       {
+               GeeIterator* _cf_it;
+               _cf_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->clipfiles));
+#line 784 "project.vala"
+               while (TRUE) {
+#line 3650 "project.c"
+                       ModelClipFile* cf;
+#line 784 "project.vala"
+                       if (!gee_iterator_next (_cf_it)) {
+#line 784 "project.vala"
+                               break;
+#line 3656 "project.c"
+                       }
+#line 784 "project.vala"
+                       cf = (ModelClipFile*) gee_iterator_get (_cf_it);
+#line 785 "project.vala"
+                       if (_vala_strcmp0 (cf->filename, filename) == 0) {
+#line 3662 "project.c"
+                               result = cf;
+                               _g_object_unref0 (_cf_it);
+#line 786 "project.vala"
+                               return result;
+#line 3667 "project.c"
+                       }
+                       _g_object_unref0 (cf);
+               }
+               _g_object_unref0 (_cf_it);
+       }
+       result = NULL;
+#line 787 "project.vala"
+       return result;
+#line 3676 "project.c"
+}
+
+
+#line 790 "project.vala"
+void model_project_reseek (ModelProject* self) {
+#line 790 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 790 "project.vala"
+       model_project_transport_go (self, model_project_transport_get_position (self));
+#line 3686 "project.c"
+}
+
+
+#line 792 "project.vala"
+void model_project_go_start (ModelProject* self) {
+#line 792 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 792 "project.vala"
+       model_project_transport_go (self, (gint64) 0);
+#line 3696 "project.c"
+}
+
+
+#line 794 "project.vala"
+void model_project_go_end (ModelProject* self) {
+#line 794 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 794 "project.vala"
+       model_project_transport_go (self, model_project_get_length (self));
+#line 3706 "project.c"
+}
+
+
+#line 796 "project.vala"
+void model_project_go_previous (ModelProject* self) {
+#line 3712 "project.c"
+       gint64 start_pos;
+       gint64 new_position;
+#line 796 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 797 "project.vala"
+       start_pos = model_project_transport_get_position (self);
+#line 801 "project.vala"
+       if (model_project_transport_is_playing (self)) {
+#line 802 "project.vala"
+               start_pos = start_pos - ((gint64) (1 * GST_SECOND));
+#line 3723 "project.c"
+       }
+#line 804 "project.vala"
+       new_position = (gint64) 0;
+#line 3727 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 805 "project.vala"
+               while (TRUE) {
+#line 3733 "project.c"
+                       ModelTrack* track;
+#line 805 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 805 "project.vala"
+                               break;
+#line 3739 "project.c"
+                       }
+#line 805 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 806 "project.vala"
+                       new_position = MAX (new_position, model_track_previous_edit (track, start_pos));
+#line 3745 "project.c"
+                       _g_object_unref0 (track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+#line 808 "project.vala"
+       model_project_transport_go (self, new_position);
+#line 3752 "project.c"
+}
+
+
+#line 812 "project.vala"
+void model_project_go_next (ModelProject* self) {
+#line 3758 "project.c"
+       gint64 start_pos;
+       gint64 new_position;
+#line 812 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 813 "project.vala"
+       start_pos = model_project_transport_get_position (self);
+#line 814 "project.vala"
+       new_position = model_project_get_length (self);
+#line 3767 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 815 "project.vala"
+               while (TRUE) {
+#line 3773 "project.c"
+                       ModelTrack* track;
+#line 815 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 815 "project.vala"
+                               break;
+#line 3779 "project.c"
+                       }
+#line 815 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 816 "project.vala"
+                       if (model_track_get_length (track) > start_pos) {
+#line 817 "project.vala"
+                               new_position = MIN (new_position, model_track_next_edit (track, start_pos));
+#line 3787 "project.c"
+                       }
+                       _g_object_unref0 (track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+#line 820 "project.vala"
+       model_project_transport_go (self, new_position);
+#line 3795 "project.c"
+}
+
+
+#line 823 "project.vala"
+gint64 model_project_transport_get_position (ModelProject* self) {
+#line 3801 "project.c"
+       gint64 result = 0LL;
+#line 823 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), 0LL);
+#line 3805 "project.c"
+       result = self->media_engine->position;
+#line 824 "project.vala"
+       return result;
+#line 3809 "project.c"
+}
+
+
+#line 827 "project.vala"
+void model_project_set_name (ModelProject* self, const char* filename) {
+#line 827 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 828 "project.vala"
+       if (filename != NULL) {
+#line 3819 "project.c"
+               char* _tmp0_;
+#line 829 "project.vala"
+               self->project_file = (_tmp0_ = g_strdup (filename), _g_free0 (self->project_file), _tmp0_);
+#line 3823 "project.c"
+       }
+#line 831 "project.vala"
+       g_signal_emit_by_name (self, "name-changed", filename);
+#line 3827 "project.c"
+}
+
+
+#line 834 "project.vala"
+void model_project_set_default_framerate (ModelProject* self, Fraction* rate) {
+#line 834 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 835 "project.vala"
+       self->default_framerate = *rate;
+#line 3837 "project.c"
+}
+
+
+#line 1077 "glib-2.0.vapi"
+static char* string_substring (const char* self, glong offset, glong len) {
+#line 3843 "project.c"
+       char* result = NULL;
+       glong string_length;
+       const char* start;
+#line 1077 "glib-2.0.vapi"
+       g_return_val_if_fail (self != NULL, NULL);
+#line 1078 "glib-2.0.vapi"
+       string_length = g_utf8_strlen (self, -1);
+#line 1079 "glib-2.0.vapi"
+       if (offset < 0) {
+#line 1080 "glib-2.0.vapi"
+               offset = string_length + offset;
+#line 1081 "glib-2.0.vapi"
+               g_return_val_if_fail (offset >= 0, NULL);
+#line 3857 "project.c"
+       } else {
+#line 1083 "glib-2.0.vapi"
+               g_return_val_if_fail (offset <= string_length, NULL);
+#line 3861 "project.c"
+       }
+#line 1085 "glib-2.0.vapi"
+       if (len < 0) {
+#line 1086 "glib-2.0.vapi"
+               len = string_length - offset;
+#line 3867 "project.c"
+       }
+#line 1088 "glib-2.0.vapi"
+       g_return_val_if_fail ((offset + len) <= string_length, NULL);
+#line 1089 "glib-2.0.vapi"
+       start = g_utf8_offset_to_pointer (self, offset);
+#line 3873 "project.c"
+       result = g_strndup (start, ((gchar*) g_utf8_offset_to_pointer (start, len)) - ((gchar*) start));
+#line 1090 "glib-2.0.vapi"
+       return result;
+#line 3877 "project.c"
+}
+
+
+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 3887 "project.c"
+}
+
+
+#line 838 "project.vala"
+char* model_project_get_file_display_name (ModelProject* self) {
+#line 3893 "project.c"
+       char* result = NULL;
+       char* filename;
+#line 838 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), NULL);
+#line 839 "project.vala"
+       filename = model_project_get_project_file (self);
+#line 840 "project.vala"
+       if (filename == NULL) {
+#line 3902 "project.c"
+               char* _tmp0_;
+               char* _tmp1_;
+               result = (_tmp1_ = g_strdup_printf ("Unsaved Project - %s", _tmp0_ = model_project_get_app_name (self)), _g_free0 (_tmp0_), _tmp1_);
+               _g_free0 (filename);
+#line 841 "project.vala"
+               return result;
+#line 3909 "project.c"
+       } else {
+               char* dir;
+               char* name;
+               char* home_path;
+               char* _tmp5_;
+               char* _tmp6_;
+#line 844 "project.vala"
+               dir = g_path_get_dirname (filename);
+#line 845 "project.vala"
+               name = g_path_get_basename (filename);
+#line 846 "project.vala"
+               home_path = g_strdup (g_get_home_dir ());
+#line 848 "project.vala"
+               if (_vala_strcmp0 (dir, ".") == 0) {
+#line 3924 "project.c"
+                       char* _tmp2_;
+#line 849 "project.vala"
+                       dir = (_tmp2_ = g_get_current_dir (), _g_free0 (dir), _tmp2_);
+#line 3928 "project.c"
+               }
+#line 851 "project.vala"
+               if (g_str_has_prefix (dir, home_path)) {
+#line 3932 "project.c"
+                       char* _tmp4_;
+                       char* _tmp3_;
+#line 852 "project.vala"
+                       dir = (_tmp4_ = g_strconcat ("~", _tmp3_ = string_substring (dir, string_get_length (home_path), -1), NULL), _g_free0 (dir), _tmp4_);
+#line 3937 "project.c"
+                       _g_free0 (_tmp3_);
+               }
+               result = (_tmp6_ = g_strdup_printf ("%s (%s) - %s", name, dir, _tmp5_ = model_project_get_app_name (self)), _g_free0 (_tmp5_), _tmp6_);
+               _g_free0 (dir);
+               _g_free0 (name);
+               _g_free0 (home_path);
+               _g_free0 (filename);
+#line 853 "project.vala"
+               return result;
+#line 3947 "project.c"
+               _g_free0 (dir);
+               _g_free0 (name);
+               _g_free0 (home_path);
+       }
+       _g_free0 (filename);
+}
+
+
+#line 857 "project.vala"
+void model_project_clear (ModelProject* self) {
+#line 857 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 858 "project.vala"
+       view_media_engine_set_gst_state (self->media_engine, GST_STATE_NULL);
+#line 3962 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 860 "project.vala"
+               while (TRUE) {
+#line 3968 "project.c"
+                       ModelTrack* track;
+#line 860 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 860 "project.vala"
+                               break;
+#line 3974 "project.c"
+                       }
+#line 860 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 861 "project.vala"
+                       model_track_delete_all_clips (track);
+#line 862 "project.vala"
+                       g_signal_emit_by_name (track, "track-removed", track);
+#line 863 "project.vala"
+                       g_signal_emit_by_name (self, "track-removed", track);
+#line 3984 "project.c"
+                       _g_object_unref0 (track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+#line 866 "project.vala"
+       gee_abstract_collection_clear (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 868 "project.vala"
+       gee_abstract_collection_clear (GEE_ABSTRACT_COLLECTION (self->clipfiles));
+#line 869 "project.vala"
+       model_project_set_name (self, NULL);
+#line 870 "project.vala"
+       g_signal_emit_by_name (self, "cleared");
+#line 3997 "project.c"
+}
+
+
+#line 873 "project.vala"
+gboolean model_project_can_export (ModelProject* self) {
+#line 4003 "project.c"
+       gboolean result = FALSE;
+#line 873 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), FALSE);
+#line 874 "project.vala"
+       if (view_media_engine_get_play_state (self->media_engine) != PLAY_STATE_STOPPED) {
+#line 4009 "project.c"
+               result = FALSE;
+#line 875 "project.vala"
+               return result;
+#line 4013 "project.c"
+       }
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 877 "project.vala"
+               while (TRUE) {
+#line 4020 "project.c"
+                       ModelTrack* track;
+#line 877 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 877 "project.vala"
+                               break;
+#line 4026 "project.c"
+                       }
+#line 877 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 878 "project.vala"
+                       if (model_track_get_length (track) > 0) {
+#line 4032 "project.c"
+                               result = TRUE;
+                               _g_object_unref0 (track);
+                               _g_object_unref0 (_track_it);
+#line 879 "project.vala"
+                               return result;
+#line 4038 "project.c"
+                       }
+                       _g_object_unref0 (track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+       result = FALSE;
+#line 882 "project.vala"
+       return result;
+#line 4047 "project.c"
+}
+
+
+#line 885 "project.vala"
+void model_project_on_load_started (ModelProject* self, const char* filename) {
+#line 4053 "project.c"
+       char* _tmp0_;
+#line 885 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 885 "project.vala"
+       g_return_if_fail (filename != NULL);
+#line 886 "project.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_load_started");
+#line 887 "project.vala"
+       self->project_file = (_tmp0_ = g_strdup (filename), _g_free0 (self->project_file), _tmp0_);
+#line 4063 "project.c"
+}
+
+
+#line 890 "project.vala"
+static void model_project_on_load_error (ModelProject* self, const char* _error_) {
+#line 890 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 890 "project.vala"
+       g_return_if_fail (_error_ != NULL);
+#line 891 "project.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_load_error");
+#line 892 "project.vala"
+       g_signal_emit_by_name (self, "load-error", _error_);
+#line 4077 "project.c"
+}
+
+
+#line 895 "project.vala"
+static void model_project_on_load_complete (ModelProject* self) {
+#line 895 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 896 "project.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_load_complete");
+#line 897 "project.vala"
+       model_undo_manager_reset (self->undo_manager);
+#line 898 "project.vala"
+       model_project_set_name (self, self->project_file);
+#line 899 "project.vala"
+       g_signal_emit_by_name (self, "load-complete");
+#line 4093 "project.c"
+}
+
+
+#line 885 "project.vala"
+static void _model_project_on_load_started_model_project_loader_load_started (ModelProjectLoader* _sender, const char* filename, gpointer self) {
+#line 4099 "project.c"
+       model_project_on_load_started (self, filename);
+}
+
+
+#line 890 "project.vala"
+static void _model_project_on_load_error_model_project_loader_load_error (ModelProjectLoader* _sender, const char* _error_, gpointer self) {
+#line 4106 "project.c"
+       model_project_on_load_error (self, _error_);
+}
+
+
+#line 895 "project.vala"
+static void _model_project_on_load_complete_model_project_loader_load_complete (ModelProjectLoader* _sender, gpointer self) {
+#line 4113 "project.c"
+       model_project_on_load_complete (self);
+}
+
+
+#line 1041 "MediaEngine.vala"
+static void _view_media_engine_on_load_complete_model_project_loader_load_complete (ModelProjectLoader* _sender, gpointer self) {
+#line 4120 "project.c"
+       view_media_engine_on_load_complete (self);
+}
+
+
+#line 905 "project.vala"
+static void model_project_real_load (ModelProject* self, const char* fname) {
+#line 4127 "project.c"
+       ModelProjectLoader* _tmp1_;
+       ModelMediaLoaderHandler* _tmp0_;
+#line 905 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 906 "project.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_LOADING, LOGGING_LEVEL_INFO, "loading project");
+#line 907 "project.vala"
+       model_project_clear (self);
+#line 908 "project.vala"
+       model_project_set_name (self, NULL);
+#line 909 "project.vala"
+       if (fname == NULL) {
+#line 910 "project.vala"
+               return;
+#line 4142 "project.c"
+       }
+#line 913 "project.vala"
+       self->loader = (_tmp1_ = model_project_loader_new (MODEL_LOADER_HANDLER (_tmp0_ = model_media_loader_handler_new (self)), fname), _g_object_unref0 (self->loader), _tmp1_);
+#line 4146 "project.c"
+       _g_object_unref0 (_tmp0_);
+#line 915 "project.vala"
+       g_signal_connect_object (self->loader, "load-started", (GCallback) _model_project_on_load_started_model_project_loader_load_started, self, 0);
+#line 916 "project.vala"
+       g_signal_connect_object (self->loader, "load-error", (GCallback) _model_project_on_load_error_model_project_loader_load_error, self, 0);
+#line 917 "project.vala"
+       g_signal_connect_object (self->loader, "load-complete", (GCallback) _model_project_on_load_complete_model_project_loader_load_complete, self, 0);
+#line 918 "project.vala"
+       g_signal_connect_object (self->loader, "load-complete", (GCallback) _view_media_engine_on_load_complete_model_project_loader_load_complete, self->media_engine, 0);
+#line 919 "project.vala"
+       view_media_engine_set_play_state (self->media_engine, PLAY_STATE_LOADING);
+#line 920 "project.vala"
+       gst_element_set_state (GST_ELEMENT (self->media_engine->pipeline), GST_STATE_NULL);
+#line 921 "project.vala"
+       model_project_loader_load (self->loader);
+#line 4162 "project.c"
+}
+
+
+#line 905 "project.vala"
+void model_project_load (ModelProject* self, const char* fname) {
+#line 905 "project.vala"
+       MODEL_PROJECT_GET_CLASS (self)->load (self, fname);
+#line 4170 "project.c"
+}
+
+
+#line 924 "project.vala"
+void model_project_on_error_occurred (ModelProject* self, const char* major_error, const char* minor_error) {
+#line 924 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 924 "project.vala"
+       g_return_if_fail (major_error != NULL);
+#line 925 "project.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_error_occurred");
+#line 926 "project.vala"
+       g_signal_emit_by_name (self, "error-occurred", major_error, minor_error);
+#line 4184 "project.c"
+}
+
+
+#line 929 "project.vala"
+gint model_project_get_file_version (ModelProject* self) {
+#line 4190 "project.c"
+       gint result = 0;
+#line 929 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), 0);
+#line 4194 "project.c"
+       result = 4;
+#line 930 "project.vala"
+       return result;
+#line 4198 "project.c"
+}
+
+
+#line 933 "project.vala"
+void model_project_save_library (ModelProject* self, FILE* f) {
+#line 4204 "project.c"
+       Fraction r;
+#line 933 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 933 "project.vala"
+       g_return_if_fail (f != NULL);
+#line 934 "project.vala"
+       fprintf (f, "  <library");
+#line 936 "project.vala"
+       r = self->default_framerate;
+#line 4214 "project.c"
+       {
+               GeeIterator* _t_it;
+               _t_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 938 "project.vala"
+               while (TRUE) {
+#line 4220 "project.c"
+                       ModelTrack* t;
+#line 938 "project.vala"
+                       if (!gee_iterator_next (_t_it)) {
+#line 938 "project.vala"
+                               break;
+#line 4226 "project.c"
+                       }
+#line 938 "project.vala"
+                       t = (ModelTrack*) gee_iterator_get (_t_it);
+#line 939 "project.vala"
+                       if (model_track_media_type (t) == MODEL_MEDIA_TYPE_VIDEO) {
+#line 4232 "project.c"
+                               ModelTrack* _tmp0_;
+                               ModelVideoTrack* video_track;
+#line 940 "project.vala"
+                               video_track = _g_object_ref0 ((_tmp0_ = t, MODEL_IS_VIDEO_TRACK (_tmp0_) ? ((ModelVideoTrack*) _tmp0_) : NULL));
+#line 941 "project.vala"
+                               if (model_video_track_get_framerate (video_track, &r)) {
+#line 4239 "project.c"
+                                       _g_object_unref0 (video_track);
+                                       _g_object_unref0 (t);
+#line 942 "project.vala"
+                                       break;
+#line 4244 "project.c"
+                               }
+                               _g_object_unref0 (video_track);
+                       }
+                       _g_object_unref0 (t);
+               }
+               _g_object_unref0 (_t_it);
+       }
+#line 945 "project.vala"
+       if (!fraction_equal (&r, &model_project_INVALID_FRAME_RATE)) {
+#line 946 "project.vala"
+               fprintf (f, " framerate=\"%d/%d\"", r.numerator, r.denominator);
+#line 4256 "project.c"
+       }
+#line 948 "project.vala"
+       fprintf (f, ">\n");
+#line 4260 "project.c"
+       {
+               gint i;
+#line 950 "project.vala"
+               i = 0;
+#line 4265 "project.c"
+               {
+                       gboolean _tmp1_;
+#line 950 "project.vala"
+                       _tmp1_ = TRUE;
+#line 950 "project.vala"
+                       while (TRUE) {
+#line 4272 "project.c"
+                               ModelClipFile* _tmp2_;
+#line 950 "project.vala"
+                               if (!_tmp1_) {
+#line 950 "project.vala"
+                                       i++;
+#line 4278 "project.c"
+                               }
+#line 950 "project.vala"
+                               _tmp1_ = FALSE;
+#line 950 "project.vala"
+                               if (!(i < gee_collection_get_size (GEE_COLLECTION (self->clipfiles)))) {
+#line 950 "project.vala"
+                                       break;
+#line 4286 "project.c"
+                               }
+#line 951 "project.vala"
+                               fprintf (f, "    <clipfile filename=\"%s\" id=\"%d\"/>\n", (_tmp2_ = (ModelClipFile*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clipfiles), i))->filename, i);
+#line 4290 "project.c"
+                               _g_object_unref0 (_tmp2_);
+                       }
+               }
+       }
+#line 954 "project.vala"
+       fprintf (f, "  </library>\n");
+#line 4297 "project.c"
+}
+
+
+#line 957 "project.vala"
+static void model_project_real_save (ModelProject* self, const char* filename) {
+#line 4303 "project.c"
+       FILE* f;
+       const char* _tmp1_;
+       const char* _tmp2_;
+       const char* _tmp3_;
+       char* _tmp4_;
+#line 957 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 958 "project.vala"
+       if (filename != NULL) {
+#line 959 "project.vala"
+               model_project_set_name (self, filename);
+#line 4315 "project.c"
+       }
+#line 962 "project.vala"
+       f = fopen (self->project_file, "w");
+#line 963 "project.vala"
+       if (f == NULL) {
+#line 4321 "project.c"
+               char* _tmp0_;
+#line 964 "project.vala"
+               g_signal_emit_by_name (self, "error-occurred", "Could not save project", _tmp0_ = g_strdup_printf ("%s: %s", self->project_file, g_strerror (errno)));
+#line 4325 "project.c"
+               _g_free0 (_tmp0_);
+               _fclose0 (f);
+#line 966 "project.vala"
+               return;
+#line 4330 "project.c"
+       }
+#line 968 "project.vala"
+       fprintf (f, "<marina version=\"%d\">\n", model_project_get_file_version (self));
+#line 970 "project.vala"
+       model_project_save_library (self, f);
+#line 972 "project.vala"
+       fprintf (f, "  <tracks>\n");
+#line 4338 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 973 "project.vala"
+               while (TRUE) {
+#line 4344 "project.c"
+                       ModelTrack* track;
+#line 973 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 973 "project.vala"
+                               break;
+#line 4350 "project.c"
+                       }
+#line 973 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 974 "project.vala"
+                       model_track_save (track, f);
+#line 4356 "project.c"
+                       _g_object_unref0 (track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->inactive_tracks));
+#line 977 "project.vala"
+               while (TRUE) {
+#line 4366 "project.c"
+                       ModelTrack* track;
+#line 977 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 977 "project.vala"
+                               break;
+#line 4372 "project.c"
+                       }
+#line 977 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 978 "project.vala"
+                       model_track_save (track, f);
+#line 4378 "project.c"
+                       _g_object_unref0 (track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+#line 980 "project.vala"
+       fprintf (f, "  </tracks>\n");
+#line 981 "project.vala"
+       fprintf (f, "  <preferences>\n");
+#line 4387 "project.c"
+       _tmp1_ = NULL;
+#line 983 "project.vala"
+       if (self->click_during_play) {
+#line 983 "project.vala"
+               _tmp1_ = "true";
+#line 4393 "project.c"
+       } else {
+#line 983 "project.vala"
+               _tmp1_ = "false";
+#line 4397 "project.c"
+       }
+       _tmp2_ = NULL;
+#line 984 "project.vala"
+       if (self->click_during_record) {
+#line 984 "project.vala"
+               _tmp2_ = "true";
+#line 4404 "project.c"
+       } else {
+#line 984 "project.vala"
+               _tmp2_ = "false";
+#line 4408 "project.c"
+       }
+#line 982 "project.vala"
+       fprintf (f, "    <click on_play=\"%s\" on_record=\"%s\" volume=\"%lf\"/>\n", _tmp1_, _tmp2_, self->click_volume);
+#line 4412 "project.c"
+       _tmp3_ = NULL;
+#line 987 "project.vala"
+       if (self->library_visible) {
+#line 987 "project.vala"
+               _tmp3_ = "true";
+#line 4418 "project.c"
+       } else {
+#line 987 "project.vala"
+               _tmp3_ = "false";
+#line 4422 "project.c"
+       }
+#line 986 "project.vala"
+       fprintf (f, "    <library width=\"%d\" visible=\"%s\" />\n", self->library_width, _tmp3_);
+#line 988 "project.vala"
+       fprintf (f, "  </preferences>\n");
+#line 989 "project.vala"
+       fprintf (f, "  <maps>\n");
+#line 990 "project.vala"
+       fprintf (f, "    <tempo>\n");
+#line 991 "project.vala"
+       fprintf (f, "      <entry tempo=\"%d\" />\n", self->priv->tempo);
+#line 992 "project.vala"
+       fprintf (f, "    </tempo>\n");
+#line 993 "project.vala"
+       fprintf (f, "    <time_signature>\n");
+#line 994 "project.vala"
+       fprintf (f, "      <entry signature=\"%s\" />\n", _tmp4_ = fraction_to_string (&self->priv->time_signature));
+#line 4440 "project.c"
+       _g_free0 (_tmp4_);
+#line 995 "project.vala"
+       fprintf (f, "    </time_signature>\n");
+#line 996 "project.vala"
+       fprintf (f, "  </maps>\n");
+#line 998 "project.vala"
+       fprintf (f, "</marina>\n");
+#line 999 "project.vala"
+       fflush (f);
+#line 1002 "project.vala"
+       model_undo_manager_mark_clean (self->undo_manager);
+#line 4452 "project.c"
+       _fclose0 (f);
+}
+
+
+#line 957 "project.vala"
+void model_project_save (ModelProject* self, const char* filename) {
+#line 957 "project.vala"
+       MODEL_PROJECT_GET_CLASS (self)->save (self, filename);
+#line 4461 "project.c"
+}
+
+
+#line 1005 "project.vala"
+void model_project_close (ModelProject* self) {
+#line 1005 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 1006 "project.vala"
+       view_media_engine_close (self->media_engine);
+#line 4471 "project.c"
+}
+
+
+#line 1009 "project.vala"
+void model_project_on_importer_clip_complete (ModelProject* self, ModelClipFetcher* fetcher) {
+#line 1009 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 1009 "project.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FETCHER (fetcher));
+#line 1010 "project.vala"
+       if (MODEL_FETCHER (fetcher)->error_string != NULL) {
+#line 1011 "project.vala"
+               g_signal_emit_by_name (self, "error-occurred", "Error importing clip", MODEL_FETCHER (fetcher)->error_string);
+#line 4485 "project.c"
+       } else {
+#line 1013 "project.vala"
+               model_fetcher_completion_complete (self->priv->fetcher_completion, MODEL_FETCHER (fetcher));
+#line 4489 "project.c"
+       }
+}
+
+
+static gpointer _model_fetcher_completion_ref0 (gpointer self) {
+       return self ? model_fetcher_completion_ref (self) : NULL;
+}
+
+
+#line 1026 "project.vala"
+static void _model_project_on_fetcher_ready_model_fetcher_ready (ModelFetcher* _sender, ModelFetcher* fetcher, gpointer self) {
+#line 4501 "project.c"
+       model_project_on_fetcher_ready (self, fetcher);
+}
+
+
+#line 1017 "project.vala"
+void model_project_create_clip_fetcher (ModelProject* self, ModelFetcherCompletion* fetcher_completion, const char* filename, GError** error) {
+#line 4508 "project.c"
+       GError * _inner_error_;
+       ModelClipFetcher* fetcher;
+       ModelFetcherCompletion* _tmp0_;
+#line 1017 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 1017 "project.vala"
+       g_return_if_fail (MODEL_IS_FETCHER_COMPLETION (fetcher_completion));
+#line 1017 "project.vala"
+       g_return_if_fail (filename != NULL);
+#line 4518 "project.c"
+       _inner_error_ = NULL;
+#line 1019 "project.vala"
+       fetcher = model_clip_fetcher_new (filename, &_inner_error_);
+#line 4522 "project.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               return;
+       }
+#line 1020 "project.vala"
+       self->priv->fetcher_completion = (_tmp0_ = _model_fetcher_completion_ref0 (fetcher_completion), _model_fetcher_completion_unref0 (self->priv->fetcher_completion), _tmp0_);
+#line 1021 "project.vala"
+       g_signal_connect_object (MODEL_FETCHER (fetcher), "ready", (GCallback) _model_project_on_fetcher_ready_model_fetcher_ready, self, 0);
+#line 1022 "project.vala"
+       gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->priv->pending), fetcher);
+#line 4533 "project.c"
+       _g_object_unref0 (fetcher);
+}
+
+
+#line 1026 "project.vala"
+static void model_project_on_fetcher_ready (ModelProject* self, ModelFetcher* fetcher) {
+#line 4540 "project.c"
+       ModelFetcher* _tmp0_;
+#line 1026 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 1026 "project.vala"
+       g_return_if_fail (MODEL_IS_FETCHER (fetcher));
+#line 1027 "project.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_fetcher_ready");
+#line 1028 "project.vala"
+       gee_abstract_collection_remove (GEE_ABSTRACT_COLLECTION (self->priv->pending), (_tmp0_ = fetcher, MODEL_IS_CLIP_FETCHER (_tmp0_) ? ((ModelClipFetcher*) _tmp0_) : NULL));
+#line 1029 "project.vala"
+       if (fetcher->error_string != NULL) {
+#line 1030 "project.vala"
+               logging_emit (G_OBJECT (self), LOGGING_FACILITY_DEVELOPER_WARNINGS, LOGGING_LEVEL_INFO, fetcher->error_string);
+#line 1031 "project.vala"
+               g_signal_emit_by_name (self, "error-occurred", "Error retrieving clip", fetcher->error_string);
+#line 4556 "project.c"
+       } else {
+#line 1033 "project.vala"
+               if (model_project_get_clipfile_index (self, fetcher->clipfile) == (-1)) {
+#line 1034 "project.vala"
+                       model_project_add_clipfile (self, fetcher->clipfile);
+#line 4562 "project.c"
+               }
+#line 1036 "project.vala"
+               model_fetcher_completion_complete (self->priv->fetcher_completion, fetcher);
+#line 4566 "project.c"
+       }
+}
+
+
+#line 1040 "project.vala"
+gboolean model_project_is_project_extension (ModelProject* self, const char* filename) {
+#line 4573 "project.c"
+       gboolean result = FALSE;
+       char* extension;
+       gboolean _tmp0_ = FALSE;
+#line 1040 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), FALSE);
+#line 1040 "project.vala"
+       g_return_val_if_fail (filename != NULL, FALSE);
+#line 1041 "project.vala"
+       extension = get_file_extension (filename);
+#line 1042 "project.vala"
+       if (_vala_strcmp0 (extension, MODEL_PROJECT_LOMBARD_FILE_EXTENSION) == 0) {
+#line 1042 "project.vala"
+               _tmp0_ = TRUE;
+#line 4587 "project.c"
+       } else {
+#line 1042 "project.vala"
+               _tmp0_ = _vala_strcmp0 (extension, MODEL_PROJECT_FILLMORE_FILE_EXTENSION) == 0;
+#line 4591 "project.c"
+       }
+       result = _tmp0_;
+       _g_free0 (extension);
+#line 1042 "project.vala"
+       return result;
+#line 4597 "project.c"
+}
+
+
+#line 1045 "project.vala"
+void model_project_do_command (ModelProject* self, ModelCommand* the_command) {
+#line 1045 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 1045 "project.vala"
+       g_return_if_fail (MODEL_IS_COMMAND (the_command));
+#line 1046 "project.vala"
+       model_undo_manager_do_command (self->undo_manager, the_command);
+#line 4609 "project.c"
+}
+
+
+#line 1049 "project.vala"
+void model_project_undo (ModelProject* self) {
+#line 1049 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 1050 "project.vala"
+       model_undo_manager_undo (self->undo_manager);
+#line 4619 "project.c"
+}
+
+
+#line 1053 "project.vala"
+static void model_project_ClearTrackMeters (ModelProject* self) {
+#line 1053 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 4627 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 1054 "project.vala"
+               while (TRUE) {
+#line 4633 "project.c"
+                       ModelTrack* track;
+                       ModelTrack* _tmp0_;
+                       ModelAudioTrack* audio_track;
+#line 1054 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 1054 "project.vala"
+                               break;
+#line 4641 "project.c"
+                       }
+#line 1054 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 1055 "project.vala"
+                       audio_track = _g_object_ref0 ((_tmp0_ = track, MODEL_IS_AUDIO_TRACK (_tmp0_) ? ((ModelAudioTrack*) _tmp0_) : NULL));
+#line 1056 "project.vala"
+                       if (audio_track != NULL) {
+#line 1057 "project.vala"
+                               g_signal_emit_by_name (audio_track, "level-changed", (double) (-100), (double) (-100));
+#line 4651 "project.c"
+                       }
+                       _g_object_unref0 (track);
+                       _g_object_unref0 (audio_track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+}
+
+
+#line 1062 "project.vala"
+void model_project_create_clip_importer (ModelProject* self, ModelTrack* track, gboolean timeline_add, gint64 time_to_add, gboolean both_tracks, GtkWindow* progress_window_parent, gint number) {
+#line 1062 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 1062 "project.vala"
+       g_return_if_fail ((track == NULL) || MODEL_IS_TRACK (track));
+#line 1062 "project.vala"
+       g_return_if_fail ((progress_window_parent == NULL) || GTK_IS_WINDOW (progress_window_parent));
+#line 1064 "project.vala"
+       if (timeline_add) {
+#line 4671 "project.c"
+               ModelLibraryImporter* _tmp0_;
+#line 1065 "project.vala"
+               g_assert (track != NULL);
+#line 1066 "project.vala"
+               self->importer = (_tmp0_ = MODEL_LIBRARY_IMPORTER (model_timeline_importer_new (track, self, time_to_add, both_tracks)), _g_object_unref0 (self->importer), _tmp0_);
+#line 4677 "project.c"
+       } else {
+               ModelLibraryImporter* _tmp1_;
+#line 1068 "project.vala"
+               self->importer = (_tmp1_ = model_library_importer_new (self), _g_object_unref0 (self->importer), _tmp1_);
+#line 4682 "project.c"
+       }
+#line 1070 "project.vala"
+       if (progress_window_parent != NULL) {
+#line 4686 "project.c"
+               MultiFileProgress* _tmp2_;
+#line 1071 "project.vala"
+               _tmp2_ = g_object_ref_sink (multi_file_progress_new (progress_window_parent, number, "Import", MULTI_FILE_PROGRESS_INTERFACE (self->importer->importer)));
+#line 4690 "project.c"
+               _g_object_unref0 (_tmp2_);
+       }
+}
+
+
+#line 1077 "project.vala"
+char* model_project_get_version (ModelProject* self) {
+#line 4698 "project.c"
+       char* result = NULL;
+#line 1077 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), NULL);
+#line 4702 "project.c"
+       result = g_strdup (_VERSION);
+#line 1078 "project.vala"
+       return result;
+#line 4706 "project.c"
+}
+
+
+#line 1081 "project.vala"
+static char* model_project_real_get_app_name (ModelProject* self) {
+#line 4712 "project.c"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), NULL);
+       g_critical ("Type `%s' does not implement abstract method `model_project_get_app_name'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+       return NULL;
+}
+
+
+#line 1081 "project.vala"
+char* model_project_get_app_name (ModelProject* self) {
+#line 1081 "project.vala"
+       return MODEL_PROJECT_GET_CLASS (self)->get_app_name (self);
+#line 4723 "project.c"
+}
+
+
+#line 1083 "project.vala"
+char* model_project_get_license (ModelProject* self) {
+#line 4729 "project.c"
+       char* result = NULL;
+       char* _tmp2_;
+       char* _tmp1_;
+       char* _tmp0_;
+       char* _tmp3_;
+#line 1083 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), NULL);
+#line 4737 "project.c"
+       result = (_tmp3_ = g_strdup_printf (MODEL_PROJECT_license, _tmp0_ = model_project_get_app_name (self), _tmp1_ = model_project_get_app_name (self), _tmp2_ = model_project_get_app_name (self)), _g_free0 (_tmp2_), _g_free0 (_tmp1_), _g_free0 (_tmp0_), _tmp3_);
+#line 1084 "project.vala"
+       return result;
+#line 4741 "project.c"
+}
+
+
+#line 1087 "project.vala"
+void model_project_set_time_signature (ModelProject* self, Fraction* time_signature) {
+#line 4747 "project.c"
+       ModelTimeSignatureCommand* command;
+#line 1087 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 1088 "project.vala"
+       command = model_time_signature_command_new (self, time_signature);
+#line 1089 "project.vala"
+       model_undo_manager_do_command (self->undo_manager, MODEL_COMMAND (command));
+#line 4755 "project.c"
+       _model_command_unref0 (command);
+}
+
+
+#line 1092 "project.vala"
+void _model_project_set_time_signature (ModelProject* self, Fraction* time_signature) {
+#line 1092 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 1093 "project.vala"
+       self->priv->time_signature = *time_signature;
+#line 1094 "project.vala"
+       g_signal_emit_by_name (MODEL_TEMPO_INFORMATION (self), "time-signature-changed", time_signature);
+#line 4768 "project.c"
+}
+
+
+#line 1097 "project.vala"
+static void model_project_real_get_time_signature (ModelTempoInformation* base, Fraction* result) {
+#line 4774 "project.c"
+       ModelProject * self;
+       self = MODEL_PROJECT (base);
+       *result = self->priv->time_signature;
+#line 1098 "project.vala"
+       return;
+#line 4780 "project.c"
+}
+
+
+#line 1101 "project.vala"
+void model_project_set_bpm (ModelProject* self, gint bpm) {
+#line 4786 "project.c"
+       ModelBpmCommand* command;
+#line 1101 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 1102 "project.vala"
+       command = model_bpm_command_new (self, bpm);
+#line 1103 "project.vala"
+       model_undo_manager_do_command (self->undo_manager, MODEL_COMMAND (command));
+#line 4794 "project.c"
+       _model_command_unref0 (command);
+}
+
+
+#line 1106 "project.vala"
+void _model_project_set_bpm (ModelProject* self, gint bpm) {
+#line 1106 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 1107 "project.vala"
+       self->priv->tempo = bpm;
+#line 1108 "project.vala"
+       g_signal_emit_by_name (MODEL_TEMPO_INFORMATION (self), "bpm-changed", bpm);
+#line 4807 "project.c"
+}
+
+
+#line 1111 "project.vala"
+static gint model_project_real_get_bpm (ModelTempoInformation* base) {
+#line 4813 "project.c"
+       ModelProject * self;
+       gint result = 0;
+       self = MODEL_PROJECT (base);
+       result = self->priv->tempo;
+#line 1112 "project.vala"
+       return result;
+#line 4820 "project.c"
+}
+
+
+#line 1115 "project.vala"
+char* model_project_get_audio_path (ModelProject* self) {
+#line 4826 "project.c"
+       char* result = NULL;
+       char* path;
+       char* _tmp0_;
+#line 1115 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), NULL);
+#line 1116 "project.vala"
+       path = model_project_get_path (self);
+#line 4834 "project.c"
+       _tmp0_ = NULL;
+#line 1117 "project.vala"
+       if (path == NULL) {
+#line 4838 "project.c"
+               char* _tmp1_;
+#line 1117 "project.vala"
+               _tmp0_ = (_tmp1_ = NULL, _g_free0 (_tmp0_), _tmp1_);
+#line 4842 "project.c"
+       } else {
+               char* _tmp2_;
+#line 1117 "project.vala"
+               _tmp0_ = (_tmp2_ = g_build_filename (path, "audio files", NULL), _g_free0 (_tmp0_), _tmp2_);
+#line 4847 "project.c"
+       }
+       result = _tmp0_;
+       _g_free0 (path);
+#line 1117 "project.vala"
+       return result;
+#line 4853 "project.c"
+}
+
+
+#line 1120 "project.vala"
+static char* model_project_get_path (ModelProject* self) {
+#line 4859 "project.c"
+       char* result = NULL;
+       char* _tmp0_;
+#line 1120 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), NULL);
+#line 4864 "project.c"
+       _tmp0_ = NULL;
+#line 1121 "project.vala"
+       if (self->project_file == NULL) {
+#line 4868 "project.c"
+               char* _tmp1_;
+#line 1121 "project.vala"
+               _tmp0_ = (_tmp1_ = NULL, _g_free0 (_tmp0_), _tmp1_);
+#line 4872 "project.c"
+       } else {
+               char* _tmp2_;
+#line 1121 "project.vala"
+               _tmp0_ = (_tmp2_ = g_path_get_dirname (self->project_file), _g_free0 (_tmp0_), _tmp2_);
+#line 4877 "project.c"
+       }
+       result = _tmp0_;
+#line 1121 "project.vala"
+       return result;
+#line 4882 "project.c"
+}
+
+
+#line 1124 "project.vala"
+ModelVideoTrack* model_project_find_video_track (ModelProject* self) {
+#line 4888 "project.c"
+       ModelVideoTrack* result = NULL;
+#line 1124 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), NULL);
+#line 4892 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 1125 "project.vala"
+               while (TRUE) {
+#line 4898 "project.c"
+                       ModelTrack* track;
+#line 1125 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 1125 "project.vala"
+                               break;
+#line 4904 "project.c"
+                       }
+#line 1125 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 1126 "project.vala"
+                       if (MODEL_IS_VIDEO_TRACK (track)) {
+#line 4910 "project.c"
+                               ModelTrack* _tmp0_;
+                               result = _g_object_ref0 ((_tmp0_ = track, MODEL_IS_VIDEO_TRACK (_tmp0_) ? ((ModelVideoTrack*) _tmp0_) : NULL));
+                               _g_object_unref0 (track);
+                               _g_object_unref0 (_track_it);
+#line 1127 "project.vala"
+                               return result;
+#line 4917 "project.c"
+                       }
+                       _g_object_unref0 (track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+       result = NULL;
+#line 1130 "project.vala"
+       return result;
+#line 4926 "project.c"
+}
+
+
+#line 1133 "project.vala"
+ModelAudioTrack* model_project_find_audio_track (ModelProject* self) {
+#line 4932 "project.c"
+       ModelAudioTrack* result = NULL;
+#line 1133 "project.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (self), NULL);
+#line 4936 "project.c"
+       {
+               GeeIterator* _track_it;
+               _track_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->tracks));
+#line 1134 "project.vala"
+               while (TRUE) {
+#line 4942 "project.c"
+                       ModelTrack* track;
+#line 1134 "project.vala"
+                       if (!gee_iterator_next (_track_it)) {
+#line 1134 "project.vala"
+                               break;
+#line 4948 "project.c"
+                       }
+#line 1134 "project.vala"
+                       track = (ModelTrack*) gee_iterator_get (_track_it);
+#line 1135 "project.vala"
+                       if (MODEL_IS_AUDIO_TRACK (track)) {
+#line 4954 "project.c"
+                               ModelTrack* _tmp0_;
+                               result = _g_object_ref0 ((_tmp0_ = track, MODEL_IS_AUDIO_TRACK (_tmp0_) ? ((ModelAudioTrack*) _tmp0_) : NULL));
+                               _g_object_unref0 (track);
+                               _g_object_unref0 (_track_it);
+#line 1136 "project.vala"
+                               return result;
+#line 4961 "project.c"
+                       }
+                       _g_object_unref0 (track);
+               }
+               _g_object_unref0 (_track_it);
+       }
+       result = NULL;
+#line 1139 "project.vala"
+       return result;
+#line 4970 "project.c"
+}
+
+
+#line 370 "project.vala"
+static void model_project_real_load_complete (ModelProject* self) {
+#line 370 "project.vala"
+       g_return_if_fail (MODEL_IS_PROJECT (self));
+#line 4978 "project.c"
+}
+
+
+static void model_project_class_init (ModelProjectClass * klass) {
+       Fraction _tmp1_ = {0};
+       model_project_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ModelProjectPrivate));
+       MODEL_PROJECT_CLASS (klass)->get_clip_time = model_project_real_get_clip_time;
+       MODEL_PROJECT_CLASS (klass)->get_project_file = model_project_real_get_project_file;
+       MODEL_PROJECT_CLASS (klass)->do_append = model_project_real_do_append;
+       MODEL_PROJECT_CLASS (klass)->add_track = model_project_real_add_track;
+       MODEL_PROJECT_CLASS (klass)->insert_track = model_project_real_insert_track;
+       MODEL_PROJECT_CLASS (klass)->load = model_project_real_load;
+       MODEL_PROJECT_CLASS (klass)->save = model_project_real_save;
+       MODEL_PROJECT_CLASS (klass)->get_app_name = model_project_real_get_app_name;
+       MODEL_PROJECT_CLASS (klass)->load_complete = model_project_real_load_complete;
+       G_OBJECT_CLASS (klass)->finalize = model_project_finalize;
+       g_signal_new ("playstate_changed", MODEL_TYPE_PROJECT, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__ENUM, G_TYPE_NONE, 1, TYPE_PLAY_STATE);
+       g_signal_new ("name_changed", MODEL_TYPE_PROJECT, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING);
+       g_signal_new ("load_error", MODEL_TYPE_PROJECT, 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, G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (ModelProjectClass, load_complete), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+       g_signal_new ("closed", MODEL_TYPE_PROJECT, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+       g_signal_new ("track_added", MODEL_TYPE_PROJECT, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, MODEL_TYPE_TRACK);
+       g_signal_new ("track_removed", MODEL_TYPE_PROJECT, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, MODEL_TYPE_TRACK);
+       g_signal_new ("error_occurred", MODEL_TYPE_PROJECT, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__STRING_STRING, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);
+       g_signal_new ("clipfile_added", MODEL_TYPE_PROJECT, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, MODEL_TYPE_CLIP_FILE);
+       g_signal_new ("clipfile_removed", MODEL_TYPE_PROJECT, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, MODEL_TYPE_CLIP_FILE);
+       g_signal_new ("cleared", MODEL_TYPE_PROJECT, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+       model_project_INVALID_FRAME_RATE = (fraction_init (&_tmp1_, -1, 1), _tmp1_);
+}
+
+
+static void model_project_model_tempo_information_interface_init (ModelTempoInformationIface * iface) {
+       model_project_model_tempo_information_parent_iface = g_type_interface_peek_parent (iface);
+       iface->get_time_signature = model_project_real_get_time_signature;
+       iface->get_bpm = model_project_real_get_bpm;
+}
+
+
+static void model_project_instance_init (ModelProject * self) {
+       Fraction _tmp0_ = {0};
+       self->priv = MODEL_PROJECT_GET_PRIVATE (self);
+       self->tracks = gee_array_list_new (MODEL_TYPE_TRACK, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL);
+       self->inactive_tracks = gee_array_list_new (MODEL_TYPE_TRACK, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL);
+       self->priv->pending = gee_hash_set_new (MODEL_TYPE_CLIP_FETCHER, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL, NULL);
+       self->priv->pending_thumbs = gee_array_list_new (MODEL_TYPE_THUMBNAIL_FETCHER, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL);
+       self->clipfiles = gee_array_list_new (MODEL_TYPE_CLIP_FILE, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL);
+       self->priv->tempo = 120;
+       self->priv->time_signature = (fraction_init (&_tmp0_, 4, 4), _tmp0_);
+       self->click_during_play = FALSE;
+       self->click_during_record = TRUE;
+       self->click_volume = 0.8;
+       self->library_visible = TRUE;
+       self->library_width = 600;
+}
+
+
+static void model_project_finalize (GObject* obj) {
+       ModelProject * self;
+       self = MODEL_PROJECT (obj);
+       _g_object_unref0 (self->tracks);
+       _g_object_unref0 (self->inactive_tracks);
+       _g_object_unref0 (self->priv->pending);
+       _g_object_unref0 (self->priv->pending_thumbs);
+       _g_object_unref0 (self->clipfiles);
+       _g_object_unref0 (self->media_engine);
+       _g_free0 (self->project_file);
+       _g_object_unref0 (self->loader);
+       _model_fetcher_completion_unref0 (self->priv->fetcher_completion);
+       _model_undo_manager_unref0 (self->undo_manager);
+       _g_object_unref0 (self->importer);
+       G_OBJECT_CLASS (model_project_parent_class)->finalize (obj);
+}
+
+
+GType model_project_get_type (void) {
+       static volatile gsize model_project_type_id__volatile = 0;
+       if (g_once_init_enter (&model_project_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelProjectClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_project_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelProject), 0, (GInstanceInitFunc) model_project_instance_init, NULL };
+               static const GInterfaceInfo model_tempo_information_info = { (GInterfaceInitFunc) model_project_model_tempo_information_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
+               GType model_project_type_id;
+               model_project_type_id = g_type_register_static (G_TYPE_OBJECT, "ModelProject", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
+               g_type_add_interface_static (model_project_type_id, MODEL_TYPE_TEMPO_INFORMATION, &model_tempo_information_info);
+               g_once_init_leave (&model_project_type_id__volatile, model_project_type_id);
+       }
+       return model_project_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);
+}
+
+
+
+static void g_cclosure_user_marshal_VOID__STRING_STRING (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
+       typedef void (*GMarshalFunc_VOID__STRING_STRING) (gpointer data1, const char* arg_1, const char* arg_2, gpointer data2);
+       register GMarshalFunc_VOID__STRING_STRING callback;
+       register GCClosure * cc;
+       register gpointer data1, data2;
+       cc = (GCClosure *) closure;
+       g_return_if_fail (n_param_values == 3);
+       if (G_CCLOSURE_SWAP_DATA (closure)) {
+               data1 = closure->data;
+               data2 = param_values->data[0].v_pointer;
+       } else {
+               data1 = param_values->data[0].v_pointer;
+               data2 = closure->data;
+       }
+       callback = (GMarshalFunc_VOID__STRING_STRING) (marshal_data ? marshal_data : cc->callback);
+       callback (data1, g_value_get_string (param_values + 1), g_value_get_string (param_values + 2), data2);
+}
+
+
+