Initial commit
[fillmore] / src / marina / marina / ClipLibraryView.c
diff --git a/src/marina/marina/ClipLibraryView.c b/src/marina/marina/ClipLibraryView.c
new file mode 100644 (file)
index 0000000..4f484c1
--- /dev/null
@@ -0,0 +1,1903 @@
+/* ClipLibraryView.c generated by valac, the Vala compiler
+ * generated from ClipLibraryView.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 <gee.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gdk-pixbuf/gdk-pixdata.h>
+#include <float.h>
+#include <math.h>
+#include <gdk/gdk.h>
+#include <gst/gst.h>
+#include <glib/gstdio.h>
+
+
+#define TYPE_CLIP_LIBRARY_VIEW (clip_library_view_get_type ())
+#define CLIP_LIBRARY_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CLIP_LIBRARY_VIEW, ClipLibraryView))
+#define CLIP_LIBRARY_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CLIP_LIBRARY_VIEW, ClipLibraryViewClass))
+#define IS_CLIP_LIBRARY_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CLIP_LIBRARY_VIEW))
+#define IS_CLIP_LIBRARY_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CLIP_LIBRARY_VIEW))
+#define CLIP_LIBRARY_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CLIP_LIBRARY_VIEW, ClipLibraryViewClass))
+
+typedef struct _ClipLibraryView ClipLibraryView;
+typedef struct _ClipLibraryViewClass ClipLibraryViewClass;
+typedef struct _ClipLibraryViewPrivate ClipLibraryViewPrivate;
+
+#define MODEL_TYPE_PROJECT (model_project_get_type ())
+#define MODEL_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_PROJECT, ModelProject))
+#define MODEL_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_PROJECT, ModelProjectClass))
+#define MODEL_IS_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_PROJECT))
+#define MODEL_IS_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_PROJECT))
+#define MODEL_PROJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_PROJECT, ModelProjectClass))
+
+typedef struct _ModelProject ModelProject;
+typedef struct _ModelProjectClass ModelProjectClass;
+
+#define CLIP_LIBRARY_VIEW_TYPE_SORT_MODE (clip_library_view_sort_mode_get_type ())
+
+#define MODEL_TYPE_TIME_SYSTEM (model_time_system_get_type ())
+#define MODEL_TIME_SYSTEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TIME_SYSTEM, ModelTimeSystem))
+#define MODEL_IS_TIME_SYSTEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TIME_SYSTEM))
+#define MODEL_TIME_SYSTEM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MODEL_TYPE_TIME_SYSTEM, ModelTimeSystemIface))
+
+typedef struct _ModelTimeSystem ModelTimeSystem;
+typedef struct _ModelTimeSystemIface ModelTimeSystemIface;
+
+#define CLIP_LIBRARY_VIEW_TYPE_COLUMN_TYPE (clip_library_view_column_type_get_type ())
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+#define MODEL_TYPE_CLIP_FILE (model_clip_file_get_type ())
+#define MODEL_CLIP_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_FILE, ModelClipFile))
+#define MODEL_CLIP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_FILE, ModelClipFileClass))
+#define MODEL_IS_CLIP_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_FILE))
+#define MODEL_IS_CLIP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_FILE))
+#define MODEL_CLIP_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_FILE, ModelClipFileClass))
+
+typedef struct _ModelClipFile ModelClipFile;
+typedef struct _ModelClipFileClass ModelClipFileClass;
+
+#define MODEL_TYPE_TEMPO_INFORMATION (model_tempo_information_get_type ())
+#define MODEL_TEMPO_INFORMATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TEMPO_INFORMATION, ModelTempoInformation))
+#define MODEL_IS_TEMPO_INFORMATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TEMPO_INFORMATION))
+#define MODEL_TEMPO_INFORMATION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MODEL_TYPE_TEMPO_INFORMATION, ModelTempoInformationIface))
+
+typedef struct _ModelTempoInformation ModelTempoInformation;
+typedef struct _ModelTempoInformationIface ModelTempoInformationIface;
+
+#define TYPE_FRACTION (fraction_get_type ())
+typedef struct _Fraction Fraction;
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+#define _gtk_tree_path_free0(var) ((var == NULL) ? NULL : (var = (gtk_tree_path_free (var), NULL)))
+
+#define LOGGING_TYPE_FACILITY (logging_facility_get_type ())
+
+#define LOGGING_TYPE_LEVEL (logging_level_get_type ())
+
+#define MODEL_TYPE_TRACK (model_track_get_type ())
+#define MODEL_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TRACK, ModelTrack))
+#define MODEL_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_TRACK, ModelTrackClass))
+#define MODEL_IS_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TRACK))
+#define MODEL_IS_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_TRACK))
+#define MODEL_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_TRACK, ModelTrackClass))
+
+typedef struct _ModelTrack ModelTrack;
+typedef struct _ModelTrackClass ModelTrackClass;
+#define _g_free0(var) (var = (g_free (var), NULL))
+typedef struct _ModelProjectPrivate ModelProjectPrivate;
+
+#define TYPE_TIME_CODE (time_code_get_type ())
+typedef struct _TimeCode TimeCode;
+
+#define VIEW_TYPE_MEDIA_ENGINE (view_media_engine_get_type ())
+#define VIEW_MEDIA_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngine))
+#define VIEW_MEDIA_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngineClass))
+#define VIEW_IS_MEDIA_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_MEDIA_ENGINE))
+#define VIEW_IS_MEDIA_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_MEDIA_ENGINE))
+#define VIEW_MEDIA_ENGINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngineClass))
+
+typedef struct _ViewMediaEngine ViewMediaEngine;
+typedef struct _ViewMediaEngineClass ViewMediaEngineClass;
+
+#define MODEL_TYPE_PROJECT_LOADER (model_project_loader_get_type ())
+#define MODEL_PROJECT_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoader))
+#define MODEL_PROJECT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoaderClass))
+#define MODEL_IS_PROJECT_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_PROJECT_LOADER))
+#define MODEL_IS_PROJECT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_PROJECT_LOADER))
+#define MODEL_PROJECT_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoaderClass))
+
+typedef struct _ModelProjectLoader ModelProjectLoader;
+typedef struct _ModelProjectLoaderClass ModelProjectLoaderClass;
+
+#define MODEL_TYPE_UNDO_MANAGER (model_undo_manager_get_type ())
+#define MODEL_UNDO_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_UNDO_MANAGER, ModelUndoManager))
+#define MODEL_UNDO_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_UNDO_MANAGER, ModelUndoManagerClass))
+#define MODEL_IS_UNDO_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_UNDO_MANAGER))
+#define MODEL_IS_UNDO_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_UNDO_MANAGER))
+#define MODEL_UNDO_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_UNDO_MANAGER, ModelUndoManagerClass))
+
+typedef struct _ModelUndoManager ModelUndoManager;
+typedef struct _ModelUndoManagerClass ModelUndoManagerClass;
+
+#define MODEL_TYPE_LIBRARY_IMPORTER (model_library_importer_get_type ())
+#define MODEL_LIBRARY_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporter))
+#define MODEL_LIBRARY_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporterClass))
+#define MODEL_IS_LIBRARY_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_LIBRARY_IMPORTER))
+#define MODEL_IS_LIBRARY_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_LIBRARY_IMPORTER))
+#define MODEL_LIBRARY_IMPORTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporterClass))
+
+typedef struct _ModelLibraryImporter ModelLibraryImporter;
+typedef struct _ModelLibraryImporterClass ModelLibraryImporterClass;
+#define __g_list_free_gtk_tree_path_free0(var) ((var == NULL) ? NULL : (var = (_g_list_free_gtk_tree_path_free (var), NULL)))
+typedef struct _ModelClipFilePrivate ModelClipFilePrivate;
+
+#define MODEL_TYPE_MEDIA_TYPE (model_media_type_get_type ())
+
+struct _ClipLibraryView {
+       GtkEventBox parent_instance;
+       ClipLibraryViewPrivate * priv;
+};
+
+struct _ClipLibraryViewClass {
+       GtkEventBoxClass parent_class;
+};
+
+typedef enum  {
+       CLIP_LIBRARY_VIEW_SORT_MODE_NONE,
+       CLIP_LIBRARY_VIEW_SORT_MODE_ABC
+} ClipLibraryViewSortMode;
+
+struct _ModelTimeSystemIface {
+       GTypeInterface parent_iface;
+       void (*calculate_pixel_step) (ModelTimeSystem* self, float inc, float pixel_min, float pixel_div);
+       gint64 (*xpos_to_time) (ModelTimeSystem* self, gint x);
+       gint64 (*xsize_to_time) (ModelTimeSystem* self, gint x);
+       gint (*time_to_xpos) (ModelTimeSystem* self, gint64 time);
+       gint64 (*get_pixel_snap_time) (ModelTimeSystem* self);
+       gint (*time_to_xsize) (ModelTimeSystem* self, gint64 time);
+       float (*get_pixel_percentage) (ModelTimeSystem* self);
+       gint (*get_start_token) (ModelTimeSystem* self, gint xsize);
+       gint (*get_next_position) (ModelTimeSystem* self, gint token);
+       gint (*get_pixel_height) (ModelTimeSystem* self, gint token);
+       char* (*get_display_string) (ModelTimeSystem* self, gint token);
+       gint (*frame_to_xsize) (ModelTimeSystem* self, gint frame);
+       gint (*xsize_to_frame) (ModelTimeSystem* self, gint xsize);
+       char* (*get_time_string) (ModelTimeSystem* self, gint64 time);
+       char* (*get_time_duration) (ModelTimeSystem* self, gint64 time);
+};
+
+struct _ClipLibraryViewPrivate {
+       ModelProject* project;
+       GtkTreeView* tree_view;
+       GtkTreeSelection* selection;
+       GtkLabel* label;
+       GtkListStore* list_store;
+       gint num_clipfiles;
+       GeeArrayList* files_dragging;
+       GtkIconTheme* icon_theme;
+       GdkPixbuf* default_audio_icon;
+       GdkPixbuf* default_video_icon;
+       GdkPixbuf* default_error_icon;
+       ClipLibraryViewSortMode sort_mode;
+       ModelTimeSystem* time_provider;
+};
+
+typedef enum  {
+       CLIP_LIBRARY_VIEW_COLUMN_TYPE_THUMBNAIL,
+       CLIP_LIBRARY_VIEW_COLUMN_TYPE_NAME,
+       CLIP_LIBRARY_VIEW_COLUMN_TYPE_DURATION,
+       CLIP_LIBRARY_VIEW_COLUMN_TYPE_FILENAME
+} ClipLibraryViewColumnType;
+
+struct _Fraction {
+       gint numerator;
+       gint denominator;
+};
+
+struct _ModelTempoInformationIface {
+       GTypeInterface parent_iface;
+       void (*get_time_signature) (ModelTempoInformation* self, Fraction* result);
+       gint (*get_bpm) (ModelTempoInformation* self);
+};
+
+typedef enum  {
+       LOGGING_FACILITY_SIGNAL_HANDLERS,
+       LOGGING_FACILITY_DEVELOPER_WARNINGS,
+       LOGGING_FACILITY_GRAPH,
+       LOGGING_FACILITY_LOADING,
+       LOGGING_FACILITY_IMPORT,
+       LOGGING_FACILITY_SINGLEDECODEBIN
+} LoggingFacility;
+
+typedef enum  {
+       LOGGING_LEVEL_CRITICAL,
+       LOGGING_LEVEL_HIGH,
+       LOGGING_LEVEL_MEDIUM,
+       LOGGING_LEVEL_LOW,
+       LOGGING_LEVEL_INFO,
+       LOGGING_LEVEL_VERBOSE
+} LoggingLevel;
+
+struct _TimeCode {
+       gint hour;
+       gint minute;
+       gint second;
+       gint frame;
+       gboolean drop_code;
+};
+
+struct _ModelProject {
+       GObject parent_instance;
+       ModelProjectPrivate * priv;
+       GeeArrayList* tracks;
+       GeeArrayList* inactive_tracks;
+       GeeArrayList* clipfiles;
+       ViewMediaEngine* media_engine;
+       char* project_file;
+       ModelProjectLoader* loader;
+       ModelUndoManager* undo_manager;
+       ModelLibraryImporter* importer;
+       Fraction default_framerate;
+       gboolean click_during_play;
+       gboolean click_during_record;
+       double click_volume;
+       gboolean library_visible;
+       gint library_width;
+       gboolean snap_to_clip;
+};
+
+struct _ModelProjectClass {
+       GObjectClass parent_class;
+       void (*get_clip_time) (ModelProject* self, ModelClipFile* f, TimeCode* result);
+       char* (*get_project_file) (ModelProject* self);
+       void (*do_append) (ModelProject* self, ModelTrack* track, ModelClipFile* clipfile, const char* name, gint64 insert_time);
+       void (*add_track) (ModelProject* self, ModelTrack* track);
+       void (*insert_track) (ModelProject* self, gint index, ModelTrack* track);
+       void (*load) (ModelProject* self, const char* fname);
+       void (*save) (ModelProject* self, const char* filename);
+       char* (*get_app_name) (ModelProject* self);
+       void (*load_complete) (ModelProject* self);
+};
+
+struct _ModelClipFile {
+       GObject parent_instance;
+       ModelClipFilePrivate * priv;
+       char* filename;
+       GstCaps* video_caps;
+       GstCaps* audio_caps;
+       GdkPixbuf* thumbnail;
+};
+
+struct _ModelClipFileClass {
+       GObjectClass parent_class;
+};
+
+typedef enum  {
+       MODEL_MEDIA_TYPE_AUDIO,
+       MODEL_MEDIA_TYPE_VIDEO
+} ModelMediaType;
+
+
+extern GtkMenu* clip_library_view_context_menu;
+GtkMenu* clip_library_view_context_menu = NULL;
+static gpointer clip_library_view_parent_class = NULL;
+
+GType clip_library_view_get_type (void);
+GType model_project_get_type (void);
+static GType clip_library_view_sort_mode_get_type (void) G_GNUC_UNUSED;
+GType model_time_system_get_type (void);
+#define CLIP_LIBRARY_VIEW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_CLIP_LIBRARY_VIEW, ClipLibraryViewPrivate))
+enum  {
+       CLIP_LIBRARY_VIEW_DUMMY_PROPERTY
+};
+static GType clip_library_view_column_type_get_type (void) G_GNUC_UNUSED;
+static GtkTreeViewColumn* clip_library_view_add_column (ClipLibraryView* self, ClipLibraryViewColumnType c);
+static gint clip_library_view_name_sort (ClipLibraryView* self, GtkTreeModel* model, GtkTreeIter* a, GtkTreeIter* b);
+static gint _clip_library_view_name_sort_gtk_tree_iter_compare_func (GtkTreeModel* model, GtkTreeIter* a, GtkTreeIter* b, gpointer self);
+void parse_color (const char* color, GdkColor* result);
+GType model_clip_file_get_type (void);
+static void clip_library_view_on_clipfile_added (ClipLibraryView* self, ModelClipFile* f);
+static void _clip_library_view_on_clipfile_added_model_project_clipfile_added (ModelProject* _sender, ModelClipFile* c, gpointer self);
+void clip_library_view_on_clipfile_removed (ClipLibraryView* self, ModelClipFile* f);
+static void _clip_library_view_on_clipfile_removed_model_project_clipfile_removed (ModelProject* _sender, ModelClipFile* clip_file, gpointer self);
+static void clip_library_view_on_remove_all_rows (ClipLibraryView* self);
+static void _clip_library_view_on_remove_all_rows_model_project_cleared (ModelProject* _sender, gpointer self);
+GType fraction_get_type (void);
+Fraction* fraction_dup (const Fraction* self);
+void fraction_free (Fraction* self);
+GType model_tempo_information_get_type (void);
+static void clip_library_view_on_time_signature_changed (ClipLibraryView* self, Fraction* time_signature);
+static void _clip_library_view_on_time_signature_changed_model_tempo_information_time_signature_changed (ModelTempoInformation* _sender, Fraction* time_signature, gpointer self);
+static void clip_library_view_on_drag_begin (ClipLibraryView* self, GdkDragContext* c);
+static void _clip_library_view_on_drag_begin_gtk_widget_drag_begin (GtkWidget* _sender, GdkDragContext* context, gpointer self);
+static void clip_library_view_on_drag_data_get (ClipLibraryView* self, GdkDragContext* context, GtkSelectionData* data, guint info, guint time);
+static void _clip_library_view_on_drag_data_get_gtk_widget_drag_data_get (GtkWidget* _sender, GdkDragContext* context, GtkSelectionData* selection_data, guint info, guint time_, gpointer self);
+static void clip_library_view_on_cursor_changed (ClipLibraryView* self);
+static void _clip_library_view_on_cursor_changed_gtk_tree_view_cursor_changed (GtkTreeView* _sender, gpointer self);
+static gboolean clip_library_view_on_button_pressed (ClipLibraryView* self, GdkEventButton* b);
+static gboolean _clip_library_view_on_button_pressed_gtk_widget_button_press_event (GtkWidget* _sender, GdkEventButton* event, gpointer self);
+static gboolean clip_library_view_on_button_released (ClipLibraryView* self, GdkEventButton* b);
+static gboolean _clip_library_view_on_button_released_gtk_widget_button_release_event (GtkWidget* _sender, GdkEventButton* event, gpointer self);
+ClipLibraryView* clip_library_view_new (ModelProject* p, ModelTimeSystem* time_provider, const char* drag_message, GdkDragAction actions);
+ClipLibraryView* clip_library_view_construct (GType object_type, ModelProject* p, ModelTimeSystem* time_provider, const char* drag_message, GdkDragAction actions);
+static GtkTreePath* clip_library_view_find_first_selected (ClipLibraryView* self);
+GType logging_facility_get_type (void);
+GType logging_level_get_type (void);
+void logging_emit (GObject* object, LoggingFacility facility, LoggingLevel level, const char* message);
+gboolean clip_library_view_has_selection (ClipLibraryView* self);
+void clip_library_view_unselect_all (ClipLibraryView* self);
+GType model_track_get_type (void);
+void model_project_create_clip_importer (ModelProject* self, ModelTrack* track, gboolean timeline_add, gint64 time_to_add, gboolean both_tracks, GtkWindow* progress_window_parent, gint number);
+GType time_code_get_type (void);
+TimeCode* time_code_dup (const TimeCode* self);
+void time_code_free (TimeCode* self);
+GType view_media_engine_get_type (void);
+GType model_project_loader_get_type (void);
+gpointer model_undo_manager_ref (gpointer instance);
+void model_undo_manager_unref (gpointer instance);
+GParamSpec* model_param_spec_undo_manager (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void model_value_set_undo_manager (GValue* value, gpointer v_object);
+void model_value_take_undo_manager (GValue* value, gpointer v_object);
+gpointer model_value_get_undo_manager (const GValue* value);
+GType model_undo_manager_get_type (void);
+GType model_library_importer_get_type (void);
+void model_library_importer_add_file (ModelLibraryImporter* self, const char* filename, GError** error);
+void model_library_importer_start (ModelLibraryImporter* self, GError** error);
+static void clip_library_view_real_drag_data_received (GtkWidget* base, GdkDragContext* context, gint x, gint y, GtkSelectionData* selection_data, guint drag_info, guint time);
+static void _vala_array_add1 (char*** array, int* length, int* size, char* value);
+static void _g_list_free_gtk_tree_path_free (GList* self);
+static gint clip_library_view_get_selected_rows (ClipLibraryView* self, GList** paths);
+gboolean model_clip_file_is_online (ModelClipFile* self);
+GType model_media_type_get_type (void);
+gboolean model_clip_file_is_of_type (ModelClipFile* self, ModelMediaType t);
+char* isolate_filename (const char* path);
+char* model_time_system_get_time_duration (ModelTimeSystem* self, gint64 time);
+gint64 model_clip_file_get_length (ModelClipFile* self);
+static void clip_library_view_update_iter (ClipLibraryView* self, GtkTreeIter* it, ModelClipFile* clip_file);
+static gint clip_library_view_find_clipfile (ClipLibraryView* self, ModelClipFile* f, GtkTreeIter* iter);
+static gboolean clip_library_view_remove_row (ClipLibraryView* self, GtkTreeIter* it);
+ModelClipFile* model_project_find_clipfile (ModelProject* self, const char* filename);
+gboolean model_project_clipfile_on_track (ModelProject* self, const char* filename);
+GtkResponseType dialog_utils_delete_cancel (const char* message);
+void model_project_remove_clipfile (ModelProject* self, const char* filename);
+char* model_project_get_audio_path (ModelProject* self);
+GtkResponseType dialog_utils_delete_keep (const char* message);
+void model_undo_manager_reset (ModelUndoManager* self);
+static void clip_library_view_delete_row (ClipLibraryView* self, GtkTreeModel* model, GtkTreePath* path);
+GeeArrayList* clip_library_view_get_selected_files (ClipLibraryView* self);
+void model_undo_manager_start_transaction (ModelUndoManager* self, const char* description);
+void model_undo_manager_end_transaction (ModelUndoManager* self, const char* description);
+void clip_library_view_delete_selection (ClipLibraryView* self);
+void clip_library_view_select_all (ClipLibraryView* self);
+gint stricmp (const char* str1, const char* str2);
+static void clip_library_view_finalize (GObject* obj);
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static gint _vala_array_length (gpointer array);
+static int _vala_strcmp0 (const char * str1, const char * str2);
+
+extern const GtkTargetEntry drag_target_entries[1];
+
+
+static GType clip_library_view_sort_mode_get_type (void) {
+       static volatile gsize clip_library_view_sort_mode_type_id__volatile = 0;
+       if (g_once_init_enter (&clip_library_view_sort_mode_type_id__volatile)) {
+               static const GEnumValue values[] = {{CLIP_LIBRARY_VIEW_SORT_MODE_NONE, "CLIP_LIBRARY_VIEW_SORT_MODE_NONE", "none"}, {CLIP_LIBRARY_VIEW_SORT_MODE_ABC, "CLIP_LIBRARY_VIEW_SORT_MODE_ABC", "abc"}, {0, NULL, NULL}};
+               GType clip_library_view_sort_mode_type_id;
+               clip_library_view_sort_mode_type_id = g_enum_register_static ("ClipLibraryViewSortMode", values);
+               g_once_init_leave (&clip_library_view_sort_mode_type_id__volatile, clip_library_view_sort_mode_type_id);
+       }
+       return clip_library_view_sort_mode_type_id__volatile;
+}
+
+
+static GType clip_library_view_column_type_get_type (void) {
+       static volatile gsize clip_library_view_column_type_type_id__volatile = 0;
+       if (g_once_init_enter (&clip_library_view_column_type_type_id__volatile)) {
+               static const GEnumValue values[] = {{CLIP_LIBRARY_VIEW_COLUMN_TYPE_THUMBNAIL, "CLIP_LIBRARY_VIEW_COLUMN_TYPE_THUMBNAIL", "thumbnail"}, {CLIP_LIBRARY_VIEW_COLUMN_TYPE_NAME, "CLIP_LIBRARY_VIEW_COLUMN_TYPE_NAME", "name"}, {CLIP_LIBRARY_VIEW_COLUMN_TYPE_DURATION, "CLIP_LIBRARY_VIEW_COLUMN_TYPE_DURATION", "duration"}, {CLIP_LIBRARY_VIEW_COLUMN_TYPE_FILENAME, "CLIP_LIBRARY_VIEW_COLUMN_TYPE_FILENAME", "filename"}, {0, NULL, NULL}};
+               GType clip_library_view_column_type_type_id;
+               clip_library_view_column_type_type_id = g_enum_register_static ("ClipLibraryViewColumnType", values);
+               g_once_init_leave (&clip_library_view_column_type_type_id__volatile, clip_library_view_column_type_type_id);
+       }
+       return clip_library_view_column_type_type_id__volatile;
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+#line 480 "ClipLibraryView.vala"
+static gint _clip_library_view_name_sort_gtk_tree_iter_compare_func (GtkTreeModel* model, GtkTreeIter* a, GtkTreeIter* b, gpointer self) {
+#line 422 "ClipLibraryView.c"
+       gint result;
+       result = clip_library_view_name_sort (self, model, a, b);
+       return result;
+}
+
+
+#line 332 "ClipLibraryView.vala"
+static void _clip_library_view_on_clipfile_added_model_project_clipfile_added (ModelProject* _sender, ModelClipFile* c, gpointer self) {
+#line 431 "ClipLibraryView.c"
+       clip_library_view_on_clipfile_added (self, c);
+}
+
+
+#line 372 "ClipLibraryView.vala"
+static void _clip_library_view_on_clipfile_removed_model_project_clipfile_removed (ModelProject* _sender, ModelClipFile* clip_file, gpointer self) {
+#line 438 "ClipLibraryView.c"
+       clip_library_view_on_clipfile_removed (self, clip_file);
+}
+
+
+#line 394 "ClipLibraryView.vala"
+static void _clip_library_view_on_remove_all_rows_model_project_cleared (ModelProject* _sender, gpointer self) {
+#line 445 "ClipLibraryView.c"
+       clip_library_view_on_remove_all_rows (self);
+}
+
+
+#line 406 "ClipLibraryView.vala"
+static void _clip_library_view_on_time_signature_changed_model_tempo_information_time_signature_changed (ModelTempoInformation* _sender, Fraction* time_signature, gpointer self) {
+#line 452 "ClipLibraryView.c"
+       clip_library_view_on_time_signature_changed (self, time_signature);
+}
+
+
+#line 264 "ClipLibraryView.vala"
+static void _clip_library_view_on_drag_begin_gtk_widget_drag_begin (GtkWidget* _sender, GdkDragContext* context, gpointer self) {
+#line 459 "ClipLibraryView.c"
+       clip_library_view_on_drag_begin (self, context);
+}
+
+
+#line 239 "ClipLibraryView.vala"
+static void _clip_library_view_on_drag_data_get_gtk_widget_drag_data_get (GtkWidget* _sender, GdkDragContext* context, GtkSelectionData* selection_data, guint info, guint time_, gpointer self) {
+#line 466 "ClipLibraryView.c"
+       clip_library_view_on_drag_data_get (self, context, selection_data, info, time_);
+}
+
+
+#line 205 "ClipLibraryView.vala"
+static void _clip_library_view_on_cursor_changed_gtk_tree_view_cursor_changed (GtkTreeView* _sender, gpointer self) {
+#line 473 "ClipLibraryView.c"
+       clip_library_view_on_cursor_changed (self);
+}
+
+
+#line 124 "ClipLibraryView.vala"
+static gboolean _clip_library_view_on_button_pressed_gtk_widget_button_press_event (GtkWidget* _sender, GdkEventButton* event, gpointer self) {
+#line 480 "ClipLibraryView.c"
+       gboolean result;
+       result = clip_library_view_on_button_pressed (self, event);
+       return result;
+}
+
+
+#line 166 "ClipLibraryView.vala"
+static gboolean _clip_library_view_on_button_released_gtk_widget_button_release_event (GtkWidget* _sender, GdkEventButton* event, gpointer self) {
+#line 489 "ClipLibraryView.c"
+       gboolean result;
+       result = clip_library_view_on_button_released (self, event);
+       return result;
+}
+
+
+#line 42 "ClipLibraryView.vala"
+ClipLibraryView* clip_library_view_construct (GType object_type, ModelProject* p, ModelTimeSystem* time_provider, const char* drag_message, GdkDragAction actions) {
+#line 498 "ClipLibraryView.c"
+       GError * _inner_error_;
+       ClipLibraryView * self;
+       ModelProject* _tmp0_;
+       ModelTimeSystem* _tmp1_;
+       GtkIconTheme* _tmp2_;
+       GtkListStore* _tmp3_;
+       GtkTreeView* _tmp4_;
+       GtkTreeViewColumn* _tmp5_;
+       GtkTreeViewColumn* name_column;
+       GtkTreeViewColumn* _tmp6_;
+       GdkColor _tmp11_;
+       GdkColor _tmp10_ = {0};
+       GdkColor _tmp13_;
+       GdkColor _tmp12_ = {0};
+       GtkTreeSelection* _tmp14_;
+#line 42 "ClipLibraryView.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (p), NULL);
+#line 42 "ClipLibraryView.vala"
+       g_return_val_if_fail (MODEL_IS_TIME_SYSTEM (time_provider), NULL);
+#line 518 "ClipLibraryView.c"
+       _inner_error_ = NULL;
+       self = g_object_newv (object_type, 0, NULL);
+#line 44 "ClipLibraryView.vala"
+       gtk_drag_dest_set (GTK_WIDGET (self), GTK_DEST_DEFAULT_ALL, drag_target_entries, G_N_ELEMENTS (drag_target_entries), GDK_ACTION_COPY);
+#line 45 "ClipLibraryView.vala"
+       self->priv->project = (_tmp0_ = _g_object_ref0 (p), _g_object_unref0 (self->priv->project), _tmp0_);
+#line 46 "ClipLibraryView.vala"
+       self->priv->time_provider = (_tmp1_ = _g_object_ref0 (time_provider), _g_object_unref0 (self->priv->time_provider), _tmp1_);
+#line 48 "ClipLibraryView.vala"
+       self->priv->icon_theme = (_tmp2_ = _g_object_ref0 (gtk_icon_theme_get_default ()), _g_object_unref0 (self->priv->icon_theme), _tmp2_);
+#line 50 "ClipLibraryView.vala"
+       self->priv->list_store = (_tmp3_ = gtk_list_store_new (4, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, -1, NULL), _g_object_unref0 (self->priv->list_store), _tmp3_);
+#line 53 "ClipLibraryView.vala"
+       self->priv->tree_view = (_tmp4_ = g_object_ref_sink ((GtkTreeView*) gtk_tree_view_new_with_model (GTK_TREE_MODEL (self->priv->list_store))), _g_object_unref0 (self->priv->tree_view), _tmp4_);
+#line 55 "ClipLibraryView.vala"
+       _tmp5_ = clip_library_view_add_column (self, CLIP_LIBRARY_VIEW_COLUMN_TYPE_THUMBNAIL);
+#line 535 "ClipLibraryView.c"
+       _g_object_unref0 (_tmp5_);
+#line 56 "ClipLibraryView.vala"
+       name_column = clip_library_view_add_column (self, CLIP_LIBRARY_VIEW_COLUMN_TYPE_NAME);
+#line 57 "ClipLibraryView.vala"
+       _tmp6_ = clip_library_view_add_column (self, CLIP_LIBRARY_VIEW_COLUMN_TYPE_DURATION);
+#line 541 "ClipLibraryView.c"
+       _g_object_unref0 (_tmp6_);
+#line 58 "ClipLibraryView.vala"
+       gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (self->priv->list_store), _clip_library_view_name_sort_gtk_tree_iter_compare_func, g_object_ref (self), g_object_unref);
+#line 59 "ClipLibraryView.vala"
+       gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (self->priv->list_store), gtk_tree_view_column_get_sort_column_id (name_column), GTK_SORT_ASCENDING);
+#line 61 "ClipLibraryView.vala"
+       self->priv->num_clipfiles = 0;
+#line 62 "ClipLibraryView.vala"
+       if (drag_message != NULL) {
+#line 551 "ClipLibraryView.c"
+               GtkLabel* _tmp7_;
+               GdkColor _tmp9_;
+               GdkColor _tmp8_ = {0};
+#line 63 "ClipLibraryView.vala"
+               self->priv->label = (_tmp7_ = g_object_ref_sink ((GtkLabel*) gtk_label_new (drag_message)), _g_object_unref0 (self->priv->label), _tmp7_);
+#line 64 "ClipLibraryView.vala"
+               gtk_widget_modify_fg (GTK_WIDGET (self->priv->label), GTK_STATE_NORMAL, (_tmp9_ = (parse_color ("#fff", &_tmp8_), _tmp8_), &_tmp9_));
+#line 559 "ClipLibraryView.c"
+       }
+#line 67 "ClipLibraryView.vala"
+       gtk_widget_modify_bg (GTK_WIDGET (self), GTK_STATE_NORMAL, (_tmp11_ = (parse_color ("#444", &_tmp10_), _tmp10_), &_tmp11_));
+#line 68 "ClipLibraryView.vala"
+       gtk_widget_modify_base (GTK_WIDGET (self->priv->tree_view), GTK_STATE_NORMAL, (_tmp13_ = (parse_color ("#444", &_tmp12_), _tmp12_), &_tmp13_));
+#line 70 "ClipLibraryView.vala"
+       gtk_tree_view_set_headers_visible (self->priv->tree_view, FALSE);
+#line 71 "ClipLibraryView.vala"
+       g_signal_connect_object (self->priv->project, "clipfile-added", (GCallback) _clip_library_view_on_clipfile_added_model_project_clipfile_added, self, 0);
+#line 72 "ClipLibraryView.vala"
+       g_signal_connect_object (self->priv->project, "clipfile-removed", (GCallback) _clip_library_view_on_clipfile_removed_model_project_clipfile_removed, self, 0);
+#line 73 "ClipLibraryView.vala"
+       g_signal_connect_object (self->priv->project, "cleared", (GCallback) _clip_library_view_on_remove_all_rows_model_project_cleared, self, 0);
+#line 74 "ClipLibraryView.vala"
+       g_signal_connect_object (MODEL_TEMPO_INFORMATION (self->priv->project), "time-signature-changed", (GCallback) _clip_library_view_on_time_signature_changed_model_tempo_information_time_signature_changed, self, 0);
+#line 76 "ClipLibraryView.vala"
+       gtk_drag_source_set (GTK_WIDGET (self->priv->tree_view), GDK_BUTTON1_MASK, drag_target_entries, G_N_ELEMENTS (drag_target_entries), actions);
+#line 77 "ClipLibraryView.vala"
+       g_signal_connect_object (GTK_WIDGET (self->priv->tree_view), "drag-begin", (GCallback) _clip_library_view_on_drag_begin_gtk_widget_drag_begin, self, 0);
+#line 78 "ClipLibraryView.vala"
+       g_signal_connect_object (GTK_WIDGET (self->priv->tree_view), "drag-data-get", (GCallback) _clip_library_view_on_drag_data_get_gtk_widget_drag_data_get, self, 0);
+#line 79 "ClipLibraryView.vala"
+       g_signal_connect_object (self->priv->tree_view, "cursor-changed", (GCallback) _clip_library_view_on_cursor_changed_gtk_tree_view_cursor_changed, self, 0);
+#line 81 "ClipLibraryView.vala"
+       self->priv->selection = (_tmp14_ = _g_object_ref0 (gtk_tree_view_get_selection (self->priv->tree_view)), _g_object_unref0 (self->priv->selection), _tmp14_);
+#line 82 "ClipLibraryView.vala"
+       gtk_tree_selection_set_mode (self->priv->selection, GTK_SELECTION_MULTIPLE);
+#line 83 "ClipLibraryView.vala"
+       if (self->priv->label != NULL) {
+#line 84 "ClipLibraryView.vala"
+               gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->priv->label));
+#line 591 "ClipLibraryView.c"
+       }
+#line 92 "ClipLibraryView.vala"
+       g_signal_connect_object (GTK_WIDGET (self->priv->tree_view), "button-press-event", (GCallback) _clip_library_view_on_button_pressed_gtk_widget_button_press_event, self, 0);
+#line 93 "ClipLibraryView.vala"
+       g_signal_connect_object (GTK_WIDGET (self->priv->tree_view), "button-release-event", (GCallback) _clip_library_view_on_button_released_gtk_widget_button_release_event, self, 0);
+#line 597 "ClipLibraryView.c"
+       {
+               GdkPixbuf* _tmp15_;
+               GdkPixbuf* _tmp16_;
+               GdkPixbuf* _tmp17_;
+               GdkPixbuf* _tmp18_;
+               GdkPixbuf* _tmp19_;
+               GdkPixbuf* _tmp20_;
+#line 97 "ClipLibraryView.vala"
+               _tmp15_ = gtk_icon_theme_load_icon (self->priv->icon_theme, "audio-x-generic", 32, (GtkIconLookupFlags) 0, &_inner_error_);
+#line 607 "ClipLibraryView.c"
+               if (_inner_error_ != NULL) {
+                       goto __catch0_g_error;
+               }
+#line 96 "ClipLibraryView.vala"
+               self->priv->default_audio_icon = (_tmp16_ = _g_object_ref0 (_tmp15_), _g_object_unref0 (self->priv->default_audio_icon), _tmp16_);
+#line 99 "ClipLibraryView.vala"
+               _tmp17_ = gtk_icon_theme_load_icon (self->priv->icon_theme, "video-x-generic", 32, (GtkIconLookupFlags) 0, &_inner_error_);
+#line 615 "ClipLibraryView.c"
+               if (_inner_error_ != NULL) {
+                       goto __catch0_g_error;
+               }
+#line 98 "ClipLibraryView.vala"
+               self->priv->default_video_icon = (_tmp18_ = _g_object_ref0 (_tmp17_), _g_object_unref0 (self->priv->default_video_icon), _tmp18_);
+#line 101 "ClipLibraryView.vala"
+               _tmp19_ = gtk_icon_theme_load_icon (self->priv->icon_theme, "error", 32, (GtkIconLookupFlags) 0, &_inner_error_);
+#line 623 "ClipLibraryView.c"
+               if (_inner_error_ != NULL) {
+                       goto __catch0_g_error;
+               }
+#line 100 "ClipLibraryView.vala"
+               self->priv->default_error_icon = (_tmp20_ = _g_object_ref0 (_tmp19_), _g_object_unref0 (self->priv->default_error_icon), _tmp20_);
+#line 629 "ClipLibraryView.c"
+       }
+       goto __finally0;
+       __catch0_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+                       _g_error_free0 (e);
+               }
+       }
+       __finally0:
+       if (_inner_error_ != NULL) {
+               _g_object_unref0 (name_column);
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return NULL;
+       }
+#line 106 "ClipLibraryView.vala"
+       self->priv->sort_mode = CLIP_LIBRARY_VIEW_SORT_MODE_ABC;
+#line 650 "ClipLibraryView.c"
+       _g_object_unref0 (name_column);
+       return self;
+}
+
+
+#line 42 "ClipLibraryView.vala"
+ClipLibraryView* clip_library_view_new (ModelProject* p, ModelTimeSystem* time_provider, const char* drag_message, GdkDragAction actions) {
+#line 42 "ClipLibraryView.vala"
+       return clip_library_view_construct (TYPE_CLIP_LIBRARY_VIEW, p, time_provider, drag_message, actions);
+#line 660 "ClipLibraryView.c"
+}
+
+
+#line 109 "ClipLibraryView.vala"
+static GtkTreePath* clip_library_view_find_first_selected (ClipLibraryView* self) {
+#line 666 "ClipLibraryView.c"
+       GtkTreePath* result = NULL;
+       GtkTreeIter it = {0};
+       GtkTreeModel* model;
+       gboolean b;
+#line 109 "ClipLibraryView.vala"
+       g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), NULL);
+#line 111 "ClipLibraryView.vala"
+       model = _g_object_ref0 (gtk_tree_view_get_model (self->priv->tree_view));
+#line 113 "ClipLibraryView.vala"
+       b = gtk_tree_model_get_iter_first (model, &it);
+#line 114 "ClipLibraryView.vala"
+       while (TRUE) {
+#line 679 "ClipLibraryView.c"
+               GtkTreePath* path;
+#line 114 "ClipLibraryView.vala"
+               if (!b) {
+#line 114 "ClipLibraryView.vala"
+                       break;
+#line 685 "ClipLibraryView.c"
+               }
+#line 115 "ClipLibraryView.vala"
+               path = gtk_tree_model_get_path (model, &it);
+#line 116 "ClipLibraryView.vala"
+               if (gtk_tree_selection_path_is_selected (self->priv->selection, path)) {
+#line 691 "ClipLibraryView.c"
+                       result = path;
+                       _g_object_unref0 (model);
+#line 117 "ClipLibraryView.vala"
+                       return result;
+#line 696 "ClipLibraryView.c"
+               }
+#line 119 "ClipLibraryView.vala"
+               b = gtk_tree_model_iter_next (model, &it);
+#line 700 "ClipLibraryView.c"
+               _gtk_tree_path_free0 (path);
+       }
+       result = NULL;
+       _g_object_unref0 (model);
+#line 121 "ClipLibraryView.vala"
+       return result;
+#line 707 "ClipLibraryView.c"
+}
+
+
+#line 124 "ClipLibraryView.vala"
+static gboolean clip_library_view_on_button_pressed (ClipLibraryView* self, GdkEventButton* b) {
+#line 713 "ClipLibraryView.c"
+       gboolean result = FALSE;
+       GtkTreePath* path;
+       gint cell_x = 0;
+       gint cell_y = 0;
+       GtkTreePath* _tmp1_;
+       GtkTreePath* _tmp0_ = NULL;
+       gboolean shift_pressed;
+       gboolean control_pressed;
+       gboolean _tmp2_ = FALSE;
+#line 124 "ClipLibraryView.vala"
+       g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), FALSE);
+#line 125 "ClipLibraryView.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_button_pressed");
+#line 727 "ClipLibraryView.c"
+       path = NULL;
+#line 131 "ClipLibraryView.vala"
+       gtk_tree_view_get_path_at_pos (self->priv->tree_view, (gint) (*b).x, (gint) (*b).y, &_tmp0_, NULL, &cell_x, &cell_y);
+#line 131 "ClipLibraryView.vala"
+       path = (_tmp1_ = _tmp0_, _gtk_tree_path_free0 (path), _tmp1_);
+#line 133 "ClipLibraryView.vala"
+       if (path == NULL) {
+#line 134 "ClipLibraryView.vala"
+               gtk_tree_selection_unselect_all (self->priv->selection);
+#line 737 "ClipLibraryView.c"
+               result = TRUE;
+               _gtk_tree_path_free0 (path);
+#line 135 "ClipLibraryView.vala"
+               return result;
+#line 742 "ClipLibraryView.c"
+       }
+#line 138 "ClipLibraryView.vala"
+       shift_pressed = ((*b).state & GDK_SHIFT_MASK) != 0;
+#line 139 "ClipLibraryView.vala"
+       control_pressed = ((*b).state & GDK_CONTROL_MASK) != 0;
+#line 141 "ClipLibraryView.vala"
+       if (!control_pressed) {
+#line 142 "ClipLibraryView.vala"
+               _tmp2_ = !shift_pressed;
+#line 752 "ClipLibraryView.c"
+       } else {
+#line 141 "ClipLibraryView.vala"
+               _tmp2_ = FALSE;
+#line 756 "ClipLibraryView.c"
+       }
+#line 141 "ClipLibraryView.vala"
+       if (_tmp2_) {
+#line 143 "ClipLibraryView.vala"
+               if (!gtk_tree_selection_path_is_selected (self->priv->selection, path)) {
+#line 144 "ClipLibraryView.vala"
+                       gtk_tree_selection_unselect_all (self->priv->selection);
+#line 764 "ClipLibraryView.c"
+               }
+       } else {
+#line 146 "ClipLibraryView.vala"
+               if (shift_pressed) {
+#line 769 "ClipLibraryView.c"
+                       GtkTreePath* first;
+#line 147 "ClipLibraryView.vala"
+                       first = clip_library_view_find_first_selected (self);
+#line 149 "ClipLibraryView.vala"
+                       if (first != NULL) {
+#line 150 "ClipLibraryView.vala"
+                               gtk_tree_selection_select_range (self->priv->selection, first, path);
+#line 777 "ClipLibraryView.c"
+                       }
+                       _gtk_tree_path_free0 (first);
+               }
+       }
+#line 153 "ClipLibraryView.vala"
+       gtk_tree_selection_select_path (self->priv->selection, path);
+#line 155 "ClipLibraryView.vala"
+       if ((*b).button == 3) {
+#line 156 "ClipLibraryView.vala"
+               g_signal_emit_by_name (self, "selection-changed", TRUE);
+#line 157 "ClipLibraryView.vala"
+               gtk_menu_shell_select_first (GTK_MENU_SHELL (clip_library_view_context_menu), TRUE);
+#line 158 "ClipLibraryView.vala"
+               gtk_menu_popup (clip_library_view_context_menu, NULL, NULL, NULL, NULL, (guint) 0, (*b).time);
+#line 792 "ClipLibraryView.c"
+       } else {
+#line 160 "ClipLibraryView.vala"
+               gtk_menu_popdown (clip_library_view_context_menu);
+#line 796 "ClipLibraryView.c"
+       }
+       result = TRUE;
+       _gtk_tree_path_free0 (path);
+#line 163 "ClipLibraryView.vala"
+       return result;
+#line 802 "ClipLibraryView.c"
+}
+
+
+#line 166 "ClipLibraryView.vala"
+static gboolean clip_library_view_on_button_released (ClipLibraryView* self, GdkEventButton* b) {
+#line 808 "ClipLibraryView.c"
+       gboolean result = FALSE;
+       GtkTreePath* path;
+       GtkTreeViewColumn* column;
+       gint cell_x = 0;
+       gint cell_y = 0;
+       GtkTreeViewColumn* _tmp3_;
+       GtkTreeViewColumn* _tmp2_ = NULL;
+       GtkTreePath* _tmp1_;
+       GtkTreePath* _tmp0_ = NULL;
+       gboolean _tmp4_ = FALSE;
+       gboolean shift_pressed;
+       gboolean control_pressed;
+       gboolean _tmp6_ = FALSE;
+#line 166 "ClipLibraryView.vala"
+       g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), FALSE);
+#line 167 "ClipLibraryView.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_button_released");
+#line 826 "ClipLibraryView.c"
+       path = NULL;
+       column = NULL;
+#line 174 "ClipLibraryView.vala"
+       (gtk_tree_view_get_path_at_pos (self->priv->tree_view, (gint) (*b).x, (gint) (*b).y, &_tmp0_, &_tmp2_, &cell_x, &cell_y), path = (_tmp1_ = _tmp0_, _gtk_tree_path_free0 (path), _tmp1_));
+#line 174 "ClipLibraryView.vala"
+       column = (_tmp3_ = _g_object_ref0 (_tmp2_), _g_object_unref0 (column), _tmp3_);
+#line 185 "ClipLibraryView.vala"
+       if (path == NULL) {
+#line 185 "ClipLibraryView.vala"
+               _tmp4_ = TRUE;
+#line 837 "ClipLibraryView.c"
+       } else {
+               gboolean _tmp5_ = FALSE;
+#line 186 "ClipLibraryView.vala"
+               if (cell_x == 0) {
+#line 186 "ClipLibraryView.vala"
+                       _tmp5_ = cell_y == 0;
+#line 844 "ClipLibraryView.c"
+               } else {
+#line 186 "ClipLibraryView.vala"
+                       _tmp5_ = FALSE;
+#line 848 "ClipLibraryView.c"
+               }
+#line 186 "ClipLibraryView.vala"
+               _tmp4_ = _tmp5_;
+#line 852 "ClipLibraryView.c"
+       }
+#line 185 "ClipLibraryView.vala"
+       if (_tmp4_) {
+#line 187 "ClipLibraryView.vala"
+               g_signal_emit_by_name (self, "selection-changed", FALSE);
+#line 858 "ClipLibraryView.c"
+               result = TRUE;
+               _gtk_tree_path_free0 (path);
+               _g_object_unref0 (column);
+#line 188 "ClipLibraryView.vala"
+               return result;
+#line 864 "ClipLibraryView.c"
+       }
+#line 191 "ClipLibraryView.vala"
+       shift_pressed = ((*b).state & GDK_SHIFT_MASK) != 0;
+#line 192 "ClipLibraryView.vala"
+       control_pressed = ((*b).state & GDK_CONTROL_MASK) != 0;
+#line 194 "ClipLibraryView.vala"
+       if (!control_pressed) {
+#line 195 "ClipLibraryView.vala"
+               _tmp6_ = !shift_pressed;
+#line 874 "ClipLibraryView.c"
+       } else {
+#line 194 "ClipLibraryView.vala"
+               _tmp6_ = FALSE;
+#line 878 "ClipLibraryView.c"
+       }
+#line 194 "ClipLibraryView.vala"
+       if (_tmp6_) {
+#line 196 "ClipLibraryView.vala"
+               if (gtk_tree_selection_path_is_selected (self->priv->selection, path)) {
+#line 197 "ClipLibraryView.vala"
+                       gtk_tree_selection_unselect_all (self->priv->selection);
+#line 886 "ClipLibraryView.c"
+               }
+       }
+#line 199 "ClipLibraryView.vala"
+       gtk_tree_selection_select_path (self->priv->selection, path);
+#line 200 "ClipLibraryView.vala"
+       g_signal_emit_by_name (self, "selection-changed", TRUE);
+#line 893 "ClipLibraryView.c"
+       result = TRUE;
+       _gtk_tree_path_free0 (path);
+       _g_object_unref0 (column);
+#line 202 "ClipLibraryView.vala"
+       return result;
+#line 899 "ClipLibraryView.c"
+}
+
+
+#line 205 "ClipLibraryView.vala"
+static void clip_library_view_on_cursor_changed (ClipLibraryView* self) {
+#line 205 "ClipLibraryView.vala"
+       g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
+#line 206 "ClipLibraryView.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_cursor_changed");
+#line 207 "ClipLibraryView.vala"
+       g_signal_emit_by_name (self, "selection-changed", clip_library_view_has_selection (self));
+#line 911 "ClipLibraryView.c"
+}
+
+
+#line 210 "ClipLibraryView.vala"
+void clip_library_view_unselect_all (ClipLibraryView* self) {
+#line 210 "ClipLibraryView.vala"
+       g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
+#line 211 "ClipLibraryView.vala"
+       gtk_tree_selection_unselect_all (self->priv->selection);
+#line 212 "ClipLibraryView.vala"
+       g_signal_emit_by_name (self, "selection-changed", FALSE);
+#line 923 "ClipLibraryView.c"
+}
+
+
+#line 215 "ClipLibraryView.vala"
+static void clip_library_view_real_drag_data_received (GtkWidget* base, GdkDragContext* context, gint x, gint y, GtkSelectionData* selection_data, guint drag_info, guint time) {
+#line 929 "ClipLibraryView.c"
+       ClipLibraryView * self;
+       GError * _inner_error_;
+       char** _tmp1_;
+       gint _a_size_;
+       gint a_length1;
+       char** _tmp0_;
+       char** a;
+       self = CLIP_LIBRARY_VIEW (base);
+#line 215 "ClipLibraryView.vala"
+       g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
+#line 215 "ClipLibraryView.vala"
+       g_return_if_fail (selection_data != NULL);
+#line 942 "ClipLibraryView.c"
+       _inner_error_ = NULL;
+#line 218 "ClipLibraryView.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_drag_data_received");
+#line 946 "ClipLibraryView.c"
+       a = (_tmp1_ = _tmp0_ = gtk_selection_data_get_uris (selection_data), a_length1 = _vala_array_length (_tmp0_), _a_size_ = a_length1, _tmp1_);
+#line 220 "ClipLibraryView.vala"
+       gtk_drag_finish (context, TRUE, FALSE, (guint32) time);
+#line 222 "ClipLibraryView.vala"
+       model_project_create_clip_importer (self->priv->project, NULL, FALSE, (gint64) 0, FALSE, GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))), a_length1);
+#line 952 "ClipLibraryView.c"
+       {
+               {
+                       char** s_collection;
+                       int s_collection_length1;
+                       int s_it;
+#line 225 "ClipLibraryView.vala"
+                       s_collection = a;
+#line 960 "ClipLibraryView.c"
+                       s_collection_length1 = a_length1;
+                       for (s_it = 0; s_it < a_length1; s_it = s_it + 1) {
+                               char* s;
+                               s = g_strdup (s_collection[s_it]);
+                               {
+                                       char* filename;
+                                       filename = NULL;
+                                       {
+                                               char* _tmp2_;
+                                               char* _tmp3_;
+#line 228 "ClipLibraryView.vala"
+                                               _tmp2_ = g_filename_from_uri (s, NULL, &_inner_error_);
+#line 973 "ClipLibraryView.c"
+                                               if (_inner_error_ != NULL) {
+                                                       if (_inner_error_->domain == G_CONVERT_ERROR) {
+                                                               goto __catch2_g_convert_error;
+                                                       }
+                                                       _g_free0 (s);
+                                                       _g_free0 (filename);
+                                                       a = (_vala_array_free (a, a_length1, (GDestroyNotify) g_free), NULL);
+                                                       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 228 "ClipLibraryView.vala"
+                                               filename = (_tmp3_ = _tmp2_, _g_free0 (filename), _tmp3_);
+#line 987 "ClipLibraryView.c"
+                                       }
+                                       goto __finally2;
+                                       __catch2_g_convert_error:
+                                       {
+                                               GError * e;
+                                               e = _inner_error_;
+                                               _inner_error_ = NULL;
+                                               {
+                                                       _g_error_free0 (e);
+                                                       _g_free0 (s);
+                                                       _g_free0 (filename);
+#line 229 "ClipLibraryView.vala"
+                                                       continue;
+#line 1001 "ClipLibraryView.c"
+                                               }
+                                       }
+                                       __finally2:
+                                       if (_inner_error_ != NULL) {
+                                               _g_free0 (s);
+                                               _g_free0 (filename);
+                                               goto __catch1_g_error;
+                                       }
+#line 230 "ClipLibraryView.vala"
+                                       model_library_importer_add_file (self->priv->project->importer, filename, &_inner_error_);
+#line 1012 "ClipLibraryView.c"
+                                       if (_inner_error_ != NULL) {
+                                               _g_free0 (s);
+                                               _g_free0 (filename);
+                                               goto __catch1_g_error;
+                                       }
+                                       _g_free0 (s);
+                                       _g_free0 (filename);
+                               }
+                       }
+               }
+#line 232 "ClipLibraryView.vala"
+               model_library_importer_start (self->priv->project->importer, &_inner_error_);
+#line 1025 "ClipLibraryView.c"
+               if (_inner_error_ != NULL) {
+                       goto __catch1_g_error;
+               }
+       }
+       goto __finally1;
+       __catch1_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+#line 234 "ClipLibraryView.vala"
+                       g_signal_emit_by_name (self->priv->project, "error-occurred", "Error importing", e->message);
+#line 1039 "ClipLibraryView.c"
+                       _g_error_free0 (e);
+               }
+       }
+       __finally1:
+       if (_inner_error_ != NULL) {
+               a = (_vala_array_free (a, a_length1, (GDestroyNotify) g_free), 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;
+       }
+       a = (_vala_array_free (a, a_length1, (GDestroyNotify) g_free), NULL);
+}
+
+
+static void _vala_array_add1 (char*** array, int* length, int* size, char* value) {
+       if ((*length) == (*size)) {
+               *size = (*size) ? (2 * (*size)) : 4;
+               *array = g_renew (char*, *array, (*size) + 1);
+       }
+       (*array)[(*length)++] = value;
+       (*array)[*length] = NULL;
+}
+
+
+#line 239 "ClipLibraryView.vala"
+static void clip_library_view_on_drag_data_get (ClipLibraryView* self, GdkDragContext* context, GtkSelectionData* data, guint info, guint time) {
+#line 1066 "ClipLibraryView.c"
+       GError * _inner_error_;
+       char* uri;
+       char** _tmp0_;
+       gint _uri_array_size_;
+       gint uri_array_length1;
+       char** uri_array;
+#line 239 "ClipLibraryView.vala"
+       g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
+#line 239 "ClipLibraryView.vala"
+       g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
+#line 239 "ClipLibraryView.vala"
+       g_return_if_fail (data != NULL);
+#line 1079 "ClipLibraryView.c"
+       _inner_error_ = NULL;
+#line 241 "ClipLibraryView.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_drag_data_get");
+#line 1083 "ClipLibraryView.c"
+       uri = NULL;
+       uri_array = (_tmp0_ = g_new0 (char*, 0 + 1), uri_array_length1 = 0, _uri_array_size_ = uri_array_length1, _tmp0_);
+       {
+               GeeIterator* _s_it;
+               _s_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->priv->files_dragging));
+#line 245 "ClipLibraryView.vala"
+               while (TRUE) {
+#line 1091 "ClipLibraryView.c"
+                       char* s;
+#line 245 "ClipLibraryView.vala"
+                       if (!gee_iterator_next (_s_it)) {
+#line 245 "ClipLibraryView.vala"
+                               break;
+#line 1097 "ClipLibraryView.c"
+                       }
+#line 245 "ClipLibraryView.vala"
+                       s = (char*) gee_iterator_get (_s_it);
+#line 1101 "ClipLibraryView.c"
+                       {
+                               char* _tmp1_;
+                               char* _tmp2_;
+#line 247 "ClipLibraryView.vala"
+                               _tmp1_ = g_filename_to_uri (s, NULL, &_inner_error_);
+#line 1107 "ClipLibraryView.c"
+                               if (_inner_error_ != NULL) {
+                                       if (_inner_error_->domain == G_CONVERT_ERROR) {
+                                               goto __catch3_g_convert_error;
+                                       }
+                                       _g_free0 (s);
+                                       _g_object_unref0 (_s_it);
+                                       _g_free0 (uri);
+                                       uri_array = (_vala_array_free (uri_array, uri_array_length1, (GDestroyNotify) g_free), NULL);
+                                       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 247 "ClipLibraryView.vala"
+                               uri = (_tmp2_ = _tmp1_, _g_free0 (uri), _tmp2_);
+#line 1122 "ClipLibraryView.c"
+                       }
+                       goto __finally3;
+                       __catch3_g_convert_error:
+                       {
+                               GError * e;
+                               e = _inner_error_;
+                               _inner_error_ = NULL;
+                               {
+                                       char* _tmp3_;
+#line 249 "ClipLibraryView.vala"
+                                       uri = (_tmp3_ = g_strdup (s), _g_free0 (uri), _tmp3_);
+#line 250 "ClipLibraryView.vala"
+                                       g_warning ("ClipLibraryView.vala:250: Cannot get URI for %s! (%s)\n", s, e->message);
+#line 1136 "ClipLibraryView.c"
+                                       _g_error_free0 (e);
+                               }
+                       }
+                       __finally3:
+                       if (_inner_error_ != NULL) {
+                               _g_free0 (s);
+                               _g_object_unref0 (_s_it);
+                               _g_free0 (uri);
+                               uri_array = (_vala_array_free (uri_array, uri_array_length1, (GDestroyNotify) g_free), 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 252 "ClipLibraryView.vala"
+                       _vala_array_add1 (&uri_array, &uri_array_length1, &_uri_array_size_, g_strdup (uri));
+#line 1152 "ClipLibraryView.c"
+                       _g_free0 (s);
+               }
+               _g_object_unref0 (_s_it);
+       }
+#line 254 "ClipLibraryView.vala"
+       gtk_selection_data_set_uris (data, uri_array);
+#line 256 "ClipLibraryView.vala"
+       gtk_drag_set_icon_default (context);
+#line 1161 "ClipLibraryView.c"
+       _g_free0 (uri);
+       uri_array = (_vala_array_free (uri_array, uri_array_length1, (GDestroyNotify) g_free), NULL);
+}
+
+
+static void _g_list_free_gtk_tree_path_free (GList* self) {
+       g_list_foreach (self, (GFunc) gtk_tree_path_free, NULL);
+       g_list_free (self);
+}
+
+
+#line 259 "ClipLibraryView.vala"
+static gint clip_library_view_get_selected_rows (ClipLibraryView* self, GList** paths) {
+#line 1175 "ClipLibraryView.c"
+       gint result = 0;
+       GList* _tmp0_;
+#line 259 "ClipLibraryView.vala"
+       g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), 0);
+#line 1180 "ClipLibraryView.c"
+       if (paths != NULL) {
+               *paths = NULL;
+       }
+#line 260 "ClipLibraryView.vala"
+       *paths = (_tmp0_ = gtk_tree_selection_get_selected_rows (self->priv->selection, NULL), __g_list_free_gtk_tree_path_free0 (*paths), _tmp0_);
+#line 1186 "ClipLibraryView.c"
+       result = (gint) g_list_length (*paths);
+#line 261 "ClipLibraryView.vala"
+       return result;
+#line 1190 "ClipLibraryView.c"
+}
+
+
+static gpointer _gtk_tree_path_copy0 (gpointer self) {
+       return self ? gtk_tree_path_copy (self) : NULL;
+}
+
+
+#line 264 "ClipLibraryView.vala"
+static void clip_library_view_on_drag_begin (ClipLibraryView* self, GdkDragContext* c) {
+#line 1201 "ClipLibraryView.c"
+       GList* paths;
+       GList* _tmp2_;
+       gint _tmp1_;
+       GList* _tmp0_ = NULL;
+#line 264 "ClipLibraryView.vala"
+       g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
+#line 264 "ClipLibraryView.vala"
+       g_return_if_fail (GDK_IS_DRAG_CONTEXT (c));
+#line 265 "ClipLibraryView.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_drag_begin");
+#line 1212 "ClipLibraryView.c"
+       paths = NULL;
+#line 267 "ClipLibraryView.vala"
+       if ((_tmp1_ = clip_library_view_get_selected_rows (self, &_tmp0_), paths = (_tmp2_ = _tmp0_, __g_list_free_gtk_tree_path_free0 (paths), _tmp2_), _tmp1_) > 0) {
+#line 1216 "ClipLibraryView.c"
+               gboolean set_pixbuf;
+#line 268 "ClipLibraryView.vala"
+               set_pixbuf = FALSE;
+#line 269 "ClipLibraryView.vala"
+               gee_abstract_collection_clear (GEE_ABSTRACT_COLLECTION (self->priv->files_dragging));
+#line 1222 "ClipLibraryView.c"
+               {
+                       GList* t_collection;
+                       GList* t_it;
+#line 270 "ClipLibraryView.vala"
+                       t_collection = paths;
+#line 1228 "ClipLibraryView.c"
+                       for (t_it = t_collection; t_it != NULL; t_it = t_it->next) {
+                               GtkTreePath* t;
+#line 270 "ClipLibraryView.vala"
+                               t = _gtk_tree_path_copy0 ((GtkTreePath*) t_it->data);
+#line 1233 "ClipLibraryView.c"
+                               {
+                                       GtkTreeIter iter = {0};
+                                       char* filename;
+#line 272 "ClipLibraryView.vala"
+                                       gtk_tree_model_get_iter (GTK_TREE_MODEL (self->priv->list_store), &iter, t);
+#line 1239 "ClipLibraryView.c"
+                                       filename = NULL;
+#line 275 "ClipLibraryView.vala"
+                                       gtk_tree_model_get (GTK_TREE_MODEL (self->priv->list_store), &iter, CLIP_LIBRARY_VIEW_COLUMN_TYPE_FILENAME, &filename, -1, -1);
+#line 276 "ClipLibraryView.vala"
+                                       gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->priv->files_dragging), filename);
+#line 278 "ClipLibraryView.vala"
+                                       if (!set_pixbuf) {
+#line 1247 "ClipLibraryView.c"
+                                               GdkPixbuf* pixbuf;
+                                               pixbuf = NULL;
+#line 280 "ClipLibraryView.vala"
+                                               gtk_tree_model_get (GTK_TREE_MODEL (self->priv->list_store), &iter, CLIP_LIBRARY_VIEW_COLUMN_TYPE_THUMBNAIL, &pixbuf, -1, -1);
+#line 282 "ClipLibraryView.vala"
+                                               gtk_drag_set_icon_pixbuf (c, pixbuf, 0, 0);
+#line 283 "ClipLibraryView.vala"
+                                               set_pixbuf = TRUE;
+#line 1256 "ClipLibraryView.c"
+                                               _g_object_unref0 (pixbuf);
+                                       }
+                                       _gtk_tree_path_free0 (t);
+                                       _g_free0 (filename);
+                               }
+                       }
+               }
+       }
+       __g_list_free_gtk_tree_path_free0 (paths);
+}
+
+
+#line 289 "ClipLibraryView.vala"
+static GtkTreeViewColumn* clip_library_view_add_column (ClipLibraryView* self, ClipLibraryViewColumnType c) {
+#line 1271 "ClipLibraryView.c"
+       GtkTreeViewColumn* result = NULL;
+       GtkTreeViewColumn* column;
+       GtkCellRenderer* renderer;
+#line 289 "ClipLibraryView.vala"
+       g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), NULL);
+#line 290 "ClipLibraryView.vala"
+       column = g_object_ref_sink (gtk_tree_view_column_new ());
+#line 1279 "ClipLibraryView.c"
+       renderer = NULL;
+#line 293 "ClipLibraryView.vala"
+       if (c == CLIP_LIBRARY_VIEW_COLUMN_TYPE_THUMBNAIL) {
+#line 1283 "ClipLibraryView.c"
+               GtkCellRenderer* _tmp0_;
+#line 294 "ClipLibraryView.vala"
+               renderer = (_tmp0_ = GTK_CELL_RENDERER (g_object_ref_sink ((GtkCellRendererPixbuf*) gtk_cell_renderer_pixbuf_new ())), _g_object_unref0 (renderer), _tmp0_);
+#line 1287 "ClipLibraryView.c"
+       } else {
+               GtkCellRenderer* _tmp1_;
+               GdkColor _tmp2_ = {0};
+               GdkColor color;
+#line 296 "ClipLibraryView.vala"
+               renderer = (_tmp1_ = GTK_CELL_RENDERER (g_object_ref_sink ((GtkCellRendererText*) gtk_cell_renderer_text_new ())), _g_object_unref0 (renderer), _tmp1_);
+#line 297 "ClipLibraryView.vala"
+               color = (parse_color ("#FFF", &_tmp2_), _tmp2_);
+#line 298 "ClipLibraryView.vala"
+               g_object_set (G_OBJECT (renderer), "foreground-gdk", &color, NULL);
+#line 1298 "ClipLibraryView.c"
+       }
+#line 301 "ClipLibraryView.vala"
+       gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (column), renderer, TRUE);
+#line 302 "ClipLibraryView.vala"
+       gtk_tree_view_column_set_resizable (column, TRUE);
+#line 304 "ClipLibraryView.vala"
+       if (c == CLIP_LIBRARY_VIEW_COLUMN_TYPE_THUMBNAIL) {
+#line 305 "ClipLibraryView.vala"
+               gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (column), renderer, "pixbuf", gtk_tree_view_append_column (self->priv->tree_view, column) - 1);
+#line 1308 "ClipLibraryView.c"
+       } else {
+#line 307 "ClipLibraryView.vala"
+               gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (column), renderer, "text", gtk_tree_view_append_column (self->priv->tree_view, column) - 1);
+#line 1312 "ClipLibraryView.c"
+       }
+       result = column;
+       _g_object_unref0 (renderer);
+#line 309 "ClipLibraryView.vala"
+       return result;
+#line 1318 "ClipLibraryView.c"
+}
+
+
+#line 312 "ClipLibraryView.vala"
+static void clip_library_view_update_iter (ClipLibraryView* self, GtkTreeIter* it, ModelClipFile* clip_file) {
+#line 1324 "ClipLibraryView.c"
+       GdkPixbuf* icon;
+       char* _tmp5_;
+       char* _tmp4_;
+#line 312 "ClipLibraryView.vala"
+       g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
+#line 312 "ClipLibraryView.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FILE (clip_file));
+#line 1332 "ClipLibraryView.c"
+       icon = NULL;
+#line 315 "ClipLibraryView.vala"
+       if (model_clip_file_is_online (clip_file)) {
+#line 316 "ClipLibraryView.vala"
+               if (clip_file->thumbnail == NULL) {
+#line 1338 "ClipLibraryView.c"
+                       GdkPixbuf* _tmp0_;
+                       GdkPixbuf* _tmp1_;
+                       _tmp0_ = NULL;
+#line 317 "ClipLibraryView.vala"
+                       if (model_clip_file_is_of_type (clip_file, MODEL_MEDIA_TYPE_VIDEO)) {
+#line 318 "ClipLibraryView.vala"
+                               _tmp0_ = self->priv->default_video_icon;
+#line 1346 "ClipLibraryView.c"
+                       } else {
+#line 318 "ClipLibraryView.vala"
+                               _tmp0_ = self->priv->default_audio_icon;
+#line 1350 "ClipLibraryView.c"
+                       }
+#line 317 "ClipLibraryView.vala"
+                       icon = (_tmp1_ = _g_object_ref0 (_tmp0_), _g_object_unref0 (icon), _tmp1_);
+#line 1354 "ClipLibraryView.c"
+               } else {
+                       GdkPixbuf* _tmp2_;
+#line 320 "ClipLibraryView.vala"
+                       icon = (_tmp2_ = _g_object_ref0 (clip_file->thumbnail), _g_object_unref0 (icon), _tmp2_);
+#line 1359 "ClipLibraryView.c"
+               }
+       } else {
+               GdkPixbuf* _tmp3_;
+#line 323 "ClipLibraryView.vala"
+               icon = (_tmp3_ = _g_object_ref0 (self->priv->default_error_icon), _g_object_unref0 (icon), _tmp3_);
+#line 1365 "ClipLibraryView.c"
+       }
+#line 326 "ClipLibraryView.vala"
+       gtk_list_store_set (self->priv->list_store, it, CLIP_LIBRARY_VIEW_COLUMN_TYPE_THUMBNAIL, icon, CLIP_LIBRARY_VIEW_COLUMN_TYPE_NAME, _tmp4_ = isolate_filename (clip_file->filename), CLIP_LIBRARY_VIEW_COLUMN_TYPE_DURATION, _tmp5_ = model_time_system_get_time_duration (self->priv->time_provider, model_clip_file_get_length (clip_file)), CLIP_LIBRARY_VIEW_COLUMN_TYPE_FILENAME, clip_file->filename, -1, -1);
+#line 1369 "ClipLibraryView.c"
+       _g_free0 (_tmp5_);
+       _g_free0 (_tmp4_);
+       _g_object_unref0 (icon);
+}
+
+
+#line 332 "ClipLibraryView.vala"
+static void clip_library_view_on_clipfile_added (ClipLibraryView* self, ModelClipFile* f) {
+#line 1378 "ClipLibraryView.c"
+       GtkTreeIter it = {0};
+#line 332 "ClipLibraryView.vala"
+       g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
+#line 332 "ClipLibraryView.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FILE (f));
+#line 333 "ClipLibraryView.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_file_added");
+#line 336 "ClipLibraryView.vala"
+       if (clip_library_view_find_clipfile (self, f, &it) >= 0) {
+#line 337 "ClipLibraryView.vala"
+               gtk_list_store_remove (self->priv->list_store, &it);
+#line 1390 "ClipLibraryView.c"
+       } else {
+#line 339 "ClipLibraryView.vala"
+               if (self->priv->num_clipfiles == 0) {
+#line 340 "ClipLibraryView.vala"
+                       if (self->priv->label != NULL) {
+#line 341 "ClipLibraryView.vala"
+                               gtk_container_remove (GTK_CONTAINER (self), GTK_WIDGET (self->priv->label));
+#line 1398 "ClipLibraryView.c"
+                       }
+#line 343 "ClipLibraryView.vala"
+                       gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->priv->tree_view));
+#line 344 "ClipLibraryView.vala"
+                       gtk_widget_show (GTK_WIDGET (self->priv->tree_view));
+#line 1404 "ClipLibraryView.c"
+               }
+#line 346 "ClipLibraryView.vala"
+               self->priv->num_clipfiles++;
+#line 1408 "ClipLibraryView.c"
+       }
+#line 349 "ClipLibraryView.vala"
+       gtk_list_store_append (self->priv->list_store, &it);
+#line 350 "ClipLibraryView.vala"
+       clip_library_view_update_iter (self, &it, f);
+#line 1414 "ClipLibraryView.c"
+}
+
+
+#line 353 "ClipLibraryView.vala"
+static gint clip_library_view_find_clipfile (ClipLibraryView* self, ModelClipFile* f, GtkTreeIter* iter) {
+#line 1420 "ClipLibraryView.c"
+       gint result = 0;
+       GtkTreeModel* model;
+       gboolean b;
+       gint i;
+#line 353 "ClipLibraryView.vala"
+       g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), 0);
+#line 353 "ClipLibraryView.vala"
+       g_return_val_if_fail (MODEL_IS_CLIP_FILE (f), 0);
+#line 354 "ClipLibraryView.vala"
+       model = _g_object_ref0 (gtk_tree_view_get_model (self->priv->tree_view));
+#line 356 "ClipLibraryView.vala"
+       b = gtk_tree_model_get_iter_first (model, iter);
+#line 358 "ClipLibraryView.vala"
+       i = 0;
+#line 359 "ClipLibraryView.vala"
+       while (TRUE) {
+#line 1437 "ClipLibraryView.c"
+               char* filename;
+#line 359 "ClipLibraryView.vala"
+               if (!b) {
+#line 359 "ClipLibraryView.vala"
+                       break;
+#line 1443 "ClipLibraryView.c"
+               }
+               filename = NULL;
+#line 361 "ClipLibraryView.vala"
+               gtk_tree_model_get (model, iter, CLIP_LIBRARY_VIEW_COLUMN_TYPE_FILENAME, &filename, -1);
+#line 363 "ClipLibraryView.vala"
+               if (_vala_strcmp0 (filename, f->filename) == 0) {
+#line 1450 "ClipLibraryView.c"
+                       result = i;
+                       _g_free0 (filename);
+                       _g_object_unref0 (model);
+#line 364 "ClipLibraryView.vala"
+                       return result;
+#line 1456 "ClipLibraryView.c"
+               }
+#line 366 "ClipLibraryView.vala"
+               i++;
+#line 367 "ClipLibraryView.vala"
+               b = gtk_tree_model_iter_next (model, iter);
+#line 1462 "ClipLibraryView.c"
+               _g_free0 (filename);
+       }
+       result = -1;
+       _g_object_unref0 (model);
+#line 369 "ClipLibraryView.vala"
+       return result;
+#line 1469 "ClipLibraryView.c"
+}
+
+
+#line 372 "ClipLibraryView.vala"
+void clip_library_view_on_clipfile_removed (ClipLibraryView* self, ModelClipFile* f) {
+#line 1475 "ClipLibraryView.c"
+       GtkTreeIter it = {0};
+#line 372 "ClipLibraryView.vala"
+       g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
+#line 372 "ClipLibraryView.vala"
+       g_return_if_fail (MODEL_IS_CLIP_FILE (f));
+#line 373 "ClipLibraryView.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_file_removed");
+#line 376 "ClipLibraryView.vala"
+       if (clip_library_view_find_clipfile (self, f, &it) >= 0) {
+#line 377 "ClipLibraryView.vala"
+               clip_library_view_remove_row (self, &it);
+#line 1487 "ClipLibraryView.c"
+       }
+}
+
+
+#line 381 "ClipLibraryView.vala"
+static gboolean clip_library_view_remove_row (ClipLibraryView* self, GtkTreeIter* it) {
+#line 1494 "ClipLibraryView.c"
+       gboolean result = FALSE;
+       gboolean b;
+#line 381 "ClipLibraryView.vala"
+       g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), FALSE);
+#line 382 "ClipLibraryView.vala"
+       b = gtk_list_store_remove (self->priv->list_store, it);
+#line 383 "ClipLibraryView.vala"
+       self->priv->num_clipfiles--;
+#line 384 "ClipLibraryView.vala"
+       if (self->priv->num_clipfiles == 0) {
+#line 385 "ClipLibraryView.vala"
+               gtk_container_remove (GTK_CONTAINER (self), GTK_WIDGET (self->priv->tree_view));
+#line 386 "ClipLibraryView.vala"
+               if (self->priv->label != NULL) {
+#line 387 "ClipLibraryView.vala"
+                       gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->priv->label));
+#line 388 "ClipLibraryView.vala"
+                       gtk_widget_show (GTK_WIDGET (self->priv->label));
+#line 1513 "ClipLibraryView.c"
+               }
+       }
+       result = b;
+#line 391 "ClipLibraryView.vala"
+       return result;
+#line 1519 "ClipLibraryView.c"
+}
+
+
+#line 394 "ClipLibraryView.vala"
+static void clip_library_view_on_remove_all_rows (ClipLibraryView* self) {
+#line 1525 "ClipLibraryView.c"
+       GtkTreeModel* model;
+       GtkTreeIter iter = {0};
+       gboolean b;
+#line 394 "ClipLibraryView.vala"
+       g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
+#line 395 "ClipLibraryView.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_remove_all_rows");
+#line 396 "ClipLibraryView.vala"
+       model = _g_object_ref0 (gtk_tree_view_get_model (self->priv->tree_view));
+#line 399 "ClipLibraryView.vala"
+       b = gtk_tree_model_get_iter_first (model, &iter);
+#line 401 "ClipLibraryView.vala"
+       while (TRUE) {
+#line 401 "ClipLibraryView.vala"
+               if (!b) {
+#line 401 "ClipLibraryView.vala"
+                       break;
+#line 1543 "ClipLibraryView.c"
+               }
+#line 402 "ClipLibraryView.vala"
+               b = clip_library_view_remove_row (self, &iter);
+#line 1547 "ClipLibraryView.c"
+       }
+       _g_object_unref0 (model);
+}
+
+
+#line 406 "ClipLibraryView.vala"
+static void clip_library_view_on_time_signature_changed (ClipLibraryView* self, Fraction* time_signature) {
+#line 1555 "ClipLibraryView.c"
+       GtkTreeIter iter = {0};
+       gboolean more_items;
+#line 406 "ClipLibraryView.vala"
+       g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
+#line 407 "ClipLibraryView.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_time_signature_changed");
+#line 409 "ClipLibraryView.vala"
+       more_items = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->priv->list_store), &iter);
+#line 410 "ClipLibraryView.vala"
+       while (TRUE) {
+#line 1566 "ClipLibraryView.c"
+               char* filename;
+               ModelClipFile* clip_file;
+               char* _tmp0_;
+#line 410 "ClipLibraryView.vala"
+               if (!more_items) {
+#line 410 "ClipLibraryView.vala"
+                       break;
+#line 1574 "ClipLibraryView.c"
+               }
+               filename = NULL;
+#line 412 "ClipLibraryView.vala"
+               gtk_tree_model_get (GTK_TREE_MODEL (self->priv->list_store), &iter, CLIP_LIBRARY_VIEW_COLUMN_TYPE_FILENAME, &filename, -1, -1);
+#line 413 "ClipLibraryView.vala"
+               clip_file = model_project_find_clipfile (self->priv->project, filename);
+#line 414 "ClipLibraryView.vala"
+               gtk_list_store_set (self->priv->list_store, &iter, CLIP_LIBRARY_VIEW_COLUMN_TYPE_DURATION, _tmp0_ = model_time_system_get_time_duration (self->priv->time_provider, model_clip_file_get_length (clip_file)), -1, -1);
+#line 1583 "ClipLibraryView.c"
+               _g_free0 (_tmp0_);
+#line 416 "ClipLibraryView.vala"
+               more_items = gtk_tree_model_iter_next (GTK_TREE_MODEL (self->priv->list_store), &iter);
+#line 1587 "ClipLibraryView.c"
+               _g_free0 (filename);
+               _g_object_unref0 (clip_file);
+       }
+}
+
+
+#line 420 "ClipLibraryView.vala"
+static void clip_library_view_delete_row (ClipLibraryView* self, GtkTreeModel* model, GtkTreePath* path) {
+#line 1596 "ClipLibraryView.c"
+       GtkTreeIter it = {0};
+#line 420 "ClipLibraryView.vala"
+       g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
+#line 420 "ClipLibraryView.vala"
+       g_return_if_fail (GTK_IS_TREE_MODEL (model));
+#line 420 "ClipLibraryView.vala"
+       g_return_if_fail (path != NULL);
+#line 422 "ClipLibraryView.vala"
+       if (gtk_tree_model_get_iter (GTK_TREE_MODEL (self->priv->list_store), &it, path)) {
+#line 1606 "ClipLibraryView.c"
+               char* filename;
+               char* _tmp1_;
+               char* _tmp0_;
+               gboolean _tmp2_;
+               filename = NULL;
+#line 424 "ClipLibraryView.vala"
+               gtk_tree_model_get (model, &it, CLIP_LIBRARY_VIEW_COLUMN_TYPE_FILENAME, &filename, -1, -1);
+#line 425 "ClipLibraryView.vala"
+               if (model_project_clipfile_on_track (self->priv->project, filename)) {
+#line 426 "ClipLibraryView.vala"
+                       if (dialog_utils_delete_cancel ("Clip is in use.  Delete anyway?") != GTK_RESPONSE_YES) {
+#line 1618 "ClipLibraryView.c"
+                               _g_free0 (filename);
+#line 428 "ClipLibraryView.vala"
+                               return;
+#line 1622 "ClipLibraryView.c"
+                       }
+               }
+#line 431 "ClipLibraryView.vala"
+               model_project_remove_clipfile (self->priv->project, filename);
+#line 433 "ClipLibraryView.vala"
+               if ((_tmp2_ = _vala_strcmp0 (_tmp0_ = g_path_get_dirname (filename), _tmp1_ = model_project_get_audio_path (self->priv->project)) == 0, _g_free0 (_tmp1_), _g_free0 (_tmp0_), _tmp2_)) {
+#line 434 "ClipLibraryView.vala"
+                       if (dialog_utils_delete_keep ("Delete clip from disk?  This action is not undoable.") == GTK_RESPONSE_YES) {
+#line 436 "ClipLibraryView.vala"
+                               if (g_unlink (filename) != 0) {
+#line 437 "ClipLibraryView.vala"
+                                       g_signal_emit_by_name (self->priv->project, "error-occurred", "Could not delete %s", filename);
+#line 1635 "ClipLibraryView.c"
+                               }
+#line 439 "ClipLibraryView.vala"
+                               model_undo_manager_reset (self->priv->project->undo_manager);
+#line 1639 "ClipLibraryView.c"
+                       }
+               }
+               _g_free0 (filename);
+       }
+}
+
+
+#line 445 "ClipLibraryView.vala"
+gboolean clip_library_view_has_selection (ClipLibraryView* self) {
+#line 1649 "ClipLibraryView.c"
+       gboolean result = FALSE;
+       GList* paths;
+       GList* _tmp2_;
+       gint _tmp1_;
+       GList* _tmp0_ = NULL;
+#line 445 "ClipLibraryView.vala"
+       g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), FALSE);
+#line 1657 "ClipLibraryView.c"
+       paths = NULL;
+       result = (_tmp1_ = clip_library_view_get_selected_rows (self, &_tmp0_), paths = (_tmp2_ = _tmp0_, __g_list_free_gtk_tree_path_free0 (paths), _tmp2_), _tmp1_) != 0;
+       __g_list_free_gtk_tree_path_free0 (paths);
+#line 447 "ClipLibraryView.vala"
+       return result;
+#line 1663 "ClipLibraryView.c"
+       __g_list_free_gtk_tree_path_free0 (paths);
+}
+
+
+#line 450 "ClipLibraryView.vala"
+GeeArrayList* clip_library_view_get_selected_files (ClipLibraryView* self) {
+#line 1670 "ClipLibraryView.c"
+       GeeArrayList* result = NULL;
+       GList* paths;
+       GeeArrayList* return_value;
+       GList* _tmp2_;
+       gint _tmp1_;
+       GList* _tmp0_ = NULL;
+#line 450 "ClipLibraryView.vala"
+       g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), NULL);
+#line 1679 "ClipLibraryView.c"
+       paths = NULL;
+#line 452 "ClipLibraryView.vala"
+       return_value = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL);
+#line 453 "ClipLibraryView.vala"
+       if ((_tmp1_ = clip_library_view_get_selected_rows (self, &_tmp0_), paths = (_tmp2_ = _tmp0_, __g_list_free_gtk_tree_path_free0 (paths), _tmp2_), _tmp1_) != 0) {
+#line 1685 "ClipLibraryView.c"
+               {
+                       GList* path_collection;
+                       GList* path_it;
+#line 454 "ClipLibraryView.vala"
+                       path_collection = paths;
+#line 1691 "ClipLibraryView.c"
+                       for (path_it = path_collection; path_it != NULL; path_it = path_it->next) {
+                               GtkTreePath* path;
+#line 454 "ClipLibraryView.vala"
+                               path = _gtk_tree_path_copy0 ((GtkTreePath*) path_it->data);
+#line 1696 "ClipLibraryView.c"
+                               {
+                                       GtkTreeIter iter = {0};
+#line 456 "ClipLibraryView.vala"
+                                       if (gtk_tree_model_get_iter (GTK_TREE_MODEL (self->priv->list_store), &iter, path)) {
+#line 1701 "ClipLibraryView.c"
+                                               char* name;
+                                               name = NULL;
+#line 458 "ClipLibraryView.vala"
+                                               gtk_tree_model_get (GTK_TREE_MODEL (self->priv->list_store), &iter, CLIP_LIBRARY_VIEW_COLUMN_TYPE_FILENAME, &name, -1, -1);
+#line 459 "ClipLibraryView.vala"
+                                               gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (return_value), name);
+#line 1708 "ClipLibraryView.c"
+                                               _g_free0 (name);
+                                       }
+                                       _gtk_tree_path_free0 (path);
+                               }
+                       }
+               }
+       }
+       result = return_value;
+       __g_list_free_gtk_tree_path_free0 (paths);
+#line 463 "ClipLibraryView.vala"
+       return result;
+#line 1720 "ClipLibraryView.c"
+}
+
+
+#line 466 "ClipLibraryView.vala"
+void clip_library_view_delete_selection (ClipLibraryView* self) {
+#line 1726 "ClipLibraryView.c"
+       GList* paths;
+       GList* _tmp2_;
+       gint _tmp1_;
+       GList* _tmp0_ = NULL;
+#line 466 "ClipLibraryView.vala"
+       g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
+#line 1733 "ClipLibraryView.c"
+       paths = NULL;
+#line 468 "ClipLibraryView.vala"
+       model_undo_manager_start_transaction (self->priv->project->undo_manager, "Delete Clips From Library");
+#line 469 "ClipLibraryView.vala"
+       if ((_tmp1_ = clip_library_view_get_selected_rows (self, &_tmp0_), paths = (_tmp2_ = _tmp0_, __g_list_free_gtk_tree_path_free0 (paths), _tmp2_), _tmp1_) > 0) {
+#line 1739 "ClipLibraryView.c"
+               {
+                       gint i;
+#line 470 "ClipLibraryView.vala"
+                       i = ((gint) g_list_length (paths)) - 1;
+#line 1744 "ClipLibraryView.c"
+                       {
+                               gboolean _tmp3_;
+#line 470 "ClipLibraryView.vala"
+                               _tmp3_ = TRUE;
+#line 470 "ClipLibraryView.vala"
+                               while (TRUE) {
+#line 470 "ClipLibraryView.vala"
+                                       if (!_tmp3_) {
+#line 470 "ClipLibraryView.vala"
+                                               i--;
+#line 1755 "ClipLibraryView.c"
+                                       }
+#line 470 "ClipLibraryView.vala"
+                                       _tmp3_ = FALSE;
+#line 470 "ClipLibraryView.vala"
+                                       if (!(i >= 0)) {
+#line 470 "ClipLibraryView.vala"
+                                               break;
+#line 1763 "ClipLibraryView.c"
+                                       }
+#line 471 "ClipLibraryView.vala"
+                                       clip_library_view_delete_row (self, GTK_TREE_MODEL (self->priv->list_store), (GtkTreePath*) g_list_nth_data (paths, (guint) i));
+#line 1767 "ClipLibraryView.c"
+                               }
+                       }
+               }
+       }
+#line 473 "ClipLibraryView.vala"
+       model_undo_manager_end_transaction (self->priv->project->undo_manager, "Delete Clips From Library");
+#line 1774 "ClipLibraryView.c"
+       __g_list_free_gtk_tree_path_free0 (paths);
+}
+
+
+#line 476 "ClipLibraryView.vala"
+void clip_library_view_select_all (ClipLibraryView* self) {
+#line 476 "ClipLibraryView.vala"
+       g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
+#line 477 "ClipLibraryView.vala"
+       gtk_tree_selection_select_all (self->priv->selection);
+#line 1785 "ClipLibraryView.c"
+}
+
+
+#line 480 "ClipLibraryView.vala"
+static gint clip_library_view_name_sort (ClipLibraryView* self, GtkTreeModel* model, GtkTreeIter* a, GtkTreeIter* b) {
+#line 1791 "ClipLibraryView.c"
+       gint result = 0;
+       char* left;
+       char* right;
+#line 480 "ClipLibraryView.vala"
+       g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), 0);
+#line 480 "ClipLibraryView.vala"
+       g_return_val_if_fail (GTK_IS_TREE_MODEL (model), 0);
+#line 1799 "ClipLibraryView.c"
+       left = NULL;
+       right = NULL;
+#line 483 "ClipLibraryView.vala"
+       gtk_tree_model_get (model, a, CLIP_LIBRARY_VIEW_COLUMN_TYPE_NAME, &left, -1);
+#line 484 "ClipLibraryView.vala"
+       gtk_tree_model_get (model, b, CLIP_LIBRARY_VIEW_COLUMN_TYPE_NAME, &right, -1);
+#line 1806 "ClipLibraryView.c"
+       result = stricmp (left, right);
+       _g_free0 (left);
+       _g_free0 (right);
+#line 485 "ClipLibraryView.vala"
+       return result;
+#line 1812 "ClipLibraryView.c"
+}
+
+
+static void clip_library_view_class_init (ClipLibraryViewClass * klass) {
+       clip_library_view_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ClipLibraryViewPrivate));
+       GTK_WIDGET_CLASS (klass)->drag_data_received = clip_library_view_real_drag_data_received;
+       G_OBJECT_CLASS (klass)->finalize = clip_library_view_finalize;
+       g_signal_new ("selection_changed", TYPE_CLIP_LIBRARY_VIEW, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+}
+
+
+static void clip_library_view_instance_init (ClipLibraryView * self) {
+       self->priv = CLIP_LIBRARY_VIEW_GET_PRIVATE (self);
+       self->priv->label = NULL;
+       self->priv->files_dragging = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL);
+}
+
+
+static void clip_library_view_finalize (GObject* obj) {
+       ClipLibraryView * self;
+       self = CLIP_LIBRARY_VIEW (obj);
+       _g_object_unref0 (self->priv->project);
+       _g_object_unref0 (self->priv->tree_view);
+       _g_object_unref0 (self->priv->selection);
+       _g_object_unref0 (self->priv->label);
+       _g_object_unref0 (self->priv->list_store);
+       _g_object_unref0 (self->priv->files_dragging);
+       _g_object_unref0 (self->priv->icon_theme);
+       _g_object_unref0 (self->priv->default_audio_icon);
+       _g_object_unref0 (self->priv->default_video_icon);
+       _g_object_unref0 (self->priv->default_error_icon);
+       _g_object_unref0 (self->priv->time_provider);
+       G_OBJECT_CLASS (clip_library_view_parent_class)->finalize (obj);
+}
+
+
+GType clip_library_view_get_type (void) {
+       static volatile gsize clip_library_view_type_id__volatile = 0;
+       if (g_once_init_enter (&clip_library_view_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ClipLibraryViewClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) clip_library_view_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ClipLibraryView), 0, (GInstanceInitFunc) clip_library_view_instance_init, NULL };
+               GType clip_library_view_type_id;
+               clip_library_view_type_id = g_type_register_static (GTK_TYPE_EVENT_BOX, "ClipLibraryView", &g_define_type_info, 0);
+               g_once_init_leave (&clip_library_view_type_id__volatile, clip_library_view_type_id);
+       }
+       return clip_library_view_type_id__volatile;
+}
+
+
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+       if ((array != NULL) && (destroy_func != NULL)) {
+               int i;
+               for (i = 0; i < array_length; i = i + 1) {
+                       if (((gpointer*) array)[i] != NULL) {
+                               destroy_func (((gpointer*) array)[i]);
+                       }
+               }
+       }
+}
+
+
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+       _vala_array_destroy (array, array_length, destroy_func);
+       g_free (array);
+}
+
+
+static gint _vala_array_length (gpointer array) {
+       int length;
+       length = 0;
+       if (array) {
+               while (((gpointer*) array)[length]) {
+                       length++;
+               }
+       }
+       return length;
+}
+
+
+static int _vala_strcmp0 (const char * str1, const char * str2) {
+       if (str1 == NULL) {
+               return -(str1 != str2);
+       }
+       if (str2 == NULL) {
+               return str1 != str2;
+       }
+       return strcmp (str1, str2);
+}
+
+
+
+