Initial commit
[fillmore] / src / lombard / lombard / lombard.c
diff --git a/src/lombard/lombard/lombard.c b/src/lombard/lombard/lombard.c
new file mode 100644 (file)
index 0000000..1b8a507
--- /dev/null
@@ -0,0 +1,2888 @@
+/* lombard.c generated by valac, the Vala compiler
+ * generated from lombard.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 <gtk/gtk.h>
+#include <marina.h>
+#include <float.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gee.h>
+#include <gio/gio.h>
+#include <gdk/gdk.h>
+#include <gst/gst.h>
+#include <gdk/gdkkeysyms.h>
+#include <glib/gstdio.h>
+#include <stdio.h>
+
+
+#define TYPE_APP (app_get_type ())
+#define APP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_APP, App))
+#define APP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_APP, AppClass))
+#define IS_APP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_APP))
+#define IS_APP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_APP))
+#define APP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_APP, AppClass))
+
+typedef struct _App App;
+typedef struct _AppClass AppClass;
+typedef struct _AppPrivate AppPrivate;
+
+#define MODEL_TYPE_VIDEO_PROJECT (model_video_project_get_type ())
+#define MODEL_VIDEO_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_VIDEO_PROJECT, ModelVideoProject))
+#define MODEL_VIDEO_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_VIDEO_PROJECT, ModelVideoProjectClass))
+#define MODEL_IS_VIDEO_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_VIDEO_PROJECT))
+#define MODEL_IS_VIDEO_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_VIDEO_PROJECT))
+#define MODEL_VIDEO_PROJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_VIDEO_PROJECT, ModelVideoProjectClass))
+
+typedef struct _ModelVideoProject ModelVideoProject;
+typedef struct _ModelVideoProjectClass ModelVideoProjectClass;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+#define _gst_caps_unref0(var) ((var == NULL) ? NULL : (var = (gst_caps_unref (var), NULL)))
+typedef struct _ModelVideoProjectPrivate ModelVideoProjectPrivate;
+#define __g_slist_free_g_free0(var) ((var == NULL) ? NULL : (var = (_g_slist_free_g_free (var), NULL)))
+#define _g_option_context_free0(var) ((var == NULL) ? NULL : (var = (g_option_context_free (var), NULL)))
+#define _class_factory_unref0(var) ((var == NULL) ? NULL : (var = (class_factory_unref (var), NULL)))
+
+struct _App {
+       GtkWindow parent_instance;
+       AppPrivate * priv;
+};
+
+struct _AppClass {
+       GtkWindowClass parent_class;
+};
+
+struct _AppPrivate {
+       GtkDrawingArea* drawing_area;
+       ModelVideoProject* project;
+       ViewVideoOutput* video_output;
+       ViewAudioOutput* audio_output;
+       ViewOggVorbisExport* export_connector;
+       TimeLine* timeline;
+       ClipLibraryView* library;
+       ViewStatusBar* status_bar;
+       GtkHPaned* h_pane;
+       GtkScrolledWindow* library_scrolled;
+       GtkScrolledWindow* timeline_scrolled;
+       GtkAdjustment* h_adjustment;
+       double prev_adjustment_lower;
+       double prev_adjustment_upper;
+       GtkActionGroup* main_group;
+       gint64 center_time;
+       GtkVBox* vbox;
+       GtkMenuBar* menubar;
+       GtkUIManager* manager;
+       char* project_filename;
+       GeeArrayList* load_errors;
+       gboolean loading;
+};
+
+struct _ModelVideoProject {
+       ModelProject parent_instance;
+       ModelVideoProjectPrivate * priv;
+       ModelTimecodeTimeSystem* time_provider;
+};
+
+struct _ModelVideoProjectClass {
+       ModelProjectClass parent_class;
+};
+
+
+extern gint debug_level;
+gint debug_level = 0;
+static gpointer app_parent_class = NULL;
+static TransportDelegateIface* app_transport_delegate_parent_iface = NULL;
+
+GType app_get_type (void);
+GType model_video_project_get_type (void);
+#define APP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_APP, AppPrivate))
+enum  {
+       APP_DUMMY_PROPERTY
+};
+#define APP_NAME "Lombard"
+#define APP_LibraryToggle "Library"
+static void app_on_open (App* self);
+static void _app_on_open_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_save (App* self);
+static void _app_on_save_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_save_as (App* self);
+static void _app_on_save_as_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_play_pause (App* self);
+static void _app_on_play_pause_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_export (App* self);
+static void _app_on_export_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_quit (App* self);
+static void _app_on_quit_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_undo (App* self);
+static void _app_on_undo_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_cut (App* self);
+static void _app_on_cut_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_copy (App* self);
+static void _app_on_copy_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_paste (App* self);
+static void _app_on_paste_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_delete (App* self);
+static void _app_on_delete_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_select_all (App* self);
+static void _app_on_select_all_gtk_action_callback (GtkAction* action, gpointer self);
+void app_on_split_at_playhead (App* self);
+static void _app_on_split_at_playhead_gtk_action_callback (GtkAction* action, gpointer self);
+void app_on_trim_to_playhead (App* self);
+static void _app_on_trim_to_playhead_gtk_action_callback (GtkAction* action, gpointer self);
+void app_on_clip_properties (App* self);
+static void _app_on_clip_properties_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_zoom_in (App* self);
+static void _app_on_zoom_in_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_zoom_out (App* self);
+static void _app_on_zoom_out_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_zoom_to_project (App* self);
+static void _app_on_zoom_to_project_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_go_start (App* self);
+static void _app_on_go_start_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_go_end (App* self);
+static void _app_on_go_end_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_help_contents (App* self);
+static void _app_on_help_contents_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_about (App* self);
+static void _app_on_about_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_save_graph (App* self);
+static void _app_on_save_graph_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_view_library (App* self);
+static void _app_on_view_library_gtk_action_callback (GtkAction* action, gpointer self);
+static void app_on_snap (App* self);
+static void _app_on_snap_gtk_action_callback (GtkAction* action, gpointer self);
+#define APP_ui "\n" \
+"<ui>\n" \
+"  <menubar name=\"MenuBar\">\n" \
+"    <menu name=\"Project\" action=\"Project\">\n" \
+"      <menuitem name=\"Open\" action=\"Open\"/>\n" \
+"      <menuitem name=\"Save\" action=\"Save\"/>\n" \
+"      <menuitem name=\"SaveAs\" action=\"SaveAs\"/>\n" \
+"      <separator/>\n" \
+"      <menuitem name=\"Play\" action=\"Play\"/>\n" \
+"      <separator/>\n" \
+"      <menuitem name=\"Export\" action=\"Export\"/>\n" \
+"      <menuitem name=\"Quit\" action=\"Quit\"/>\n" \
+"    </menu>\n" \
+"    <menu name=\"EditMenu\" action=\"Edit\">\n" \
+"      <menuitem name=\"EditUndo\" action=\"Undo\"/>\n" \
+"      <separator/>\n" \
+"      <menuitem name=\"EditCut\" action=\"Cut\"/>\n" \
+"      <menuitem name=\"EditCopy\" action=\"Copy\"/>\n" \
+"      <menuitem name=\"EditPaste\" action=\"Paste\"/>\n" \
+"      <menuitem name=\"EditDelete\" action=\"Delete\"/>\n" \
+"      <separator/>\n" \
+"      <menuitem name=\"EditSelectAll\" action=\"SelectAll\"/>\n" \
+"      <separator/>\n" \
+"      <menuitem name=\"ClipSplitAtPlayhead\" action=\"SplitAtPlayhead\"" \
+"/>\n" \
+"      <menuitem name=\"ClipTrimToPlayhead\" action=\"TrimToPlayhead\"/" \
+">\n" \
+"      <separator/>\n" \
+"      <menuitem name=\"ClipViewProperties\" action=\"ClipProperties\"/" \
+">\n" \
+"    </menu>\n" \
+"    <menu name=\"ViewMenu\" action=\"View\">\n" \
+"        <menuitem name=\"ViewLibrary\" action=\"Library\"/>\n" \
+"        <separator/>\n" \
+"        <menuitem name=\"ViewZoomIn\" action=\"ZoomIn\"/>\n" \
+"        <menuitem name=\"ViewZoomOut\" action=\"ZoomOut\"/>\n" \
+"        <menuitem name=\"ViewZoomProject\" action=\"ZoomProject\"/>\n" \
+"        <separator/>\n" \
+"        <menuitem name=\"Snap\" action=\"Snap\"/>\n" \
+"    </menu>\n" \
+"    <menu name=\"GoMenu\" action=\"Go\">\n" \
+"      <menuitem name=\"GoStart\" action=\"Start\"/>\n" \
+"      <menuitem name=\"GoEnd\" action=\"End\"/>\n" \
+"    </menu>\n" \
+"    <menu name=\"HelpMenu\" action=\"Help\">\n" \
+"      <menuitem name=\"HelpContents\" action=\"Contents\"/>\n" \
+"      <separator/>\n" \
+"      <menuitem name=\"HelpAbout\" action=\"About\"/>\n" \
+"      <menuitem name=\"SaveGraph\" action=\"SaveGraph\"/>\n" \
+"    </menu>\n" \
+"  </menubar>\n" \
+"\n" \
+"  <popup name=\"ClipContextMenu\">\n" \
+"    <menuitem name=\"ClipContextCut\" action=\"Cut\"/>\n" \
+"    <menuitem name=\"ClipContextCopy\" action=\"Copy\"/>\n" \
+"    <separator/>\n" \
+"    <menuitem name=\"ClipContextProperties\" action=\"ClipProperties\"" \
+"/>\n" \
+"  </popup>\n" \
+"  <popup name=\"LibraryContextMenu\">\n" \
+"    <menuitem name=\"ClipContextProperties\" action=\"ClipProperties\"" \
+"/>\n" \
+"  </popup>\n" \
+"</ui>\n"
+#define APP_SCROLL_MARGIN 0.05f
+static void app_on_drawing_realize (App* self);
+static void _app_on_drawing_realize_gtk_widget_realize (GtkWidget* _sender, gpointer self);
+ModelVideoProject* model_video_project_new (const char* filename, GError** error);
+ModelVideoProject* model_video_project_construct (GType object_type, const char* filename, GError** error);
+void app_set_project_name (App* self, const char* filename);
+static void _app_set_project_name_model_project_name_changed (ModelProject* _sender, const char* project_file, gpointer self);
+void app_on_load_error (App* self, const char* message);
+static void _app_on_load_error_model_project_load_error (ModelProject* _sender, const char* _error_, gpointer self);
+void app_on_load_complete (App* self);
+static void _app_on_load_complete_model_project_load_complete (ModelProject* _sender, gpointer self);
+void app_do_error_dialog (const char* message, const char* minor_message);
+static void _app_do_error_dialog_model_project_error_occurred (ModelProject* _sender, const char* major_message, const char* minor_message, gpointer self);
+static void app_on_undo_changed (App* self, gboolean can_undo);
+static void _app_on_undo_changed_model_undo_manager_undo_changed (ModelUndoManager* _sender, gboolean can_undo, gpointer self);
+static void app_on_post_export (App* self, gboolean canceled);
+static void _app_on_post_export_view_media_engine_post_export (ViewMediaEngine* _sender, gboolean canceled, gpointer self);
+static void app_on_playstate_changed (App* self, PlayState playstate);
+static void _app_on_playstate_changed_model_project_playstate_changed (ModelProject* _sender, PlayState playstate, gpointer self);
+void app_on_timeline_selection_changed (App* self, gboolean selected);
+static void _app_on_timeline_selection_changed_time_line_selection_changed (TimeLine* _sender, gboolean selected, gpointer self);
+void app_on_track_changed (App* self);
+static void _app_on_track_changed_time_line_track_changed (TimeLine* _sender, gpointer self);
+static void app_on_drag_data_received (App* self, GtkWidget* w, GdkDragContext* context, gint x, gint y, GtkSelectionData* selection_data, guint drag_info, guint time);
+static void _app_on_drag_data_received_gtk_widget_drag_data_received (GtkWidget* _sender, GdkDragContext* context, gint x, gint y, GtkSelectionData* selection_data, guint info, guint time_, gpointer self);
+static void app_on_timeline_size_allocate (App* self, GdkRectangle* rectangle);
+static void _app_on_timeline_size_allocate_gtk_widget_size_allocate (GtkWidget* _sender, GdkRectangle* allocation, gpointer self);
+void app_on_position_changed (App* self);
+static void _app_on_position_changed_view_media_engine_position_changed (ViewMediaEngine* _sender, gint64 position, gpointer self);
+static void app_on_callback_pulse (App* self);
+static void _app_on_callback_pulse_view_media_engine_callback_pulse (ViewMediaEngine* _sender, gpointer self);
+void app_on_library_selection_changed (App* self, gboolean selected);
+static void _app_on_library_selection_changed_clip_library_view_selection_changed (ClipLibraryView* _sender, gboolean selected, gpointer self);
+static void app_toggle_library (App* self, gboolean showing);
+static gboolean app_on_delete_event (App* self);
+static gboolean _app_on_delete_event_gtk_widget_delete_event (GtkWidget* _sender, GdkEvent* event, gpointer self);
+static void app_default_track_set (App* self);
+static void app_update_menu (App* self);
+App* app_new (const char* project_file, GError** error);
+App* app_construct (GType object_type, const char* project_file, GError** error);
+static gboolean app_do_save (App* self);
+static void app_on_library_size_allocate (App* self, GdkRectangle* rectangle);
+static void _app_on_library_size_allocate_gtk_widget_size_allocate (GtkWidget* _sender, GdkRectangle* allocation, gpointer self);
+static void app_on_adjustment_changed (App* self, GtkAdjustment* a);
+static void _app_on_adjustment_changed_gtk_adjustment_changed (GtkAdjustment* _sender, gpointer self);
+void app_load_project (App* self, const char* filename);
+void app_load_file (App* self, const char* name, ModelLibraryImporter* im);
+static void _g_slist_free_g_free (GSList* self);
+static void app_on_importer_started (App* self, ModelClipImporter* i, gint num);
+static void _app_on_importer_started_model_library_importer_started (ModelLibraryImporter* _sender, ModelClipImporter* i, gint num, gpointer self);
+static gboolean app_do_save_dialog (App* self);
+static void app_scroll_toward_center (App* self, gint xpos);
+gboolean model_video_project_get_framerate_fraction (ModelVideoProject* self, Fraction* rate);
+static Fraction* _fraction_dup (Fraction* self);
+static void app_set_sensitive_group (App* self, GtkActionGroup* group, const char* group_path, gboolean sensitive);
+void model_video_project_go_previous_frame (ModelVideoProject* self);
+void model_video_project_go_next_frame (ModelVideoProject* self);
+static gboolean app_real_key_press_event (GtkWidget* base, GdkEventKey* event);
+static gint64 app_get_zoom_center_time (App* self);
+static void app_do_zoom (App* self, float increment);
+static gboolean app_real_is_recording (TransportDelegate* base);
+static gboolean app_real_is_playing (TransportDelegate* base);
+static gboolean app_real_is_stopped (TransportDelegate* base);
+static void app_finalize (GObject* obj);
+void _vala_main (char** args, int args_length1);
+static int _vala_strcmp0 (const char * str1, const char * str2);
+
+const GOptionEntry options[2] = {{"debug-level", (gchar) 0, 0, G_OPTION_ARG_INT, &debug_level, "Control amount of diagnostic information", "[0 (minimal),5 (maximum)]"}, {NULL}};
+static const GtkActionEntry APP_entries[28] = {{"Project", NULL, "_Project", NULL, NULL, (GCallback) NULL}, {"Open", GTK_STOCK_OPEN, "_Open...", NULL, NULL, (GCallback) _app_on_open_gtk_action_callback}, {"Save", GTK_STOCK_SAVE, NULL, NULL, NULL, (GCallback) _app_on_save_gtk_action_callback}, {"SaveAs", GTK_STOCK_SAVE_AS, "Save _As...", "<Shift><Control>S", NULL, (GCallback) _app_on_save_as_gtk_action_callback}, {"Play", GTK_STOCK_MEDIA_PLAY, "_Play / Pause", "space", NULL, (GCallback) _app_on_play_pause_gtk_action_callback}, {"Export", NULL, "_Export...", "<Control>E", NULL, (GCallback) _app_on_export_gtk_action_callback}, {"Quit", GTK_STOCK_QUIT, NULL, NULL, NULL, (GCallback) _app_on_quit_gtk_action_callback}, {"Edit", NULL, "_Edit", NULL, NULL, (GCallback) NULL}, {"Undo", GTK_STOCK_UNDO, NULL, "<Control>Z", NULL, (GCallback) _app_on_undo_gtk_action_callback}, {"Cut", GTK_STOCK_CUT, NULL, NULL, NULL, (GCallback) _app_on_cut_gtk_action_callback}, {"Copy", GTK_STOCK_COPY, NULL, NULL, NULL, (GCallback) _app_on_copy_gtk_action_callback}, {"Paste", GTK_STOCK_PASTE, NULL, NULL, NULL, (GCallback) _app_on_paste_gtk_action_callback}, {"Delete", GTK_STOCK_DELETE, NULL, "Delete", NULL, (GCallback) _app_on_delete_gtk_action_callback}, {"SelectAll", GTK_STOCK_SELECT_ALL, NULL, "<Control>A", NULL, (GCallback) _app_on_select_all_gtk_action_callback}, {"SplitAtPlayhead", NULL, "_Split at Playhead", "<Control>P", NULL, (GCallback) _app_on_split_at_playhead_gtk_action_callback}, {"TrimToPlayhead", NULL, "Trim to Play_head", "<Control>H", NULL, (GCallback) _app_on_trim_to_playhead_gtk_action_callback}, {"ClipProperties", GTK_STOCK_PROPERTIES, "Properti_es", "<Alt>Return", NULL, (GCallback) _app_on_clip_properties_gtk_action_callback}, {"View", NULL, "_View", NULL, NULL, (GCallback) NULL}, {"ZoomIn", GTK_STOCK_ZOOM_IN, "Zoom _In", "<Control>plus", NULL, (GCallback) _app_on_zoom_in_gtk_action_callback}, {"ZoomOut", GTK_STOCK_ZOOM_OUT, "Zoom _Out", "<Control>minus", NULL, (GCallback) _app_on_zoom_out_gtk_action_callback}, {"ZoomProject", NULL, "Fit to _Window", "<Shift>Z", NULL, (GCallback) _app_on_zoom_to_project_gtk_action_callback}, {"Go", NULL, "_Go", NULL, NULL, (GCallback) NULL}, {"Start", GTK_STOCK_GOTO_FIRST, "_Start", "Home", NULL, (GCallback) _app_on_go_start_gtk_action_callback}, {"End", GTK_STOCK_GOTO_LAST, "_End", "End", NULL, (GCallback) _app_on_go_end_gtk_action_callback}, {"Help", NULL, "_Help", NULL, NULL, (GCallback) NULL}, {"Contents", GTK_STOCK_HELP, "_Contents", "F1", "More information on Lombard", (GCallback) _app_on_help_contents_gtk_action_callback}, {"About", GTK_STOCK_ABOUT, NULL, NULL, NULL, (GCallback) _app_on_about_gtk_action_callback}, {"SaveGraph", NULL, "Save _Graph", NULL, "Save graph", (GCallback) _app_on_save_graph_gtk_action_callback}};
+static const GtkToggleActionEntry APP_check_actions[2] = {{APP_LibraryToggle, NULL, "_Library", "F9", NULL, (GCallback) _app_on_view_library_gtk_action_callback, TRUE}, {"Snap", NULL, "_Snap to Clip Edges", NULL, NULL, (GCallback) _app_on_snap_gtk_action_callback, TRUE}};
+static const DialogUtilsfilter_description_struct APP_filters[2] = {{"Lombard Project Files", MODEL_PROJECT_LOMBARD_FILE_EXTENSION}, {"Fillmore Project Files", MODEL_PROJECT_FILLMORE_FILE_EXTENSION}};
+static const DialogUtilsfilter_description_struct APP_export_filters[1] = {{"Ogg Files", "ogg"}};
+
+
+#line 445 "lombard.vala"
+static void _app_on_open_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 242 "lombard.c"
+       app_on_open (self);
+}
+
+
+#line 485 "lombard.vala"
+static void _app_on_save_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 249 "lombard.c"
+       app_on_save (self);
+}
+
+
+#line 481 "lombard.vala"
+static void _app_on_save_as_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 256 "lombard.c"
+       app_on_save_as (self);
+}
+
+
+#line 727 "lombard.vala"
+static void _app_on_play_pause_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 263 "lombard.c"
+       app_on_play_pause (self);
+}
+
+
+#line 739 "lombard.vala"
+static void _app_on_export_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 270 "lombard.c"
+       app_on_export (self);
+}
+
+
+#line 269 "lombard.vala"
+static void _app_on_quit_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 277 "lombard.c"
+       app_on_quit (self);
+}
+
+
+#line 770 "lombard.vala"
+static void _app_on_undo_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 284 "lombard.c"
+       app_on_undo (self);
+}
+
+
+#line 781 "lombard.vala"
+static void _app_on_cut_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 291 "lombard.c"
+       app_on_cut (self);
+}
+
+
+#line 785 "lombard.vala"
+static void _app_on_copy_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 298 "lombard.c"
+       app_on_copy (self);
+}
+
+
+#line 789 "lombard.vala"
+static void _app_on_paste_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 305 "lombard.c"
+       app_on_paste (self);
+}
+
+
+#line 774 "lombard.vala"
+static void _app_on_delete_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 312 "lombard.c"
+       app_on_delete (self);
+}
+
+
+#line 808 "lombard.vala"
+static void _app_on_select_all_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 319 "lombard.c"
+       app_on_select_all (self);
+}
+
+
+#line 535 "lombard.vala"
+static void _app_on_split_at_playhead_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 326 "lombard.c"
+       app_on_split_at_playhead (self);
+}
+
+
+#line 539 "lombard.vala"
+static void _app_on_trim_to_playhead_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 333 "lombard.c"
+       app_on_trim_to_playhead (self);
+}
+
+
+#line 543 "lombard.vala"
+static void _app_on_clip_properties_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 340 "lombard.c"
+       app_on_clip_properties (self);
+}
+
+
+#line 699 "lombard.vala"
+static void _app_on_zoom_in_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 347 "lombard.c"
+       app_on_zoom_in (self);
+}
+
+
+#line 703 "lombard.vala"
+static void _app_on_zoom_out_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 354 "lombard.c"
+       app_on_zoom_out (self);
+}
+
+
+#line 707 "lombard.vala"
+static void _app_on_zoom_to_project_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 361 "lombard.c"
+       app_on_zoom_to_project (self);
+}
+
+
+#line 818 "lombard.vala"
+static void _app_on_go_start_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 368 "lombard.c"
+       app_on_go_start (self);
+}
+
+
+#line 820 "lombard.vala"
+static void _app_on_go_end_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 375 "lombard.c"
+       app_on_go_end (self);
+}
+
+
+#line 824 "lombard.vala"
+static void _app_on_help_contents_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 382 "lombard.c"
+       app_on_help_contents (self);
+}
+
+
+#line 831 "lombard.vala"
+static void _app_on_about_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 389 "lombard.c"
+       app_on_about (self);
+}
+
+
+#line 843 "lombard.vala"
+static void _app_on_save_graph_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 396 "lombard.c"
+       app_on_save_graph (self);
+}
+
+
+#line 685 "lombard.vala"
+static void _app_on_view_library_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 403 "lombard.c"
+       app_on_view_library (self);
+}
+
+
+#line 681 "lombard.vala"
+static void _app_on_snap_gtk_action_callback (GtkAction* action, gpointer self) {
+#line 410 "lombard.c"
+       app_on_snap (self);
+}
+
+
+#line 344 "lombard.vala"
+static void _app_on_drawing_realize_gtk_widget_realize (GtkWidget* _sender, gpointer self) {
+#line 417 "lombard.c"
+       app_on_drawing_realize (self);
+}
+
+
+#line 371 "lombard.vala"
+static void _app_set_project_name_model_project_name_changed (ModelProject* _sender, const char* project_file, gpointer self) {
+#line 424 "lombard.c"
+       app_set_project_name (self, project_file);
+}
+
+
+#line 380 "lombard.vala"
+static void _app_on_load_error_model_project_load_error (ModelProject* _sender, const char* _error_, gpointer self) {
+#line 431 "lombard.c"
+       app_on_load_error (self, _error_);
+}
+
+
+#line 385 "lombard.vala"
+static void _app_on_load_complete_model_project_load_complete (ModelProject* _sender, gpointer self) {
+#line 438 "lombard.c"
+       app_on_load_complete (self);
+}
+
+
+#line 376 "lombard.vala"
+static void _app_do_error_dialog_model_project_error_occurred (ModelProject* _sender, const char* major_message, const char* minor_message, gpointer self) {
+#line 445 "lombard.c"
+       app_do_error_dialog (major_message, minor_message);
+}
+
+
+#line 800 "lombard.vala"
+static void _app_on_undo_changed_model_undo_manager_undo_changed (ModelUndoManager* _sender, gboolean can_undo, gpointer self) {
+#line 452 "lombard.c"
+       app_on_undo_changed (self, can_undo);
+}
+
+
+#line 757 "lombard.vala"
+static void _app_on_post_export_view_media_engine_post_export (ViewMediaEngine* _sender, gboolean canceled, gpointer self) {
+#line 459 "lombard.c"
+       app_on_post_export (self, canceled);
+}
+
+
+#line 793 "lombard.vala"
+static void _app_on_playstate_changed_model_project_playstate_changed (ModelProject* _sender, PlayState playstate, gpointer self) {
+#line 466 "lombard.c"
+       app_on_playstate_changed (self, playstate);
+}
+
+
+#line 625 "lombard.vala"
+static void _app_on_timeline_selection_changed_time_line_selection_changed (TimeLine* _sender, gboolean selected, gpointer self) {
+#line 473 "lombard.c"
+       app_on_timeline_selection_changed (self, selected);
+}
+
+
+#line 575 "lombard.vala"
+static void _app_on_track_changed_time_line_track_changed (TimeLine* _sender, gpointer self) {
+#line 480 "lombard.c"
+       app_on_track_changed (self);
+}
+
+
+#line 366 "lombard.vala"
+static void _app_on_drag_data_received_gtk_widget_drag_data_received (GtkWidget* _sender, GdkDragContext* context, gint x, gint y, GtkSelectionData* selection_data, guint info, guint time_, gpointer self) {
+#line 487 "lombard.c"
+       app_on_drag_data_received (self, _sender, context, x, y, selection_data, info, time_);
+}
+
+
+#line 711 "lombard.vala"
+static void _app_on_timeline_size_allocate_gtk_widget_size_allocate (GtkWidget* _sender, GdkRectangle* allocation, gpointer self) {
+#line 494 "lombard.c"
+       app_on_timeline_size_allocate (self, allocation);
+}
+
+
+#line 562 "lombard.vala"
+static void _app_on_position_changed_view_media_engine_position_changed (ViewMediaEngine* _sender, gint64 position, gpointer self) {
+#line 501 "lombard.c"
+       app_on_position_changed (self);
+}
+
+
+#line 567 "lombard.vala"
+static void _app_on_callback_pulse_view_media_engine_callback_pulse (ViewMediaEngine* _sender, gpointer self) {
+#line 508 "lombard.c"
+       app_on_callback_pulse (self);
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+#line 632 "lombard.vala"
+static void _app_on_library_selection_changed_clip_library_view_selection_changed (ClipLibraryView* _sender, gboolean selected, gpointer self) {
+#line 520 "lombard.c"
+       app_on_library_selection_changed (self, selected);
+}
+
+
+#line 263 "lombard.vala"
+static gboolean _app_on_delete_event_gtk_widget_delete_event (GtkWidget* _sender, GdkEvent* event, gpointer self) {
+#line 527 "lombard.c"
+       gboolean result;
+       result = app_on_delete_event (self);
+       return result;
+}
+
+
+#line 165 "lombard.vala"
+App* app_construct (GType object_type, const char* project_file, GError** error) {
+#line 536 "lombard.c"
+       GError * _inner_error_;
+       App * self;
+       char* _tmp3_;
+       GeeArrayList* _tmp4_;
+       GtkDrawingArea* _tmp5_;
+       GdkColor _tmp7_;
+       GdkColor _tmp6_ = {0};
+       GtkActionGroup* _tmp8_;
+       GtkUIManager* _tmp9_;
+       GtkMenuBar* _tmp10_;
+       ModelVideoProject* _tmp11_;
+       ModelVideoProject* _tmp12_;
+       GstCaps* _tmp13_;
+       ViewAudioOutput* _tmp14_;
+       ViewAudioOutput* _tmp15_;
+       ViewAudioOutput* _tmp16_;
+       TimeLine* _tmp17_;
+       GtkMenu* _tmp18_;
+       GtkMenu* _tmp19_;
+       ClipLibraryView* _tmp20_;
+       ViewStatusBar* _tmp21_;
+       GtkScrolledWindow* _tmp22_;
+       GtkMenuItem* save_graph;
+       _inner_error_ = NULL;
+       self = g_object_newv (object_type, 0, NULL);
+       {
+               char* _tmp2_;
+               GFile* _tmp1_;
+               GFile* _tmp0_;
+#line 167 "lombard.vala"
+               gtk_window_set_icon_from_file (GTK_WINDOW (self), _tmp2_ = g_file_get_path (_tmp1_ = g_file_get_child (_tmp0_ = app_dirs_get_resources_dir (), "lombard_icon.png")), &_inner_error_);
+#line 568 "lombard.c"
+               _g_free0 (_tmp2_);
+               _g_object_unref0 (_tmp1_);
+               _g_object_unref0 (_tmp0_);
+               if (_inner_error_ != NULL) {
+                       goto __catch0_g_error;
+               }
+       }
+       goto __finally0;
+       __catch0_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+#line 170 "lombard.vala"
+                       g_warning ("lombard.vala:170: Could not load application icon: %s", e->message);
+#line 585 "lombard.c"
+                       _g_error_free0 (e);
+               }
+       }
+       __finally0:
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 173 "lombard.vala"
+       if (debug_level > (-1)) {
+#line 174 "lombard.vala"
+               logging_set_logging_level ((LoggingLevel) debug_level);
+#line 599 "lombard.c"
+       }
+#line 176 "lombard.vala"
+       class_factory_set_transport_delegate (TRANSPORT_DELEGATE (self));
+#line 177 "lombard.vala"
+       gtk_window_set_default_size (GTK_WINDOW (self), 600, 500);
+#line 178 "lombard.vala"
+       self->priv->project_filename = (_tmp3_ = g_strdup (project_file), _g_free0 (self->priv->project_filename), _tmp3_);
+#line 180 "lombard.vala"
+       self->priv->load_errors = (_tmp4_ = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL), _g_object_unref0 (self->priv->load_errors), _tmp4_);
+#line 181 "lombard.vala"
+       self->priv->drawing_area = (_tmp5_ = g_object_ref_sink ((GtkDrawingArea*) gtk_drawing_area_new ()), _g_object_unref0 (self->priv->drawing_area), _tmp5_);
+#line 182 "lombard.vala"
+       g_signal_connect_object (GTK_WIDGET (self->priv->drawing_area), "realize", (GCallback) _app_on_drawing_realize_gtk_widget_realize, self, 0);
+#line 183 "lombard.vala"
+       gtk_widget_modify_bg (GTK_WIDGET (self->priv->drawing_area), GTK_STATE_NORMAL, (_tmp7_ = (parse_color ("#000", &_tmp6_), _tmp6_), &_tmp7_));
+#line 185 "lombard.vala"
+       self->priv->main_group = (_tmp8_ = gtk_action_group_new ("main"), _g_object_unref0 (self->priv->main_group), _tmp8_);
+#line 186 "lombard.vala"
+       gtk_action_group_add_actions (self->priv->main_group, APP_entries, G_N_ELEMENTS (APP_entries), self);
+#line 187 "lombard.vala"
+       gtk_action_group_add_toggle_actions (self->priv->main_group, APP_check_actions, G_N_ELEMENTS (APP_check_actions), self);
+#line 189 "lombard.vala"
+       self->priv->manager = (_tmp9_ = gtk_ui_manager_new (), _g_object_unref0 (self->priv->manager), _tmp9_);
+#line 190 "lombard.vala"
+       gtk_ui_manager_insert_action_group (self->priv->manager, self->priv->main_group, 0);
+#line 625 "lombard.c"
+       {
+#line 192 "lombard.vala"
+               gtk_ui_manager_add_ui_from_string (self->priv->manager, APP_ui, (gssize) (-1), &_inner_error_);
+#line 629 "lombard.c"
+               if (_inner_error_ != NULL) {
+                       goto __catch1_g_error;
+               }
+       }
+       goto __finally1;
+       __catch1_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+#line 193 "lombard.vala"
+                       g_error ("lombard.vala:193: %s", e->message);
+#line 643 "lombard.c"
+                       _g_error_free0 (e);
+               }
+       }
+       __finally1:
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 195 "lombard.vala"
+       self->priv->menubar = (_tmp10_ = GTK_MENU_BAR (get_widget (self->priv->manager, "/MenuBar")), _g_object_unref0 (self->priv->menubar), _tmp10_);
+#line 197 "lombard.vala"
+       _tmp11_ = model_video_project_new (self->priv->project_filename, &_inner_error_);
+#line 657 "lombard.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 197 "lombard.vala"
+       self->priv->project = (_tmp12_ = _tmp11_, _g_object_unref0 (self->priv->project), _tmp12_);
+#line 198 "lombard.vala"
+       MODEL_PROJECT (self->priv->project)->snap_to_clip = TRUE;
+#line 199 "lombard.vala"
+       g_signal_connect_object (MODEL_PROJECT (self->priv->project), "name-changed", (GCallback) _app_set_project_name_model_project_name_changed, self, 0);
+#line 200 "lombard.vala"
+       g_signal_connect_object (MODEL_PROJECT (self->priv->project), "load-error", (GCallback) _app_on_load_error_model_project_load_error, self, 0);
+#line 201 "lombard.vala"
+       g_signal_connect_object (MODEL_PROJECT (self->priv->project), "load-complete", (GCallback) _app_on_load_complete_model_project_load_complete, self, 0);
+#line 202 "lombard.vala"
+       g_signal_connect (MODEL_PROJECT (self->priv->project), "error-occurred", (GCallback) _app_do_error_dialog_model_project_error_occurred, NULL);
+#line 203 "lombard.vala"
+       g_signal_connect_object (MODEL_PROJECT (self->priv->project)->undo_manager, "undo-changed", (GCallback) _app_on_undo_changed_model_undo_manager_undo_changed, self, 0);
+#line 204 "lombard.vala"
+       g_signal_connect_object (MODEL_PROJECT (self->priv->project)->media_engine, "post-export", (GCallback) _app_on_post_export_view_media_engine_post_export, self, 0);
+#line 205 "lombard.vala"
+       g_signal_connect_object (MODEL_PROJECT (self->priv->project), "playstate-changed", (GCallback) _app_on_playstate_changed_model_project_playstate_changed, self, 0);
+#line 207 "lombard.vala"
+       _tmp15_ = (_tmp14_ = view_audio_output_new (_tmp13_ = view_media_engine_get_project_audio_caps (MODEL_PROJECT (self->priv->project)->media_engine), &_inner_error_), _gst_caps_unref0 (_tmp13_), _tmp14_);
+#line 683 "lombard.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 207 "lombard.vala"
+       self->priv->audio_output = (_tmp16_ = _tmp15_, _g_object_unref0 (self->priv->audio_output), _tmp16_);
+#line 208 "lombard.vala"
+       view_media_engine_connect_output (MODEL_PROJECT (self->priv->project)->media_engine, VIEW_MEDIA_CONNECTOR (self->priv->audio_output));
+#line 210 "lombard.vala"
+       self->priv->timeline = (_tmp17_ = g_object_ref_sink (time_line_new (MODEL_PROJECT (self->priv->project), MODEL_TIME_SYSTEM (self->priv->project->time_provider), GDK_ACTION_COPY | GDK_ACTION_MOVE)), _g_object_unref0 (self->priv->timeline), _tmp17_);
+#line 212 "lombard.vala"
+       g_signal_connect_object (self->priv->timeline, "selection-changed", (GCallback) _app_on_timeline_selection_changed_time_line_selection_changed, self, 0);
+#line 213 "lombard.vala"
+       g_signal_connect_object (self->priv->timeline, "track-changed", (GCallback) _app_on_track_changed_time_line_track_changed, self, 0);
+#line 214 "lombard.vala"
+       g_signal_connect_object (GTK_WIDGET (self->priv->timeline), "drag-data-received", (GCallback) _app_on_drag_data_received_gtk_widget_drag_data_received, self, 0);
+#line 215 "lombard.vala"
+       g_signal_connect_object (GTK_WIDGET (self->priv->timeline), "size-allocate", (GCallback) _app_on_timeline_size_allocate_gtk_widget_size_allocate, self, 0);
+#line 216 "lombard.vala"
+       g_signal_connect_object (MODEL_PROJECT (self->priv->project)->media_engine, "position-changed", (GCallback) _app_on_position_changed_view_media_engine_position_changed, self, 0);
+#line 217 "lombard.vala"
+       g_signal_connect_object (MODEL_PROJECT (self->priv->project)->media_engine, "callback-pulse", (GCallback) _app_on_callback_pulse_view_media_engine_callback_pulse, self, 0);
+#line 218 "lombard.vala"
+       clip_view_context_menu = (_tmp18_ = _g_object_ref0 (GTK_MENU (gtk_ui_manager_get_widget (self->priv->manager, "/ClipContextMenu"))), _g_object_unref0 (clip_view_context_menu), _tmp18_);
+#line 219 "lombard.vala"
+       clip_library_view_context_menu = (_tmp19_ = _g_object_ref0 (GTK_MENU (gtk_ui_manager_get_widget (self->priv->manager, "/LibraryContextMenu"))), _g_object_unref0 (clip_library_view_context_menu), _tmp19_);
+#line 221 "lombard.vala"
+       self->priv->library = (_tmp20_ = g_object_ref_sink (clip_library_view_new (MODEL_PROJECT (self->priv->project), MODEL_TIME_SYSTEM (self->priv->project->time_provider), "Drag clips here.", GDK_ACTION_COPY | GDK_ACTION_MOVE)), _g_object_unref0 (self->priv->library), _tmp20_);
+#line 223 "lombard.vala"
+       g_signal_connect_object (self->priv->library, "selection-changed", (GCallback) _app_on_library_selection_changed_clip_library_view_selection_changed, self, 0);
+#line 224 "lombard.vala"
+       g_signal_connect_object (GTK_WIDGET (self->priv->library), "drag-data-received", (GCallback) _app_on_drag_data_received_gtk_widget_drag_data_received, self, 0);
+#line 226 "lombard.vala"
+       self->priv->status_bar = (_tmp21_ = g_object_ref_sink (view_status_bar_new (MODEL_PROJECT (self->priv->project), MODEL_TIME_SYSTEM (self->priv->project->time_provider), TIME_LINE_BAR_HEIGHT)), _g_object_unref0 (self->priv->status_bar), _tmp21_);
+#line 228 "lombard.vala"
+       self->priv->library_scrolled = (_tmp22_ = g_object_ref_sink ((GtkScrolledWindow*) gtk_scrolled_window_new (NULL, NULL)), _g_object_unref0 (self->priv->library_scrolled), _tmp22_);
+#line 229 "lombard.vala"
+       gtk_scrolled_window_set_policy (self->priv->library_scrolled, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+#line 230 "lombard.vala"
+       gtk_scrolled_window_add_with_viewport (self->priv->library_scrolled, GTK_WIDGET (self->priv->library));
+#line 232 "lombard.vala"
+       app_toggle_library (self, TRUE);
+#line 234 "lombard.vala"
+       save_graph = GTK_MENU_ITEM (get_widget (self->priv->manager, "/MenuBar/HelpMenu/SaveGraph"));
+#line 239 "lombard.vala"
+       if (save_graph != NULL) {
+#line 240 "lombard.vala"
+               gtk_object_destroy (GTK_OBJECT (save_graph));
+#line 733 "lombard.c"
+       }
+#line 243 "lombard.vala"
+       gtk_window_add_accel_group (GTK_WINDOW (self), gtk_ui_manager_get_accel_group (self->priv->manager));
+#line 245 "lombard.vala"
+       app_on_undo_changed (self, FALSE);
+#line 247 "lombard.vala"
+       g_signal_connect_object (GTK_WIDGET (self), "delete-event", (GCallback) _app_on_delete_event_gtk_widget_delete_event, self, 0);
+#line 249 "lombard.vala"
+       if (self->priv->project_filename == NULL) {
+#line 250 "lombard.vala"
+               app_default_track_set (self);
+#line 251 "lombard.vala"
+               app_on_load_complete (self);
+#line 747 "lombard.c"
+       }
+#line 254 "lombard.vala"
+       app_update_menu (self);
+#line 255 "lombard.vala"
+       gtk_widget_show_all (GTK_WIDGET (self));
+#line 753 "lombard.c"
+       _g_object_unref0 (save_graph);
+       return self;
+}
+
+
+#line 165 "lombard.vala"
+App* app_new (const char* project_file, GError** error) {
+#line 165 "lombard.vala"
+       return app_construct (TYPE_APP, project_file, error);
+#line 763 "lombard.c"
+}
+
+
+#line 258 "lombard.vala"
+static void app_default_track_set (App* self) {
+#line 769 "lombard.c"
+       ModelVideoTrack* _tmp0_;
+       ModelAudioTrack* _tmp1_;
+#line 258 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 259 "lombard.vala"
+       model_project_add_track (MODEL_PROJECT (self->priv->project), MODEL_TRACK (_tmp0_ = model_video_track_new (MODEL_PROJECT (self->priv->project))));
+#line 776 "lombard.c"
+       _g_object_unref0 (_tmp0_);
+#line 260 "lombard.vala"
+       model_project_add_track (MODEL_PROJECT (self->priv->project), MODEL_TRACK (_tmp1_ = model_audio_track_new (MODEL_PROJECT (self->priv->project), "Audio Track")));
+#line 780 "lombard.c"
+       _g_object_unref0 (_tmp1_);
+}
+
+
+#line 263 "lombard.vala"
+static gboolean app_on_delete_event (App* self) {
+#line 787 "lombard.c"
+       gboolean result = FALSE;
+#line 263 "lombard.vala"
+       g_return_val_if_fail (IS_APP (self), FALSE);
+#line 264 "lombard.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_delete_event");
+#line 265 "lombard.vala"
+       app_on_quit (self);
+#line 795 "lombard.c"
+       result = TRUE;
+#line 266 "lombard.vala"
+       return result;
+#line 799 "lombard.c"
+}
+
+
+#line 269 "lombard.vala"
+static void app_on_quit (App* self) {
+#line 269 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 270 "lombard.vala"
+       if (model_undo_manager_get_is_dirty (MODEL_PROJECT (self->priv->project)->undo_manager)) {
+#line 271 "lombard.vala"
+               switch (dialog_utils_save_close_cancel (GTK_WINDOW (self), NULL, "Save changes before closing?")) {
+#line 811 "lombard.c"
+                       case GTK_RESPONSE_ACCEPT:
+                       {
+#line 273 "lombard.vala"
+                               if (!app_do_save (self)) {
+#line 274 "lombard.vala"
+                                       return;
+#line 818 "lombard.c"
+                               }
+#line 276 "lombard.vala"
+                               break;
+#line 822 "lombard.c"
+                       }
+                       case GTK_RESPONSE_CLOSE:
+                       {
+#line 278 "lombard.vala"
+                               break;
+#line 828 "lombard.c"
+                       }
+                       case GTK_RESPONSE_DELETE_EVENT:
+                       case GTK_RESPONSE_CANCEL:
+                       {
+#line 281 "lombard.vala"
+                               return;
+#line 835 "lombard.c"
+                       }
+                       default:
+                       {
+#line 283 "lombard.vala"
+                               g_assert (FALSE);
+#line 284 "lombard.vala"
+                               break;
+#line 843 "lombard.c"
+                       }
+               }
+       }
+#line 288 "lombard.vala"
+       gtk_main_quit ();
+#line 849 "lombard.c"
+}
+
+
+#line 424 "lombard.vala"
+static void _app_on_library_size_allocate_gtk_widget_size_allocate (GtkWidget* _sender, GdkRectangle* allocation, gpointer self) {
+#line 855 "lombard.c"
+       app_on_library_size_allocate (self, allocation);
+}
+
+
+#line 356 "lombard.vala"
+static void _app_on_adjustment_changed_gtk_adjustment_changed (GtkAdjustment* _sender, gpointer self) {
+#line 862 "lombard.c"
+       app_on_adjustment_changed (self, _sender);
+}
+
+
+#line 291 "lombard.vala"
+static void app_toggle_library (App* self, gboolean showing) {
+#line 291 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 292 "lombard.vala"
+       if (self->priv->vbox == NULL) {
+#line 873 "lombard.c"
+               GtkVBox* _tmp0_;
+               GtkVPaned* v_pane;
+               GtkHPaned* _tmp1_;
+               GtkScrolledWindow* _tmp2_;
+               GtkVBox* timeline_vbox;
+               GtkAdjustment* _tmp3_;
+#line 293 "lombard.vala"
+               self->priv->vbox = (_tmp0_ = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 0)), _g_object_unref0 (self->priv->vbox), _tmp0_);
+#line 294 "lombard.vala"
+               gtk_box_pack_start (GTK_BOX (self->priv->vbox), GTK_WIDGET (self->priv->menubar), FALSE, FALSE, (guint) 0);
+#line 296 "lombard.vala"
+               v_pane = g_object_ref_sink ((GtkVPaned*) gtk_vpaned_new ());
+#line 297 "lombard.vala"
+               gtk_paned_set_position (GTK_PANED (v_pane), 290);
+#line 299 "lombard.vala"
+               self->priv->h_pane = (_tmp1_ = g_object_ref_sink ((GtkHPaned*) gtk_hpaned_new ()), _g_object_unref0 (self->priv->h_pane), _tmp1_);
+#line 300 "lombard.vala"
+               gtk_paned_set_position (GTK_PANED (self->priv->h_pane), 300);
+#line 301 "lombard.vala"
+               GTK_PANED (self->priv->h_pane)->child2_resize = (guint) 1;
+#line 302 "lombard.vala"
+               GTK_PANED (self->priv->h_pane)->child1_resize = (guint) 0;
+#line 304 "lombard.vala"
+               if (showing) {
+#line 305 "lombard.vala"
+                       gtk_paned_add1 (GTK_PANED (self->priv->h_pane), GTK_WIDGET (self->priv->library_scrolled));
+#line 306 "lombard.vala"
+                       gtk_paned_add2 (GTK_PANED (self->priv->h_pane), GTK_WIDGET (self->priv->drawing_area));
+#line 902 "lombard.c"
+               } else {
+#line 308 "lombard.vala"
+                       gtk_paned_add2 (GTK_PANED (self->priv->h_pane), GTK_WIDGET (self->priv->drawing_area));
+#line 906 "lombard.c"
+               }
+#line 310 "lombard.vala"
+               g_signal_connect_object (GTK_PANED (self->priv->h_pane)->child2, "size-allocate", (GCallback) _app_on_library_size_allocate_gtk_widget_size_allocate, self, 0);
+#line 311 "lombard.vala"
+               gtk_paned_add1 (GTK_PANED (v_pane), GTK_WIDGET (self->priv->h_pane));
+#line 313 "lombard.vala"
+               self->priv->timeline_scrolled = (_tmp2_ = g_object_ref_sink ((GtkScrolledWindow*) gtk_scrolled_window_new (NULL, NULL)), _g_object_unref0 (self->priv->timeline_scrolled), _tmp2_);
+#line 314 "lombard.vala"
+               gtk_scrolled_window_set_policy (self->priv->timeline_scrolled, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+#line 315 "lombard.vala"
+               gtk_scrolled_window_add_with_viewport (self->priv->timeline_scrolled, GTK_WIDGET (self->priv->timeline));
+#line 317 "lombard.vala"
+               timeline_vbox = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 0));
+#line 318 "lombard.vala"
+               gtk_box_pack_start (GTK_BOX (timeline_vbox), GTK_WIDGET (self->priv->status_bar), FALSE, FALSE, (guint) 0);
+#line 319 "lombard.vala"
+               gtk_box_pack_start (GTK_BOX (timeline_vbox), GTK_WIDGET (self->priv->timeline_scrolled), TRUE, TRUE, (guint) 0);
+#line 320 "lombard.vala"
+               gtk_paned_add2 (GTK_PANED (v_pane), GTK_WIDGET (timeline_vbox));
+#line 322 "lombard.vala"
+               GTK_PANED (v_pane)->child1_resize = (guint) 1;
+#line 323 "lombard.vala"
+               GTK_PANED (v_pane)->child2_resize = (guint) 0;
+#line 325 "lombard.vala"
+               self->priv->h_adjustment = (_tmp3_ = _g_object_ref0 (gtk_scrolled_window_get_hadjustment (self->priv->timeline_scrolled)), _g_object_unref0 (self->priv->h_adjustment), _tmp3_);
+#line 326 "lombard.vala"
+               g_signal_connect_object (self->priv->h_adjustment, "changed", (GCallback) _app_on_adjustment_changed_gtk_adjustment_changed, self, 0);
+#line 327 "lombard.vala"
+               self->priv->prev_adjustment_lower = gtk_adjustment_get_lower (self->priv->h_adjustment);
+#line 328 "lombard.vala"
+               self->priv->prev_adjustment_upper = gtk_adjustment_get_upper (self->priv->h_adjustment);
+#line 330 "lombard.vala"
+               gtk_box_pack_start (GTK_BOX (self->priv->vbox), GTK_WIDGET (v_pane), TRUE, TRUE, (guint) 0);
+#line 332 "lombard.vala"
+               gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->priv->vbox));
+#line 942 "lombard.c"
+               _g_object_unref0 (v_pane);
+               _g_object_unref0 (timeline_vbox);
+       } else {
+#line 334 "lombard.vala"
+               MODEL_PROJECT (self->priv->project)->library_visible = showing;
+#line 335 "lombard.vala"
+               if (showing) {
+#line 336 "lombard.vala"
+                       gtk_paned_add1 (GTK_PANED (self->priv->h_pane), GTK_WIDGET (self->priv->library_scrolled));
+#line 952 "lombard.c"
+               } else {
+#line 338 "lombard.vala"
+                       gtk_container_remove (GTK_CONTAINER (self->priv->h_pane), GTK_WIDGET (self->priv->library_scrolled));
+#line 956 "lombard.c"
+               }
+       }
+#line 341 "lombard.vala"
+       gtk_widget_show_all (GTK_WIDGET (self));
+#line 961 "lombard.c"
+}
+
+
+#line 344 "lombard.vala"
+static void app_on_drawing_realize (App* self) {
+#line 967 "lombard.c"
+       GError * _inner_error_;
+#line 344 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 971 "lombard.c"
+       _inner_error_ = NULL;
+#line 345 "lombard.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_drawing_realize");
+#line 346 "lombard.vala"
+       self->priv->loading = TRUE;
+#line 347 "lombard.vala"
+       model_project_load (MODEL_PROJECT (self->priv->project), self->priv->project_filename);
+#line 979 "lombard.c"
+       {
+               ViewVideoOutput* _tmp0_;
+               ViewVideoOutput* _tmp1_;
+#line 349 "lombard.vala"
+               _tmp0_ = view_video_output_new (GTK_WIDGET (self->priv->drawing_area), &_inner_error_);
+#line 985 "lombard.c"
+               if (_inner_error_ != NULL) {
+                       goto __catch2_g_error;
+               }
+#line 349 "lombard.vala"
+               self->priv->video_output = (_tmp1_ = _tmp0_, _g_object_unref0 (self->priv->video_output), _tmp1_);
+#line 350 "lombard.vala"
+               view_media_engine_connect_output (MODEL_PROJECT (self->priv->project)->media_engine, VIEW_MEDIA_CONNECTOR (self->priv->video_output));
+#line 993 "lombard.c"
+       }
+       goto __finally2;
+       __catch2_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+#line 352 "lombard.vala"
+                       app_do_error_dialog ("Could not create video output", e->message);
+#line 1004 "lombard.c"
+                       _g_error_free0 (e);
+               }
+       }
+       __finally2:
+       if (_inner_error_ != NULL) {
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return;
+       }
+}
+
+
+#line 356 "lombard.vala"
+static void app_on_adjustment_changed (App* self, GtkAdjustment* a) {
+#line 1019 "lombard.c"
+       gboolean _tmp0_ = FALSE;
+#line 356 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 356 "lombard.vala"
+       g_return_if_fail (GTK_IS_ADJUSTMENT (a));
+#line 357 "lombard.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_adjustment_changed");
+#line 358 "lombard.vala"
+       if (self->priv->prev_adjustment_upper != gtk_adjustment_get_upper (a)) {
+#line 358 "lombard.vala"
+               _tmp0_ = TRUE;
+#line 1031 "lombard.c"
+       } else {
+#line 359 "lombard.vala"
+               _tmp0_ = self->priv->prev_adjustment_lower != gtk_adjustment_get_lower (a);
+#line 1035 "lombard.c"
+       }
+#line 358 "lombard.vala"
+       if (_tmp0_) {
+#line 361 "lombard.vala"
+               self->priv->prev_adjustment_lower = gtk_adjustment_get_lower (a);
+#line 362 "lombard.vala"
+               self->priv->prev_adjustment_upper = gtk_adjustment_get_upper (a);
+#line 1043 "lombard.c"
+       }
+}
+
+
+#line 366 "lombard.vala"
+static void app_on_drag_data_received (App* self, GtkWidget* w, GdkDragContext* context, gint x, gint y, GtkSelectionData* selection_data, guint drag_info, guint time) {
+#line 366 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 366 "lombard.vala"
+       g_return_if_fail (GTK_IS_WIDGET (w));
+#line 366 "lombard.vala"
+       g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
+#line 366 "lombard.vala"
+       g_return_if_fail (selection_data != NULL);
+#line 368 "lombard.vala"
+       gtk_window_present (GTK_WINDOW (self));
+#line 1060 "lombard.c"
+}
+
+
+#line 371 "lombard.vala"
+void app_set_project_name (App* self, const char* filename) {
+#line 1066 "lombard.c"
+       char* _tmp0_;
+#line 371 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 372 "lombard.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "set_project_name");
+#line 373 "lombard.vala"
+       gtk_window_set_title (GTK_WINDOW (self), _tmp0_ = model_project_get_file_display_name (MODEL_PROJECT (self->priv->project)));
+#line 1074 "lombard.c"
+       _g_free0 (_tmp0_);
+}
+
+
+#line 376 "lombard.vala"
+void app_do_error_dialog (const char* message, const char* minor_message) {
+#line 376 "lombard.vala"
+       g_return_if_fail (message != NULL);
+#line 377 "lombard.vala"
+       dialog_utils_error (message, minor_message);
+#line 1085 "lombard.c"
+}
+
+
+#line 380 "lombard.vala"
+void app_on_load_error (App* self, const char* message) {
+#line 380 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 380 "lombard.vala"
+       g_return_if_fail (message != NULL);
+#line 381 "lombard.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_load_error");
+#line 382 "lombard.vala"
+       gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->priv->load_errors), message);
+#line 1099 "lombard.c"
+}
+
+
+#line 385 "lombard.vala"
+void app_on_load_complete (App* self) {
+#line 1105 "lombard.c"
+       ModelVideoTrack* _tmp0_;
+       gboolean _tmp1_;
+       GtkAction* _tmp3_;
+       GtkToggleAction* action;
+       GtkToggleAction* _tmp5_;
+       GtkAction* _tmp4_;
+#line 385 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 386 "lombard.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_load_complete");
+#line 387 "lombard.vala"
+       gtk_widget_queue_draw (GTK_WIDGET (self));
+#line 388 "lombard.vala"
+       if ((_tmp1_ = (_tmp0_ = model_project_find_video_track (MODEL_PROJECT (self->priv->project))) == NULL, _g_object_unref0 (_tmp0_), _tmp1_)) {
+#line 1120 "lombard.c"
+               ModelVideoTrack* _tmp2_;
+#line 389 "lombard.vala"
+               model_project_add_track (MODEL_PROJECT (self->priv->project), MODEL_TRACK (_tmp2_ = model_video_track_new (MODEL_PROJECT (self->priv->project))));
+#line 1124 "lombard.c"
+               _g_object_unref0 (_tmp2_);
+       }
+#line 392 "lombard.vala"
+       gst_element_set_state (GST_ELEMENT (MODEL_PROJECT (self->priv->project)->media_engine->pipeline), GST_STATE_PAUSED);
+#line 393 "lombard.vala"
+       gtk_paned_set_position (GTK_PANED (self->priv->h_pane), GTK_WIDGET (self->priv->h_pane)->allocation.width - MODEL_PROJECT (self->priv->project)->library_width);
+#line 394 "lombard.vala"
+       action = _g_object_ref0 ((_tmp3_ = gtk_action_group_get_action (self->priv->main_group, APP_LibraryToggle), GTK_IS_TOGGLE_ACTION (_tmp3_) ? ((GtkToggleAction*) _tmp3_) : NULL));
+#line 395 "lombard.vala"
+       if (gtk_toggle_action_get_active (action) != MODEL_PROJECT (self->priv->project)->library_visible) {
+#line 396 "lombard.vala"
+               gtk_toggle_action_set_active (action, MODEL_PROJECT (self->priv->project)->library_visible);
+#line 1137 "lombard.c"
+       }
+#line 399 "lombard.vala"
+       action = (_tmp5_ = _g_object_ref0 ((_tmp4_ = gtk_action_group_get_action (self->priv->main_group, "Snap"), GTK_IS_TOGGLE_ACTION (_tmp4_) ? ((GtkToggleAction*) _tmp4_) : NULL)), _g_object_unref0 (action), _tmp5_);
+#line 400 "lombard.vala"
+       if (gtk_toggle_action_get_active (action) != MODEL_PROJECT (self->priv->project)->snap_to_clip) {
+#line 401 "lombard.vala"
+               gtk_toggle_action_set_active (action, MODEL_PROJECT (self->priv->project)->snap_to_clip);
+#line 1145 "lombard.c"
+       }
+#line 404 "lombard.vala"
+       if (MODEL_PROJECT (self->priv->project)->library_visible) {
+#line 405 "lombard.vala"
+               if (GTK_PANED (self->priv->h_pane)->child1 != GTK_WIDGET (self->priv->library_scrolled)) {
+#line 406 "lombard.vala"
+                       gtk_paned_add1 (GTK_PANED (self->priv->h_pane), GTK_WIDGET (self->priv->library_scrolled));
+#line 1153 "lombard.c"
+               }
+       } else {
+#line 409 "lombard.vala"
+               if (GTK_PANED (self->priv->h_pane)->child1 == GTK_WIDGET (self->priv->library_scrolled)) {
+#line 410 "lombard.vala"
+                       gtk_container_remove (GTK_CONTAINER (self->priv->h_pane), GTK_WIDGET (self->priv->library_scrolled));
+#line 1160 "lombard.c"
+               }
+       }
+#line 414 "lombard.vala"
+       if (gee_collection_get_size (GEE_COLLECTION (self->priv->load_errors)) > 0) {
+#line 1165 "lombard.c"
+               char* message;
+#line 415 "lombard.vala"
+               message = g_strdup ("");
+#line 1169 "lombard.c"
+               {
+                       GeeIterator* _s_it;
+                       _s_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->priv->load_errors));
+#line 416 "lombard.vala"
+                       while (TRUE) {
+#line 1175 "lombard.c"
+                               char* s;
+                               char* _tmp7_;
+                               char* _tmp6_;
+#line 416 "lombard.vala"
+                               if (!gee_iterator_next (_s_it)) {
+#line 416 "lombard.vala"
+                                       break;
+#line 1183 "lombard.c"
+                               }
+#line 416 "lombard.vala"
+                               s = (char*) gee_iterator_get (_s_it);
+#line 417 "lombard.vala"
+                               message = (_tmp7_ = g_strconcat (_tmp6_ = g_strconcat (message, s, NULL), "\n", NULL), _g_free0 (message), _tmp7_);
+#line 1189 "lombard.c"
+                               _g_free0 (_tmp6_);
+                               _g_free0 (s);
+                       }
+                       _g_object_unref0 (_s_it);
+               }
+#line 419 "lombard.vala"
+               app_do_error_dialog ("An error occurred loading the project.", message);
+#line 1197 "lombard.c"
+               _g_free0 (message);
+       }
+#line 421 "lombard.vala"
+       self->priv->loading = FALSE;
+#line 1202 "lombard.c"
+       _g_object_unref0 (action);
+}
+
+
+#line 424 "lombard.vala"
+static void app_on_library_size_allocate (App* self, GdkRectangle* rectangle) {
+#line 1209 "lombard.c"
+       gboolean _tmp0_ = FALSE;
+#line 424 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 425 "lombard.vala"
+       if (!self->priv->loading) {
+#line 425 "lombard.vala"
+               _tmp0_ = GTK_PANED (self->priv->h_pane)->child1 == GTK_WIDGET (self->priv->library_scrolled);
+#line 1217 "lombard.c"
+       } else {
+#line 425 "lombard.vala"
+               _tmp0_ = FALSE;
+#line 1221 "lombard.c"
+       }
+#line 425 "lombard.vala"
+       if (_tmp0_) {
+#line 426 "lombard.vala"
+               MODEL_PROJECT (self->priv->project)->library_width = (*rectangle).width;
+#line 1227 "lombard.c"
+       }
+}
+
+
+#line 432 "lombard.vala"
+void app_load_file (App* self, const char* name, ModelLibraryImporter* im) {
+#line 1234 "lombard.c"
+       GError * _inner_error_;
+       gboolean _tmp0_ = FALSE;
+       char* _tmp1_;
+       gboolean _tmp2_;
+#line 432 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 432 "lombard.vala"
+       g_return_if_fail (name != NULL);
+#line 432 "lombard.vala"
+       g_return_if_fail (MODEL_IS_LIBRARY_IMPORTER (im));
+#line 1245 "lombard.c"
+       _inner_error_ = NULL;
+#line 433 "lombard.vala"
+       if ((_tmp2_ = _vala_strcmp0 (_tmp1_ = get_file_extension (name), MODEL_PROJECT_LOMBARD_FILE_EXTENSION) == 0, _g_free0 (_tmp1_), _tmp2_)) {
+#line 433 "lombard.vala"
+               _tmp0_ = TRUE;
+#line 1251 "lombard.c"
+       } else {
+               char* _tmp3_;
+#line 434 "lombard.vala"
+               _tmp0_ = _vala_strcmp0 (_tmp3_ = get_file_extension (name), MODEL_PROJECT_FILLMORE_FILE_EXTENSION) == 0;
+#line 1256 "lombard.c"
+               _g_free0 (_tmp3_);
+       }
+#line 433 "lombard.vala"
+       if (_tmp0_) {
+#line 435 "lombard.vala"
+               app_load_project (self, name);
+#line 1263 "lombard.c"
+       } else {
+               {
+#line 438 "lombard.vala"
+                       model_library_importer_add_file (im, name, &_inner_error_);
+#line 1268 "lombard.c"
+                       if (_inner_error_ != NULL) {
+                               goto __catch3_g_error;
+                       }
+               }
+               goto __finally3;
+               __catch3_g_error:
+               {
+                       GError * e;
+                       e = _inner_error_;
+                       _inner_error_ = NULL;
+                       {
+#line 440 "lombard.vala"
+                               app_do_error_dialog ("Error loading file", e->message);
+#line 1282 "lombard.c"
+                               _g_error_free0 (e);
+                       }
+               }
+               __finally3:
+               if (_inner_error_ != NULL) {
+                       g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+                       g_clear_error (&_inner_error_);
+                       return;
+               }
+       }
+}
+
+
+static void _g_slist_free_g_free (GSList* self) {
+       g_slist_foreach (self, (GFunc) g_free, NULL);
+       g_slist_free (self);
+}
+
+
+#line 466 "lombard.vala"
+static void _app_on_importer_started_model_library_importer_started (ModelLibraryImporter* _sender, ModelClipImporter* i, gint num, gpointer self) {
+#line 1304 "lombard.c"
+       app_on_importer_started (self, i, num);
+}
+
+
+#line 445 "lombard.vala"
+static void app_on_open (App* self) {
+#line 1311 "lombard.c"
+       GError * _inner_error_;
+       GSList* filenames;
+       GSList* _tmp2_;
+       gboolean _tmp1_;
+       GSList* _tmp0_ = NULL;
+#line 445 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 1319 "lombard.c"
+       _inner_error_ = NULL;
+#line 446 "lombard.vala"
+       gee_abstract_collection_clear (GEE_ABSTRACT_COLLECTION (self->priv->load_errors));
+#line 1323 "lombard.c"
+       filenames = NULL;
+#line 448 "lombard.vala"
+       if ((_tmp1_ = dialog_utils_open (GTK_WINDOW (self), APP_filters, G_N_ELEMENTS (APP_filters), TRUE, TRUE, &_tmp0_), filenames = (_tmp2_ = _tmp0_, __g_slist_free_g_free0 (filenames), _tmp2_), _tmp1_)) {
+#line 449 "lombard.vala"
+               model_project_create_clip_importer (MODEL_PROJECT (self->priv->project), NULL, FALSE, (gint64) 0, FALSE, NULL, 0);
+#line 450 "lombard.vala"
+               g_signal_connect_object (MODEL_PROJECT (self->priv->project)->importer, "started", (GCallback) _app_on_importer_started_model_library_importer_started, self, 0);
+#line 1331 "lombard.c"
+               {
+                       {
+                               GSList* s_collection;
+                               GSList* s_it;
+#line 452 "lombard.vala"
+                               s_collection = filenames;
+#line 1338 "lombard.c"
+                               for (s_it = s_collection; s_it != NULL; s_it = s_it->next) {
+                                       char* s;
+#line 452 "lombard.vala"
+                                       s = g_strdup ((const char*) s_it->data);
+#line 1343 "lombard.c"
+                                       {
+                                               char* str;
+                                               str = NULL;
+                                               {
+                                                       char* _tmp3_;
+                                                       char* _tmp4_;
+#line 455 "lombard.vala"
+                                                       _tmp3_ = g_filename_from_uri (s, NULL, &_inner_error_);
+#line 1352 "lombard.c"
+                                                       if (_inner_error_ != NULL) {
+                                                               if (_inner_error_->domain == G_CONVERT_ERROR) {
+                                                                       goto __catch5_g_convert_error;
+                                                               }
+                                                               _g_free0 (s);
+                                                               _g_free0 (str);
+                                                               __g_slist_free_g_free0 (filenames);
+                                                               g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+                                                               g_clear_error (&_inner_error_);
+                                                               return;
+                                                       }
+#line 455 "lombard.vala"
+                                                       str = (_tmp4_ = _tmp3_, _g_free0 (str), _tmp4_);
+#line 1366 "lombard.c"
+                                               }
+                                               goto __finally5;
+                                               __catch5_g_convert_error:
+                                               {
+                                                       GError * e;
+                                                       e = _inner_error_;
+                                                       _inner_error_ = NULL;
+                                                       {
+                                                               char* _tmp5_;
+#line 456 "lombard.vala"
+                                                               str = (_tmp5_ = g_strdup (s), _g_free0 (str), _tmp5_);
+#line 1378 "lombard.c"
+                                                               _g_error_free0 (e);
+                                                       }
+                                               }
+                                               __finally5:
+                                               if (_inner_error_ != NULL) {
+                                                       _g_free0 (s);
+                                                       _g_free0 (str);
+                                                       goto __catch4_g_error;
+                                               }
+#line 457 "lombard.vala"
+                                               app_load_file (self, str, MODEL_PROJECT (self->priv->project)->importer);
+#line 1390 "lombard.c"
+                                               _g_free0 (s);
+                                               _g_free0 (str);
+                                       }
+                               }
+                       }
+#line 459 "lombard.vala"
+                       model_library_importer_start (MODEL_PROJECT (self->priv->project)->importer, &_inner_error_);
+#line 1398 "lombard.c"
+                       if (_inner_error_ != NULL) {
+                               goto __catch4_g_error;
+                       }
+               }
+               goto __finally4;
+               __catch4_g_error:
+               {
+                       GError * e;
+                       e = _inner_error_;
+                       _inner_error_ = NULL;
+                       {
+#line 461 "lombard.vala"
+                               app_do_error_dialog ("Could not open file", e->message);
+#line 1412 "lombard.c"
+                               _g_error_free0 (e);
+                       }
+               }
+               __finally4:
+               if (_inner_error_ != NULL) {
+                       __g_slist_free_g_free0 (filenames);
+                       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;
+               }
+       }
+       __g_slist_free_g_free0 (filenames);
+}
+
+
+#line 466 "lombard.vala"
+static void app_on_importer_started (App* self, ModelClipImporter* i, gint num) {
+#line 1430 "lombard.c"
+       MultiFileProgress* _tmp0_;
+#line 466 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 466 "lombard.vala"
+       g_return_if_fail (MODEL_IS_CLIP_IMPORTER (i));
+#line 467 "lombard.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_importer_started");
+#line 468 "lombard.vala"
+       _tmp0_ = g_object_ref_sink (multi_file_progress_new (GTK_WINDOW (self), num, "Import", MULTI_FILE_PROGRESS_INTERFACE (i)));
+#line 1440 "lombard.c"
+       _g_object_unref0 (_tmp0_);
+}
+
+
+#line 471 "lombard.vala"
+static gboolean app_do_save_dialog (App* self) {
+#line 1447 "lombard.c"
+       gboolean result = FALSE;
+       char* filename;
+       gboolean create_directory;
+#line 471 "lombard.vala"
+       g_return_val_if_fail (IS_APP (self), FALSE);
+#line 472 "lombard.vala"
+       filename = model_project_get_project_file (MODEL_PROJECT (self->priv->project));
+#line 473 "lombard.vala"
+       create_directory = filename == NULL;
+#line 474 "lombard.vala"
+       if (dialog_utils_save (GTK_WINDOW (self), "Save Project", create_directory, APP_filters, G_N_ELEMENTS (APP_filters), &filename)) {
+#line 475 "lombard.vala"
+               model_project_save (MODEL_PROJECT (self->priv->project), filename);
+#line 1461 "lombard.c"
+               result = TRUE;
+               _g_free0 (filename);
+#line 476 "lombard.vala"
+               return result;
+#line 1466 "lombard.c"
+       }
+       result = FALSE;
+       _g_free0 (filename);
+#line 478 "lombard.vala"
+       return result;
+#line 1472 "lombard.c"
+}
+
+
+#line 481 "lombard.vala"
+static void app_on_save_as (App* self) {
+#line 481 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 482 "lombard.vala"
+       app_do_save_dialog (self);
+#line 1482 "lombard.c"
+}
+
+
+#line 485 "lombard.vala"
+static void app_on_save (App* self) {
+#line 485 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 486 "lombard.vala"
+       app_do_save (self);
+#line 1492 "lombard.c"
+}
+
+
+#line 489 "lombard.vala"
+static gboolean app_do_save (App* self) {
+#line 1498 "lombard.c"
+       gboolean result = FALSE;
+       char* _tmp0_;
+       gboolean _tmp1_;
+#line 489 "lombard.vala"
+       g_return_val_if_fail (IS_APP (self), FALSE);
+#line 490 "lombard.vala"
+       if ((_tmp1_ = (_tmp0_ = model_project_get_project_file (MODEL_PROJECT (self->priv->project))) != NULL, _g_free0 (_tmp0_), _tmp1_)) {
+#line 491 "lombard.vala"
+               model_project_save (MODEL_PROJECT (self->priv->project), NULL);
+#line 1508 "lombard.c"
+               result = TRUE;
+#line 492 "lombard.vala"
+               return result;
+#line 1512 "lombard.c"
+       }
+       result = app_do_save_dialog (self);
+#line 494 "lombard.vala"
+       return result;
+#line 1517 "lombard.c"
+}
+
+
+#line 497 "lombard.vala"
+void app_load_project (App* self, const char* filename) {
+#line 1523 "lombard.c"
+       GError * _inner_error_;
+#line 497 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 497 "lombard.vala"
+       g_return_if_fail (filename != NULL);
+#line 1529 "lombard.c"
+       _inner_error_ = NULL;
+#line 498 "lombard.vala"
+       self->priv->loading = TRUE;
+#line 1533 "lombard.c"
+       {
+               ViewVideoOutput* _tmp0_;
+               ViewVideoOutput* _tmp1_;
+#line 501 "lombard.vala"
+               view_media_engine_disconnect_output (MODEL_PROJECT (self->priv->project)->media_engine, VIEW_MEDIA_CONNECTOR (self->priv->video_output));
+#line 502 "lombard.vala"
+               _tmp0_ = view_video_output_new (GTK_WIDGET (self->priv->drawing_area), &_inner_error_);
+#line 1541 "lombard.c"
+               if (_inner_error_ != NULL) {
+                       goto __catch6_g_error;
+               }
+#line 502 "lombard.vala"
+               self->priv->video_output = (_tmp1_ = _tmp0_, _g_object_unref0 (self->priv->video_output), _tmp1_);
+#line 503 "lombard.vala"
+               view_media_engine_connect_output (MODEL_PROJECT (self->priv->project)->media_engine, VIEW_MEDIA_CONNECTOR (self->priv->video_output));
+#line 1549 "lombard.c"
+       }
+       goto __finally6;
+       __catch6_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+#line 505 "lombard.vala"
+                       app_do_error_dialog ("Could not create video output", e->message);
+#line 1560 "lombard.c"
+                       _g_error_free0 (e);
+               }
+       }
+       __finally6:
+       if (_inner_error_ != NULL) {
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return;
+       }
+#line 508 "lombard.vala"
+       model_project_load (MODEL_PROJECT (self->priv->project), filename);
+#line 1572 "lombard.c"
+}
+
+
+#line 514 "lombard.vala"
+static void app_scroll_toward_center (App* self, gint xpos) {
+#line 1578 "lombard.c"
+       gint cursor_pos;
+       gint page_size;
+       gint diff;
+       gint d;
+       gint x;
+       gint max_value;
+#line 514 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 515 "lombard.vala"
+       cursor_pos = xpos - ((gint) gtk_adjustment_get_value (self->priv->h_adjustment));
+#line 520 "lombard.vala"
+       page_size = (gint) gtk_adjustment_get_page_size (self->priv->h_adjustment);
+#line 521 "lombard.vala"
+       diff = (page_size / 2) - cursor_pos;
+#line 522 "lombard.vala"
+       d = sign (diff) * ((gint) sqrt ((double) abs (diff)));
+#line 523 "lombard.vala"
+       cursor_pos = cursor_pos + d;
+#line 525 "lombard.vala"
+       x = MAX (0, xpos - cursor_pos);
+#line 526 "lombard.vala"
+       max_value = (gint) (gtk_adjustment_get_upper (self->priv->h_adjustment) - GTK_WIDGET (self->priv->timeline_scrolled)->allocation.width);
+#line 527 "lombard.vala"
+       if (x > max_value) {
+#line 528 "lombard.vala"
+               x = max_value;
+#line 1605 "lombard.c"
+       }
+#line 530 "lombard.vala"
+       gtk_adjustment_set_value (self->priv->h_adjustment, (double) x);
+#line 532 "lombard.vala"
+       gtk_adjustment_set_value (self->priv->h_adjustment, (double) x);
+#line 1611 "lombard.c"
+}
+
+
+#line 535 "lombard.vala"
+void app_on_split_at_playhead (App* self) {
+#line 535 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 536 "lombard.vala"
+       model_project_split_at_playhead (MODEL_PROJECT (self->priv->project));
+#line 1621 "lombard.c"
+}
+
+
+#line 539 "lombard.vala"
+void app_on_trim_to_playhead (App* self) {
+#line 539 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 540 "lombard.vala"
+       model_project_trim_to_playhead (MODEL_PROJECT (self->priv->project));
+#line 1631 "lombard.c"
+}
+
+
+static Fraction* _fraction_dup (Fraction* self) {
+       Fraction* dup;
+       dup = g_new0 (Fraction, 1);
+       memcpy (dup, self, sizeof (Fraction));
+       return dup;
+}
+
+
+static gpointer __fraction_dup0 (gpointer self) {
+       return self ? _fraction_dup (self) : NULL;
+}
+
+
+#line 543 "lombard.vala"
+void app_on_clip_properties (App* self) {
+#line 1650 "lombard.c"
+       Fraction* frames_per_second;
+       Fraction* _tmp1_;
+       Fraction _tmp0_ = {0};
+#line 543 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 544 "lombard.vala"
+       frames_per_second = NULL;
+#line 545 "lombard.vala"
+       model_video_project_get_framerate_fraction (self->priv->project, &_tmp0_);
+#line 545 "lombard.vala"
+       frames_per_second = (_tmp1_ = __fraction_dup0 (&_tmp0_), _g_free0 (frames_per_second), _tmp1_);
+#line 546 "lombard.vala"
+       if (clip_library_view_has_selection (self->priv->library)) {
+#line 1664 "lombard.c"
+               GeeArrayList* files;
+#line 547 "lombard.vala"
+               files = clip_library_view_get_selected_files (self->priv->library);
+#line 548 "lombard.vala"
+               if (gee_collection_get_size (GEE_COLLECTION (files)) == 1) {
+#line 1670 "lombard.c"
+                       char* file_name;
+                       ModelClipFile* clip_file;
+#line 549 "lombard.vala"
+                       file_name = (char*) gee_abstract_list_get (GEE_ABSTRACT_LIST (files), 0);
+#line 550 "lombard.vala"
+                       clip_file = model_project_find_clipfile (MODEL_PROJECT (self->priv->project), file_name);
+#line 551 "lombard.vala"
+                       dialog_utils_show_clip_properties (GTK_WINDOW (self), NULL, clip_file, frames_per_second);
+#line 1679 "lombard.c"
+                       _g_free0 (file_name);
+                       _g_object_unref0 (clip_file);
+               }
+               _g_object_unref0 (files);
+       } else {
+               GeeArrayList* clips;
+#line 554 "lombard.vala"
+               clips = _g_object_ref0 (self->priv->timeline->selected_clips);
+#line 555 "lombard.vala"
+               if (gee_collection_get_size (GEE_COLLECTION (clips)) == 1) {
+#line 1690 "lombard.c"
+                       ClipView* clip_view;
+#line 556 "lombard.vala"
+                       clip_view = (ClipView*) gee_abstract_list_get (GEE_ABSTRACT_LIST (clips), 0);
+#line 557 "lombard.vala"
+                       dialog_utils_show_clip_properties (GTK_WINDOW (self), clip_view, NULL, frames_per_second);
+#line 1696 "lombard.c"
+                       _g_object_unref0 (clip_view);
+               }
+               _g_object_unref0 (clips);
+       }
+       _g_free0 (frames_per_second);
+}
+
+
+#line 562 "lombard.vala"
+void app_on_position_changed (App* self) {
+#line 562 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 563 "lombard.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_position_changed");
+#line 564 "lombard.vala"
+       app_update_menu (self);
+#line 1713 "lombard.c"
+}
+
+
+#line 567 "lombard.vala"
+static void app_on_callback_pulse (App* self) {
+#line 567 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 568 "lombard.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_callback_pulse");
+#line 569 "lombard.vala"
+       if (model_project_transport_is_playing (MODEL_PROJECT (self->priv->project))) {
+#line 570 "lombard.vala"
+               app_scroll_toward_center (self, model_time_system_time_to_xpos (MODEL_TIME_SYSTEM (self->priv->project->time_provider), MODEL_PROJECT (self->priv->project)->media_engine->position));
+#line 1727 "lombard.c"
+       }
+#line 572 "lombard.vala"
+       gtk_widget_queue_draw (GTK_WIDGET (self->priv->timeline));
+#line 1731 "lombard.c"
+}
+
+
+#line 575 "lombard.vala"
+void app_on_track_changed (App* self) {
+#line 575 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 576 "lombard.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_track_changed");
+#line 577 "lombard.vala"
+       app_update_menu (self);
+#line 1743 "lombard.c"
+}
+
+
+#line 580 "lombard.vala"
+static void app_update_menu (App* self) {
+#line 1749 "lombard.c"
+       gboolean library_selected;
+       gboolean clip_selected;
+       gboolean stopped;
+       gboolean clip_is_trimmed;
+       gboolean playhead_on_clip;
+       gboolean dir = FALSE;
+       gboolean can_trim;
+       gboolean one_selected;
+       gboolean _tmp1_ = FALSE;
+       gboolean _tmp2_ = FALSE;
+       gboolean _tmp4_ = FALSE;
+       gboolean _tmp5_ = FALSE;
+       gboolean _tmp6_ = FALSE;
+       gboolean _tmp7_ = FALSE;
+       gboolean _tmp8_ = FALSE;
+#line 580 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 581 "lombard.vala"
+       library_selected = clip_library_view_has_selection (self->priv->library);
+#line 582 "lombard.vala"
+       clip_selected = time_line_is_clip_selected (self->priv->timeline);
+#line 583 "lombard.vala"
+       stopped = transport_delegate_is_stopped (TRANSPORT_DELEGATE (self));
+#line 584 "lombard.vala"
+       clip_is_trimmed = FALSE;
+#line 585 "lombard.vala"
+       playhead_on_clip = model_project_playhead_on_clip (MODEL_PROJECT (self->priv->project));
+#line 587 "lombard.vala"
+       can_trim = model_project_can_trim (MODEL_PROJECT (self->priv->project), &dir);
+#line 588 "lombard.vala"
+       one_selected = FALSE;
+#line 589 "lombard.vala"
+       if (library_selected) {
+#line 1783 "lombard.c"
+               GeeArrayList* _tmp0_;
+#line 590 "lombard.vala"
+               one_selected = gee_collection_get_size (GEE_COLLECTION (_tmp0_ = clip_library_view_get_selected_files (self->priv->library))) == 1;
+#line 1787 "lombard.c"
+               _g_object_unref0 (_tmp0_);
+       } else {
+#line 591 "lombard.vala"
+               if (clip_selected) {
+#line 592 "lombard.vala"
+                       one_selected = gee_collection_get_size (GEE_COLLECTION (self->priv->timeline->selected_clips)) == 1;
+#line 1794 "lombard.c"
+               }
+       }
+#line 595 "lombard.vala"
+       if (clip_selected) {
+#line 1799 "lombard.c"
+               {
+                       GeeIterator* _clip_view_it;
+                       _clip_view_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->priv->timeline->selected_clips));
+#line 596 "lombard.vala"
+                       while (TRUE) {
+#line 1805 "lombard.c"
+                               ClipView* clip_view;
+#line 596 "lombard.vala"
+                               if (!gee_iterator_next (_clip_view_it)) {
+#line 596 "lombard.vala"
+                                       break;
+#line 1811 "lombard.c"
+                               }
+#line 596 "lombard.vala"
+                               clip_view = (ClipView*) gee_iterator_get (_clip_view_it);
+#line 597 "lombard.vala"
+                               clip_is_trimmed = model_clip_is_trimmed (clip_view->clip);
+#line 598 "lombard.vala"
+                               if (clip_is_trimmed) {
+#line 1819 "lombard.c"
+                                       _g_object_unref0 (clip_view);
+#line 599 "lombard.vala"
+                                       break;
+#line 1823 "lombard.c"
+                               }
+                               _g_object_unref0 (clip_view);
+                       }
+                       _g_object_unref0 (_clip_view_it);
+               }
+       }
+#line 604 "lombard.vala"
+       app_set_sensitive_group (self, self->priv->main_group, "Open", stopped);
+#line 605 "lombard.vala"
+       app_set_sensitive_group (self, self->priv->main_group, "Save", stopped);
+#line 606 "lombard.vala"
+       app_set_sensitive_group (self, self->priv->main_group, "SaveAs", stopped);
+#line 607 "lombard.vala"
+       app_set_sensitive_group (self, self->priv->main_group, "Export", model_project_can_export (MODEL_PROJECT (self->priv->project)));
+#line 610 "lombard.vala"
+       if (stopped) {
+#line 610 "lombard.vala"
+               _tmp1_ = model_undo_manager_get_can_undo (MODEL_PROJECT (self->priv->project)->undo_manager);
+#line 1842 "lombard.c"
+       } else {
+#line 610 "lombard.vala"
+               _tmp1_ = FALSE;
+#line 1846 "lombard.c"
+       }
+#line 610 "lombard.vala"
+       app_set_sensitive_group (self, self->priv->main_group, "Undo", _tmp1_);
+#line 611 "lombard.vala"
+       if (stopped) {
+#line 1852 "lombard.c"
+               gboolean _tmp3_ = FALSE;
+#line 611 "lombard.vala"
+               if (clip_selected) {
+#line 611 "lombard.vala"
+                       _tmp3_ = TRUE;
+#line 1858 "lombard.c"
+               } else {
+#line 611 "lombard.vala"
+                       _tmp3_ = library_selected;
+#line 1862 "lombard.c"
+               }
+#line 611 "lombard.vala"
+               _tmp2_ = _tmp3_;
+#line 1866 "lombard.c"
+       } else {
+#line 611 "lombard.vala"
+               _tmp2_ = FALSE;
+#line 1870 "lombard.c"
+       }
+#line 611 "lombard.vala"
+       app_set_sensitive_group (self, self->priv->main_group, "Delete", _tmp2_);
+#line 612 "lombard.vala"
+       if (stopped) {
+#line 612 "lombard.vala"
+               _tmp4_ = clip_selected;
+#line 1878 "lombard.c"
+       } else {
+#line 612 "lombard.vala"
+               _tmp4_ = FALSE;
+#line 1882 "lombard.c"
+       }
+#line 612 "lombard.vala"
+       app_set_sensitive_group (self, self->priv->main_group, "Cut", _tmp4_);
+#line 613 "lombard.vala"
+       if (stopped) {
+#line 613 "lombard.vala"
+               _tmp5_ = clip_selected;
+#line 1890 "lombard.c"
+       } else {
+#line 613 "lombard.vala"
+               _tmp5_ = FALSE;
+#line 1894 "lombard.c"
+       }
+#line 613 "lombard.vala"
+       app_set_sensitive_group (self, self->priv->main_group, "Copy", _tmp5_);
+#line 614 "lombard.vala"
+       if (stopped) {
+#line 614 "lombard.vala"
+               _tmp6_ = gee_collection_get_size (GEE_COLLECTION (self->priv->timeline->clipboard->clips)) > 0;
+#line 1902 "lombard.c"
+       } else {
+#line 614 "lombard.vala"
+               _tmp6_ = FALSE;
+#line 1906 "lombard.c"
+       }
+#line 614 "lombard.vala"
+       app_set_sensitive_group (self, self->priv->main_group, "Paste", _tmp6_);
+#line 615 "lombard.vala"
+       app_set_sensitive_group (self, self->priv->main_group, "ClipProperties", one_selected);
+#line 617 "lombard.vala"
+       if (stopped) {
+#line 617 "lombard.vala"
+               _tmp7_ = playhead_on_clip;
+#line 1916 "lombard.c"
+       } else {
+#line 617 "lombard.vala"
+               _tmp7_ = FALSE;
+#line 1920 "lombard.c"
+       }
+#line 617 "lombard.vala"
+       app_set_sensitive_group (self, self->priv->main_group, "SplitAtPlayhead", _tmp7_);
+#line 618 "lombard.vala"
+       if (stopped) {
+#line 618 "lombard.vala"
+               _tmp8_ = can_trim;
+#line 1928 "lombard.c"
+       } else {
+#line 618 "lombard.vala"
+               _tmp8_ = FALSE;
+#line 1932 "lombard.c"
+       }
+#line 618 "lombard.vala"
+       app_set_sensitive_group (self, self->priv->main_group, "TrimToPlayhead", _tmp8_);
+#line 621 "lombard.vala"
+       app_set_sensitive_group (self, self->priv->main_group, "ZoomProject", model_project_get_length (MODEL_PROJECT (self->priv->project)) != 0);
+#line 1938 "lombard.c"
+}
+
+
+#line 625 "lombard.vala"
+void app_on_timeline_selection_changed (App* self, gboolean selected) {
+#line 625 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 626 "lombard.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_timeline_selection_changed");
+#line 627 "lombard.vala"
+       if (selected) {
+#line 628 "lombard.vala"
+               clip_library_view_unselect_all (self->priv->library);
+#line 1952 "lombard.c"
+       }
+#line 629 "lombard.vala"
+       app_update_menu (self);
+#line 1956 "lombard.c"
+}
+
+
+#line 632 "lombard.vala"
+void app_on_library_selection_changed (App* self, gboolean selected) {
+#line 632 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 633 "lombard.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_library_selection_changed");
+#line 634 "lombard.vala"
+       if (selected) {
+#line 635 "lombard.vala"
+               time_line_deselect_all_clips (self->priv->timeline);
+#line 636 "lombard.vala"
+               gtk_widget_queue_draw (GTK_WIDGET (self->priv->timeline));
+#line 1972 "lombard.c"
+       }
+#line 638 "lombard.vala"
+       app_update_menu (self);
+#line 1976 "lombard.c"
+}
+
+
+#line 643 "lombard.vala"
+static gboolean app_real_key_press_event (GtkWidget* base, GdkEventKey* event) {
+#line 1982 "lombard.c"
+       App * self;
+       gboolean result = FALSE;
+       self = APP (base);
+#line 644 "lombard.vala"
+       switch ((*event).keyval) {
+#line 1988 "lombard.c"
+               case GDK_KP_Enter:
+               case GDK_Return:
+               {
+#line 647 "lombard.vala"
+                       if (((*event).state & GDK_SHIFT_ALT_CONTROL_MASK) != 0) {
+#line 1994 "lombard.c"
+                               result = GTK_WIDGET_CLASS (app_parent_class)->key_press_event (GTK_WIDGET (GTK_WINDOW (self)), event);
+#line 648 "lombard.vala"
+                               return result;
+#line 1998 "lombard.c"
+                       }
+#line 649 "lombard.vala"
+                       app_on_go_start (self);
+#line 650 "lombard.vala"
+                       break;
+#line 2004 "lombard.c"
+               }
+               case GDK_Left:
+               {
+#line 652 "lombard.vala"
+                       if (((*event).state & GDK_CONTROL_MASK) != 0) {
+#line 653 "lombard.vala"
+                               model_project_go_previous (MODEL_PROJECT (self->priv->project));
+#line 2012 "lombard.c"
+                       } else {
+#line 655 "lombard.vala"
+                               model_video_project_go_previous_frame (self->priv->project);
+#line 2016 "lombard.c"
+                       }
+#line 657 "lombard.vala"
+                       break;
+#line 2020 "lombard.c"
+               }
+               case GDK_Right:
+               {
+#line 659 "lombard.vala"
+                       if (((*event).state & GDK_CONTROL_MASK) != 0) {
+#line 660 "lombard.vala"
+                               model_project_go_next (MODEL_PROJECT (self->priv->project));
+#line 2028 "lombard.c"
+                       } else {
+#line 662 "lombard.vala"
+                               model_video_project_go_next_frame (self->priv->project);
+#line 2032 "lombard.c"
+                       }
+#line 664 "lombard.vala"
+                       break;
+#line 2036 "lombard.c"
+               }
+               case GDK_KP_Add:
+               case GDK_equal:
+               case GDK_plus:
+               {
+#line 668 "lombard.vala"
+                       app_on_zoom_in (self);
+#line 669 "lombard.vala"
+                       break;
+#line 2046 "lombard.c"
+               }
+               case GDK_KP_Subtract:
+               case GDK_minus:
+               case GDK_underscore:
+               {
+#line 673 "lombard.vala"
+                       app_on_zoom_out (self);
+#line 674 "lombard.vala"
+                       break;
+#line 2056 "lombard.c"
+               }
+               default:
+               {
+                       result = GTK_WIDGET_CLASS (app_parent_class)->key_press_event (GTK_WIDGET (GTK_WINDOW (self)), event);
+#line 676 "lombard.vala"
+                       return result;
+#line 2063 "lombard.c"
+               }
+       }
+       result = TRUE;
+#line 678 "lombard.vala"
+       return result;
+#line 2069 "lombard.c"
+}
+
+
+#line 681 "lombard.vala"
+static void app_on_snap (App* self) {
+#line 681 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 682 "lombard.vala"
+       MODEL_PROJECT (self->priv->project)->snap_to_clip = !MODEL_PROJECT (self->priv->project)->snap_to_clip;
+#line 2079 "lombard.c"
+}
+
+
+#line 685 "lombard.vala"
+static void app_on_view_library (App* self) {
+#line 2085 "lombard.c"
+       GtkAction* _tmp0_;
+       GtkToggleAction* action;
+#line 685 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 686 "lombard.vala"
+       action = _g_object_ref0 ((_tmp0_ = gtk_action_group_get_action (self->priv->main_group, APP_LibraryToggle), GTK_IS_TOGGLE_ACTION (_tmp0_) ? ((GtkToggleAction*) _tmp0_) : NULL));
+#line 687 "lombard.vala"
+       app_toggle_library (self, gtk_toggle_action_get_active (action));
+#line 2094 "lombard.c"
+       _g_object_unref0 (action);
+}
+
+
+#line 690 "lombard.vala"
+static gint64 app_get_zoom_center_time (App* self) {
+#line 2101 "lombard.c"
+       gint64 result = 0LL;
+#line 690 "lombard.vala"
+       g_return_val_if_fail (IS_APP (self), 0LL);
+#line 2105 "lombard.c"
+       result = model_project_transport_get_position (MODEL_PROJECT (self->priv->project));
+#line 691 "lombard.vala"
+       return result;
+#line 2109 "lombard.c"
+}
+
+
+#line 694 "lombard.vala"
+static void app_do_zoom (App* self, float increment) {
+#line 694 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 695 "lombard.vala"
+       self->priv->center_time = app_get_zoom_center_time (self);
+#line 696 "lombard.vala"
+       time_line_zoom (self->priv->timeline, increment);
+#line 2121 "lombard.c"
+}
+
+
+#line 699 "lombard.vala"
+static void app_on_zoom_in (App* self) {
+#line 699 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 700 "lombard.vala"
+       app_do_zoom (self, 0.1f);
+#line 2131 "lombard.c"
+}
+
+
+#line 703 "lombard.vala"
+static void app_on_zoom_out (App* self) {
+#line 703 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 704 "lombard.vala"
+       app_do_zoom (self, -0.1f);
+#line 2141 "lombard.c"
+}
+
+
+#line 707 "lombard.vala"
+static void app_on_zoom_to_project (App* self) {
+#line 707 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 708 "lombard.vala"
+       time_line_zoom_to_project (self->priv->timeline, gtk_adjustment_get_page_size (self->priv->h_adjustment));
+#line 2151 "lombard.c"
+}
+
+
+#line 711 "lombard.vala"
+static void app_on_timeline_size_allocate (App* self, GdkRectangle* rectangle) {
+#line 711 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 712 "lombard.vala"
+       if (self->priv->center_time != (-1)) {
+#line 2161 "lombard.c"
+               gint new_center_pixel;
+               gint page_size;
+#line 713 "lombard.vala"
+               new_center_pixel = model_time_system_time_to_xpos (MODEL_TIME_SYSTEM (self->priv->project->time_provider), self->priv->center_time);
+#line 714 "lombard.vala"
+               page_size = (gint) (gtk_adjustment_get_page_size (self->priv->h_adjustment) / 2);
+#line 715 "lombard.vala"
+               gtk_adjustment_clamp_page (self->priv->h_adjustment, (double) (new_center_pixel - page_size), (double) (new_center_pixel + page_size));
+#line 716 "lombard.vala"
+               self->priv->center_time = (gint64) (-1);
+#line 2172 "lombard.c"
+       }
+}
+
+
+#line 720 "lombard.vala"
+static void app_set_sensitive_group (App* self, GtkActionGroup* group, const char* group_path, gboolean sensitive) {
+#line 2179 "lombard.c"
+       GtkAction* action;
+#line 720 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 720 "lombard.vala"
+       g_return_if_fail (GTK_IS_ACTION_GROUP (group));
+#line 720 "lombard.vala"
+       g_return_if_fail (group_path != NULL);
+#line 721 "lombard.vala"
+       action = _g_object_ref0 (gtk_action_group_get_action (group, group_path));
+#line 722 "lombard.vala"
+       gtk_action_set_sensitive (action, sensitive);
+#line 2191 "lombard.c"
+       _g_object_unref0 (action);
+}
+
+
+#line 727 "lombard.vala"
+static void app_on_play_pause (App* self) {
+#line 727 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 728 "lombard.vala"
+       if (model_project_transport_is_playing (MODEL_PROJECT (self->priv->project))) {
+#line 729 "lombard.vala"
+               view_media_engine_pause (MODEL_PROJECT (self->priv->project)->media_engine);
+#line 2204 "lombard.c"
+       } else {
+#line 735 "lombard.vala"
+               view_media_engine_do_play (MODEL_PROJECT (self->priv->project)->media_engine, PLAY_STATE_PLAYING);
+#line 2208 "lombard.c"
+       }
+}
+
+
+#line 739 "lombard.vala"
+static void app_on_export (App* self) {
+#line 2215 "lombard.c"
+       GError * _inner_error_;
+       char* filename;
+#line 739 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 2220 "lombard.c"
+       _inner_error_ = NULL;
+#line 740 "lombard.vala"
+       filename = NULL;
+#line 741 "lombard.vala"
+       if (dialog_utils_save (GTK_WINDOW (self), "Export", FALSE, APP_export_filters, G_N_ELEMENTS (APP_export_filters), &filename)) {
+#line 2226 "lombard.c"
+               MultiFileProgress* _tmp0_;
+#line 742 "lombard.vala"
+               _tmp0_ = g_object_ref_sink (multi_file_progress_new (GTK_WINDOW (self), 1, "Export", MULTI_FILE_PROGRESS_INTERFACE (MODEL_PROJECT (self->priv->project)->media_engine)));
+#line 2230 "lombard.c"
+               _g_object_unref0 (_tmp0_);
+#line 743 "lombard.vala"
+               view_media_engine_disconnect_output (MODEL_PROJECT (self->priv->project)->media_engine, VIEW_MEDIA_CONNECTOR (self->priv->audio_output));
+#line 744 "lombard.vala"
+               view_media_engine_disconnect_output (MODEL_PROJECT (self->priv->project)->media_engine, VIEW_MEDIA_CONNECTOR (self->priv->video_output));
+#line 2236 "lombard.c"
+               {
+                       GstCaps* _tmp1_;
+                       ViewOggVorbisExport* _tmp2_;
+                       ViewOggVorbisExport* _tmp3_;
+                       ViewOggVorbisExport* _tmp4_;
+#line 746 "lombard.vala"
+                       _tmp3_ = (_tmp2_ = view_ogg_vorbis_export_new (VIEW_MEDIA_CONNECTOR_MEDIA_TYPES_Audio | VIEW_MEDIA_CONNECTOR_MEDIA_TYPES_Video, filename, _tmp1_ = view_media_engine_get_project_audio_export_caps (MODEL_PROJECT (self->priv->project)->media_engine), &_inner_error_), _gst_caps_unref0 (_tmp1_), _tmp2_);
+#line 2244 "lombard.c"
+                       if (_inner_error_ != NULL) {
+                               goto __catch7_g_error;
+                       }
+#line 746 "lombard.vala"
+                       self->priv->export_connector = (_tmp4_ = _tmp3_, _g_object_unref0 (self->priv->export_connector), _tmp4_);
+#line 749 "lombard.vala"
+                       view_media_engine_connect_output (MODEL_PROJECT (self->priv->project)->media_engine, VIEW_MEDIA_CONNECTOR (self->priv->export_connector));
+#line 750 "lombard.vala"
+                       view_media_engine_start_export (MODEL_PROJECT (self->priv->project)->media_engine, filename);
+#line 2254 "lombard.c"
+               }
+               goto __finally7;
+               __catch7_g_error:
+               {
+                       GError * e;
+                       e = _inner_error_;
+                       _inner_error_ = NULL;
+                       {
+#line 752 "lombard.vala"
+                               app_do_error_dialog ("Could not export file", e->message);
+#line 2265 "lombard.c"
+                               _g_error_free0 (e);
+                       }
+               }
+               __finally7:
+               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;
+               }
+       }
+       _g_free0 (filename);
+}
+
+
+#line 757 "lombard.vala"
+static void app_on_post_export (App* self, gboolean canceled) {
+#line 2283 "lombard.c"
+       ViewOggVorbisExport* _tmp1_;
+#line 757 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 758 "lombard.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_post_export");
+#line 759 "lombard.vala"
+       view_media_engine_disconnect_output (MODEL_PROJECT (self->priv->project)->media_engine, VIEW_MEDIA_CONNECTOR (self->priv->export_connector));
+#line 760 "lombard.vala"
+       view_media_engine_connect_output (MODEL_PROJECT (self->priv->project)->media_engine, VIEW_MEDIA_CONNECTOR (self->priv->audio_output));
+#line 761 "lombard.vala"
+       view_media_engine_connect_output (MODEL_PROJECT (self->priv->project)->media_engine, VIEW_MEDIA_CONNECTOR (self->priv->video_output));
+#line 762 "lombard.vala"
+       if (canceled) {
+#line 2297 "lombard.c"
+               char* _tmp0_;
+#line 763 "lombard.vala"
+               g_remove (_tmp0_ = view_ogg_vorbis_export_get_filename (self->priv->export_connector));
+#line 2301 "lombard.c"
+               _g_free0 (_tmp0_);
+       }
+#line 765 "lombard.vala"
+       self->priv->export_connector = (_tmp1_ = NULL, _g_object_unref0 (self->priv->export_connector), _tmp1_);
+#line 2306 "lombard.c"
+}
+
+
+#line 770 "lombard.vala"
+static void app_on_undo (App* self) {
+#line 770 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 771 "lombard.vala"
+       model_project_undo (MODEL_PROJECT (self->priv->project));
+#line 2316 "lombard.c"
+}
+
+
+#line 774 "lombard.vala"
+static void app_on_delete (App* self) {
+#line 774 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 775 "lombard.vala"
+       if (clip_library_view_has_selection (self->priv->library)) {
+#line 776 "lombard.vala"
+               clip_library_view_delete_selection (self->priv->library);
+#line 2328 "lombard.c"
+       } else {
+#line 778 "lombard.vala"
+               time_line_delete_selection (self->priv->timeline);
+#line 2332 "lombard.c"
+       }
+}
+
+
+#line 781 "lombard.vala"
+static void app_on_cut (App* self) {
+#line 781 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 782 "lombard.vala"
+       time_line_do_cut (self->priv->timeline);
+#line 2343 "lombard.c"
+}
+
+
+#line 785 "lombard.vala"
+static void app_on_copy (App* self) {
+#line 785 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 786 "lombard.vala"
+       time_line_do_copy (self->priv->timeline);
+#line 2353 "lombard.c"
+}
+
+
+#line 789 "lombard.vala"
+static void app_on_paste (App* self) {
+#line 789 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 790 "lombard.vala"
+       time_line_paste (self->priv->timeline);
+#line 2363 "lombard.c"
+}
+
+
+#line 793 "lombard.vala"
+static void app_on_playstate_changed (App* self, PlayState playstate) {
+#line 793 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 794 "lombard.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_playstate_changed");
+#line 795 "lombard.vala"
+       if (playstate == PLAY_STATE_STOPPED) {
+#line 796 "lombard.vala"
+               app_update_menu (self);
+#line 2377 "lombard.c"
+       }
+}
+
+
+#line 800 "lombard.vala"
+static void app_on_undo_changed (App* self, gboolean can_undo) {
+#line 2384 "lombard.c"
+       GtkMenuItem* undo;
+       gboolean _tmp0_ = FALSE;
+#line 800 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 801 "lombard.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_undo_changed");
+#line 802 "lombard.vala"
+       undo = GTK_MENU_ITEM (get_widget (self->priv->manager, "/MenuBar/EditMenu/EditUndo"));
+#line 803 "lombard.vala"
+       g_assert (undo != NULL);
+#line 805 "lombard.vala"
+       if (transport_delegate_is_stopped (TRANSPORT_DELEGATE (self))) {
+#line 805 "lombard.vala"
+               _tmp0_ = model_undo_manager_get_can_undo (MODEL_PROJECT (self->priv->project)->undo_manager);
+#line 2399 "lombard.c"
+       } else {
+#line 805 "lombard.vala"
+               _tmp0_ = FALSE;
+#line 2403 "lombard.c"
+       }
+#line 805 "lombard.vala"
+       app_set_sensitive_group (self, self->priv->main_group, "Undo", _tmp0_);
+#line 2407 "lombard.c"
+       _g_object_unref0 (undo);
+}
+
+
+#line 808 "lombard.vala"
+static void app_on_select_all (App* self) {
+#line 808 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 809 "lombard.vala"
+       if (clip_library_view_has_selection (self->priv->library)) {
+#line 810 "lombard.vala"
+               clip_library_view_select_all (self->priv->library);
+#line 2420 "lombard.c"
+       } else {
+#line 812 "lombard.vala"
+               time_line_select_all (self->priv->timeline);
+#line 2424 "lombard.c"
+       }
+}
+
+
+#line 818 "lombard.vala"
+static void app_on_go_start (App* self) {
+#line 818 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 818 "lombard.vala"
+       model_project_go_start (MODEL_PROJECT (self->priv->project));
+#line 2435 "lombard.c"
+}
+
+
+#line 820 "lombard.vala"
+static void app_on_go_end (App* self) {
+#line 820 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 820 "lombard.vala"
+       model_project_go_end (MODEL_PROJECT (self->priv->project));
+#line 2445 "lombard.c"
+}
+
+
+#line 824 "lombard.vala"
+static void app_on_help_contents (App* self) {
+#line 2451 "lombard.c"
+       GError * _inner_error_;
+#line 824 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 2455 "lombard.c"
+       _inner_error_ = NULL;
+       {
+#line 826 "lombard.vala"
+               gtk_show_uri (NULL, "http://trac.yorba.org/wiki/UsingLombard0.1", (guint32) 0, &_inner_error_);
+#line 2460 "lombard.c"
+               if (_inner_error_ != NULL) {
+                       goto __catch8_g_error;
+               }
+       }
+       goto __finally8;
+       __catch8_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+                       _g_error_free0 (e);
+               }
+       }
+       __finally8:
+       if (_inner_error_ != NULL) {
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return;
+       }
+}
+
+
+#line 831 "lombard.vala"
+static void app_on_about (App* self) {
+#line 2486 "lombard.c"
+       char* _tmp1_;
+       char* _tmp0_;
+#line 831 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 832 "lombard.vala"
+       gtk_show_about_dialog (GTK_WINDOW (self), "version", _tmp0_ = model_project_get_version (MODEL_PROJECT (self->priv->project)), "comments", "A video editor", "copyright", "Copyright 2009-2010 Yorba Foundation", "website", "http://www.yorba.org", "license", _tmp1_ = model_project_get_license (MODEL_PROJECT (self->priv->project)), "website-label", "Visit the Yorba web site", "authors", MODEL_PROJECT_authors, NULL);
+#line 2493 "lombard.c"
+       _g_free0 (_tmp1_);
+       _g_free0 (_tmp0_);
+}
+
+
+#line 843 "lombard.vala"
+static void app_on_save_graph (App* self) {
+#line 843 "lombard.vala"
+       g_return_if_fail (IS_APP (self));
+#line 844 "lombard.vala"
+       model_project_print_graph (MODEL_PROJECT (self->priv->project), GST_BIN (MODEL_PROJECT (self->priv->project)->media_engine->pipeline), "save_graph");
+#line 2505 "lombard.c"
+}
+
+
+#line 848 "lombard.vala"
+static gboolean app_real_is_recording (TransportDelegate* base) {
+#line 2511 "lombard.c"
+       App * self;
+       gboolean result = FALSE;
+       self = APP (base);
+       result = model_project_transport_is_recording (MODEL_PROJECT (self->priv->project));
+#line 849 "lombard.vala"
+       return result;
+#line 2518 "lombard.c"
+}
+
+
+#line 852 "lombard.vala"
+static gboolean app_real_is_playing (TransportDelegate* base) {
+#line 2524 "lombard.c"
+       App * self;
+       gboolean result = FALSE;
+       self = APP (base);
+       result = model_project_transport_is_playing (MODEL_PROJECT (self->priv->project));
+#line 853 "lombard.vala"
+       return result;
+#line 2531 "lombard.c"
+}
+
+
+#line 856 "lombard.vala"
+static gboolean app_real_is_stopped (TransportDelegate* base) {
+#line 2537 "lombard.c"
+       App * self;
+       gboolean result = FALSE;
+       gboolean _tmp0_ = FALSE;
+       self = APP (base);
+#line 857 "lombard.vala"
+       if (transport_delegate_is_playing (TRANSPORT_DELEGATE (self))) {
+#line 857 "lombard.vala"
+               _tmp0_ = TRUE;
+#line 2546 "lombard.c"
+       } else {
+#line 857 "lombard.vala"
+               _tmp0_ = transport_delegate_is_recording (TRANSPORT_DELEGATE (self));
+#line 2550 "lombard.c"
+       }
+       result = !_tmp0_;
+#line 857 "lombard.vala"
+       return result;
+#line 2555 "lombard.c"
+}
+
+
+static void app_class_init (AppClass * klass) {
+       app_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (AppPrivate));
+       GTK_WIDGET_CLASS (klass)->key_press_event = app_real_key_press_event;
+       G_OBJECT_CLASS (klass)->finalize = app_finalize;
+}
+
+
+static void app_transport_delegate_interface_init (TransportDelegateIface * iface) {
+       app_transport_delegate_parent_iface = g_type_interface_peek_parent (iface);
+       iface->is_recording = app_real_is_recording;
+       iface->is_playing = app_real_is_playing;
+       iface->is_stopped = app_real_is_stopped;
+}
+
+
+static void app_instance_init (App * self) {
+       self->priv = APP_GET_PRIVATE (self);
+       self->priv->center_time = (gint64) (-1);
+       self->priv->vbox = NULL;
+}
+
+
+static void app_finalize (GObject* obj) {
+       App * self;
+       self = APP (obj);
+       _g_object_unref0 (self->priv->drawing_area);
+       _g_object_unref0 (self->priv->project);
+       _g_object_unref0 (self->priv->video_output);
+       _g_object_unref0 (self->priv->audio_output);
+       _g_object_unref0 (self->priv->export_connector);
+       _g_object_unref0 (self->priv->timeline);
+       _g_object_unref0 (self->priv->library);
+       _g_object_unref0 (self->priv->status_bar);
+       _g_object_unref0 (self->priv->h_pane);
+       _g_object_unref0 (self->priv->library_scrolled);
+       _g_object_unref0 (self->priv->timeline_scrolled);
+       _g_object_unref0 (self->priv->h_adjustment);
+       _g_object_unref0 (self->priv->main_group);
+       _g_object_unref0 (self->priv->vbox);
+       _g_object_unref0 (self->priv->menubar);
+       _g_object_unref0 (self->priv->manager);
+       _g_free0 (self->priv->project_filename);
+       _g_object_unref0 (self->priv->load_errors);
+       G_OBJECT_CLASS (app_parent_class)->finalize (obj);
+}
+
+
+GType app_get_type (void) {
+       static volatile gsize app_type_id__volatile = 0;
+       if (g_once_init_enter (&app_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (AppClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) app_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (App), 0, (GInstanceInitFunc) app_instance_init, NULL };
+               static const GInterfaceInfo transport_delegate_info = { (GInterfaceInitFunc) app_transport_delegate_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
+               GType app_type_id;
+               app_type_id = g_type_register_static (GTK_TYPE_WINDOW, "App", &g_define_type_info, 0);
+               g_type_add_interface_static (app_type_id, TYPE_TRANSPORT_DELEGATE, &transport_delegate_info);
+               g_once_init_leave (&app_type_id__volatile, app_type_id);
+       }
+       return app_type_id__volatile;
+}
+
+
+#line 863 "lombard.vala"
+void _vala_main (char** args, int args_length1) {
+#line 2623 "lombard.c"
+       GError * _inner_error_;
+       GOptionContext* context;
+       _inner_error_ = NULL;
+#line 864 "lombard.vala"
+       debug_level = -1;
+#line 865 "lombard.vala"
+       context = g_option_context_new (" [project file] - Create and edit movies");
+#line 867 "lombard.vala"
+       g_option_context_add_main_entries (context, options, NULL);
+#line 868 "lombard.vala"
+       g_option_context_add_group (context, gst_init_get_option_group ());
+#line 2635 "lombard.c"
+       {
+#line 871 "lombard.vala"
+               g_option_context_parse (context, &args_length1, &args, &_inner_error_);
+#line 2639 "lombard.c"
+               if (_inner_error_ != NULL) {
+                       goto __catch9_g_error;
+               }
+       }
+       goto __finally9;
+       __catch9_g_error:
+       {
+               GError * arg_error;
+               arg_error = _inner_error_;
+               _inner_error_ = NULL;
+               {
+#line 873 "lombard.vala"
+                       fprintf (stderr, "%s\n" \
+"Run 'lombard --help' for a full list of available command line options" \
+".", arg_error->message);
+#line 2653 "lombard.c"
+                       _g_error_free0 (arg_error);
+                       _g_option_context_free0 (context);
+#line 875 "lombard.vala"
+                       return;
+#line 2658 "lombard.c"
+               }
+       }
+       __finally9:
+       if (_inner_error_ != NULL) {
+               _g_option_context_free0 (context);
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return;
+       }
+#line 877 "lombard.vala"
+       gtk_init (&args_length1, &args);
+#line 2670 "lombard.c"
+       {
+               char* project_file;
+               char* str;
+               gboolean _tmp3_ = FALSE;
+               ClassFactory* _tmp4_;
+               App* _tmp5_;
+#line 880 "lombard.vala"
+               g_set_application_name ("Lombard");
+#line 882 "lombard.vala"
+               app_dirs_init (args[0], _PROGRAM_NAME);
+#line 883 "lombard.vala"
+               gst_init (&args_length1, &args);
+#line 885 "lombard.vala"
+               if (args_length1 > 2) {
+#line 886 "lombard.vala"
+                       fprintf (stderr, "usage: %s [project-file]\n", args[0]);
+#line 2687 "lombard.c"
+                       _g_option_context_free0 (context);
+#line 887 "lombard.vala"
+                       return;
+#line 2691 "lombard.c"
+               }
+#line 890 "lombard.vala"
+               project_file = NULL;
+#line 891 "lombard.vala"
+               if (args_length1 > 1) {
+#line 2697 "lombard.c"
+                       char* _tmp0_;
+#line 892 "lombard.vala"
+                       project_file = (_tmp0_ = g_strdup (args[1]), _g_free0 (project_file), _tmp0_);
+#line 2701 "lombard.c"
+                       {
+                               char* _tmp1_;
+                               char* _tmp2_;
+#line 894 "lombard.vala"
+                               _tmp1_ = g_filename_from_uri (project_file, NULL, &_inner_error_);
+#line 2707 "lombard.c"
+                               if (_inner_error_ != NULL) {
+                                       goto __catch11_g_error;
+                               }
+#line 894 "lombard.vala"
+                               project_file = (_tmp2_ = _tmp1_, _g_free0 (project_file), _tmp2_);
+#line 2713 "lombard.c"
+                       }
+                       goto __finally11;
+                       __catch11_g_error:
+                       {
+                               GError * e;
+                               e = _inner_error_;
+                               _inner_error_ = NULL;
+                               {
+                                       _g_error_free0 (e);
+                               }
+                       }
+                       __finally11:
+                       if (_inner_error_ != NULL) {
+                               _g_free0 (project_file);
+                               goto __catch10_g_error;
+                       }
+               }
+#line 898 "lombard.vala"
+               str = g_strdup (g_getenv ("LOMBARD_DEBUG"));
+#line 899 "lombard.vala"
+               if (str != NULL) {
+#line 899 "lombard.vala"
+                       _tmp3_ = g_utf8_get_char (g_utf8_offset_to_pointer (str, 0)) >= '1';
+#line 2737 "lombard.c"
+               } else {
+#line 899 "lombard.vala"
+                       _tmp3_ = FALSE;
+#line 2741 "lombard.c"
+               }
+#line 899 "lombard.vala"
+               debug_enabled = _tmp3_;
+#line 900 "lombard.vala"
+               class_factory_set_class_factory (_tmp4_ = class_factory_new ());
+#line 2747 "lombard.c"
+               _class_factory_unref0 (_tmp4_);
+#line 901 "lombard.vala"
+               view_media_engine_can_run (&_inner_error_);
+#line 2751 "lombard.c"
+               if (_inner_error_ != NULL) {
+                       _g_free0 (project_file);
+                       _g_free0 (str);
+                       goto __catch10_g_error;
+               }
+#line 903 "lombard.vala"
+               _tmp5_ = g_object_ref_sink (app_new (project_file, &_inner_error_));
+#line 2759 "lombard.c"
+               _g_object_unref0 (_tmp5_);
+               if (_inner_error_ != NULL) {
+                       _g_free0 (project_file);
+                       _g_free0 (str);
+                       goto __catch10_g_error;
+               }
+#line 904 "lombard.vala"
+               gtk_main ();
+#line 2768 "lombard.c"
+               _g_free0 (project_file);
+               _g_free0 (str);
+       }
+       goto __finally10;
+       __catch10_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+                       char* _tmp6_;
+#line 906 "lombard.vala"
+                       app_do_error_dialog ("Could not launch application", _tmp6_ = g_strdup_printf ("%s.", e->message));
+#line 2782 "lombard.c"
+                       _g_free0 (_tmp6_);
+                       _g_error_free0 (e);
+               }
+       }
+       __finally10:
+       if (_inner_error_ != NULL) {
+               _g_option_context_free0 (context);
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return;
+       }
+       _g_option_context_free0 (context);
+}
+
+
+#line 863 "lombard.vala"
+int main (int argc, char ** argv) {
+#line 2800 "lombard.c"
+       g_thread_init (NULL);
+#line 863 "lombard.vala"
+       g_type_init ();
+#line 863 "lombard.vala"
+       _vala_main (argv, argc);
+#line 863 "lombard.vala"
+       return 0;
+#line 2808 "lombard.c"
+}
+
+
+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);
+}
+
+
+
+