Initial commit
[fillmore] / src / marina / marina / ClipLibraryView.c
1 /* ClipLibraryView.c generated by valac, the Vala compiler
2  * generated from ClipLibraryView.vala, do not modify */
3
4 /* Copyright 2009-2010 Yorba Foundation
5  *
6  * This software is licensed under the GNU Lesser General Public License
7  * (version 2.1 or later).  See the COPYING file in this distribution. 
8  */
9
10 #include <glib.h>
11 #include <glib-object.h>
12 #include <gtk/gtk.h>
13 #include <gee.h>
14 #include <stdlib.h>
15 #include <string.h>
16 #include <gdk-pixbuf/gdk-pixdata.h>
17 #include <float.h>
18 #include <math.h>
19 #include <gdk/gdk.h>
20 #include <gst/gst.h>
21 #include <glib/gstdio.h>
22
23
24 #define TYPE_CLIP_LIBRARY_VIEW (clip_library_view_get_type ())
25 #define CLIP_LIBRARY_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CLIP_LIBRARY_VIEW, ClipLibraryView))
26 #define CLIP_LIBRARY_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CLIP_LIBRARY_VIEW, ClipLibraryViewClass))
27 #define IS_CLIP_LIBRARY_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CLIP_LIBRARY_VIEW))
28 #define IS_CLIP_LIBRARY_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CLIP_LIBRARY_VIEW))
29 #define CLIP_LIBRARY_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CLIP_LIBRARY_VIEW, ClipLibraryViewClass))
30
31 typedef struct _ClipLibraryView ClipLibraryView;
32 typedef struct _ClipLibraryViewClass ClipLibraryViewClass;
33 typedef struct _ClipLibraryViewPrivate ClipLibraryViewPrivate;
34
35 #define MODEL_TYPE_PROJECT (model_project_get_type ())
36 #define MODEL_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_PROJECT, ModelProject))
37 #define MODEL_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_PROJECT, ModelProjectClass))
38 #define MODEL_IS_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_PROJECT))
39 #define MODEL_IS_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_PROJECT))
40 #define MODEL_PROJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_PROJECT, ModelProjectClass))
41
42 typedef struct _ModelProject ModelProject;
43 typedef struct _ModelProjectClass ModelProjectClass;
44
45 #define CLIP_LIBRARY_VIEW_TYPE_SORT_MODE (clip_library_view_sort_mode_get_type ())
46
47 #define MODEL_TYPE_TIME_SYSTEM (model_time_system_get_type ())
48 #define MODEL_TIME_SYSTEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TIME_SYSTEM, ModelTimeSystem))
49 #define MODEL_IS_TIME_SYSTEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TIME_SYSTEM))
50 #define MODEL_TIME_SYSTEM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MODEL_TYPE_TIME_SYSTEM, ModelTimeSystemIface))
51
52 typedef struct _ModelTimeSystem ModelTimeSystem;
53 typedef struct _ModelTimeSystemIface ModelTimeSystemIface;
54
55 #define CLIP_LIBRARY_VIEW_TYPE_COLUMN_TYPE (clip_library_view_column_type_get_type ())
56 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
57
58 #define MODEL_TYPE_CLIP_FILE (model_clip_file_get_type ())
59 #define MODEL_CLIP_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_FILE, ModelClipFile))
60 #define MODEL_CLIP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_FILE, ModelClipFileClass))
61 #define MODEL_IS_CLIP_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_FILE))
62 #define MODEL_IS_CLIP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_FILE))
63 #define MODEL_CLIP_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_FILE, ModelClipFileClass))
64
65 typedef struct _ModelClipFile ModelClipFile;
66 typedef struct _ModelClipFileClass ModelClipFileClass;
67
68 #define MODEL_TYPE_TEMPO_INFORMATION (model_tempo_information_get_type ())
69 #define MODEL_TEMPO_INFORMATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TEMPO_INFORMATION, ModelTempoInformation))
70 #define MODEL_IS_TEMPO_INFORMATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TEMPO_INFORMATION))
71 #define MODEL_TEMPO_INFORMATION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MODEL_TYPE_TEMPO_INFORMATION, ModelTempoInformationIface))
72
73 typedef struct _ModelTempoInformation ModelTempoInformation;
74 typedef struct _ModelTempoInformationIface ModelTempoInformationIface;
75
76 #define TYPE_FRACTION (fraction_get_type ())
77 typedef struct _Fraction Fraction;
78 #define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
79 #define _gtk_tree_path_free0(var) ((var == NULL) ? NULL : (var = (gtk_tree_path_free (var), NULL)))
80
81 #define LOGGING_TYPE_FACILITY (logging_facility_get_type ())
82
83 #define LOGGING_TYPE_LEVEL (logging_level_get_type ())
84
85 #define MODEL_TYPE_TRACK (model_track_get_type ())
86 #define MODEL_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TRACK, ModelTrack))
87 #define MODEL_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_TRACK, ModelTrackClass))
88 #define MODEL_IS_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TRACK))
89 #define MODEL_IS_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_TRACK))
90 #define MODEL_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_TRACK, ModelTrackClass))
91
92 typedef struct _ModelTrack ModelTrack;
93 typedef struct _ModelTrackClass ModelTrackClass;
94 #define _g_free0(var) (var = (g_free (var), NULL))
95 typedef struct _ModelProjectPrivate ModelProjectPrivate;
96
97 #define TYPE_TIME_CODE (time_code_get_type ())
98 typedef struct _TimeCode TimeCode;
99
100 #define VIEW_TYPE_MEDIA_ENGINE (view_media_engine_get_type ())
101 #define VIEW_MEDIA_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngine))
102 #define VIEW_MEDIA_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngineClass))
103 #define VIEW_IS_MEDIA_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_MEDIA_ENGINE))
104 #define VIEW_IS_MEDIA_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_MEDIA_ENGINE))
105 #define VIEW_MEDIA_ENGINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngineClass))
106
107 typedef struct _ViewMediaEngine ViewMediaEngine;
108 typedef struct _ViewMediaEngineClass ViewMediaEngineClass;
109
110 #define MODEL_TYPE_PROJECT_LOADER (model_project_loader_get_type ())
111 #define MODEL_PROJECT_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoader))
112 #define MODEL_PROJECT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoaderClass))
113 #define MODEL_IS_PROJECT_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_PROJECT_LOADER))
114 #define MODEL_IS_PROJECT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_PROJECT_LOADER))
115 #define MODEL_PROJECT_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoaderClass))
116
117 typedef struct _ModelProjectLoader ModelProjectLoader;
118 typedef struct _ModelProjectLoaderClass ModelProjectLoaderClass;
119
120 #define MODEL_TYPE_UNDO_MANAGER (model_undo_manager_get_type ())
121 #define MODEL_UNDO_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_UNDO_MANAGER, ModelUndoManager))
122 #define MODEL_UNDO_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_UNDO_MANAGER, ModelUndoManagerClass))
123 #define MODEL_IS_UNDO_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_UNDO_MANAGER))
124 #define MODEL_IS_UNDO_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_UNDO_MANAGER))
125 #define MODEL_UNDO_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_UNDO_MANAGER, ModelUndoManagerClass))
126
127 typedef struct _ModelUndoManager ModelUndoManager;
128 typedef struct _ModelUndoManagerClass ModelUndoManagerClass;
129
130 #define MODEL_TYPE_LIBRARY_IMPORTER (model_library_importer_get_type ())
131 #define MODEL_LIBRARY_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporter))
132 #define MODEL_LIBRARY_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporterClass))
133 #define MODEL_IS_LIBRARY_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_LIBRARY_IMPORTER))
134 #define MODEL_IS_LIBRARY_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_LIBRARY_IMPORTER))
135 #define MODEL_LIBRARY_IMPORTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporterClass))
136
137 typedef struct _ModelLibraryImporter ModelLibraryImporter;
138 typedef struct _ModelLibraryImporterClass ModelLibraryImporterClass;
139 #define __g_list_free_gtk_tree_path_free0(var) ((var == NULL) ? NULL : (var = (_g_list_free_gtk_tree_path_free (var), NULL)))
140 typedef struct _ModelClipFilePrivate ModelClipFilePrivate;
141
142 #define MODEL_TYPE_MEDIA_TYPE (model_media_type_get_type ())
143
144 struct _ClipLibraryView {
145         GtkEventBox parent_instance;
146         ClipLibraryViewPrivate * priv;
147 };
148
149 struct _ClipLibraryViewClass {
150         GtkEventBoxClass parent_class;
151 };
152
153 typedef enum  {
154         CLIP_LIBRARY_VIEW_SORT_MODE_NONE,
155         CLIP_LIBRARY_VIEW_SORT_MODE_ABC
156 } ClipLibraryViewSortMode;
157
158 struct _ModelTimeSystemIface {
159         GTypeInterface parent_iface;
160         void (*calculate_pixel_step) (ModelTimeSystem* self, float inc, float pixel_min, float pixel_div);
161         gint64 (*xpos_to_time) (ModelTimeSystem* self, gint x);
162         gint64 (*xsize_to_time) (ModelTimeSystem* self, gint x);
163         gint (*time_to_xpos) (ModelTimeSystem* self, gint64 time);
164         gint64 (*get_pixel_snap_time) (ModelTimeSystem* self);
165         gint (*time_to_xsize) (ModelTimeSystem* self, gint64 time);
166         float (*get_pixel_percentage) (ModelTimeSystem* self);
167         gint (*get_start_token) (ModelTimeSystem* self, gint xsize);
168         gint (*get_next_position) (ModelTimeSystem* self, gint token);
169         gint (*get_pixel_height) (ModelTimeSystem* self, gint token);
170         char* (*get_display_string) (ModelTimeSystem* self, gint token);
171         gint (*frame_to_xsize) (ModelTimeSystem* self, gint frame);
172         gint (*xsize_to_frame) (ModelTimeSystem* self, gint xsize);
173         char* (*get_time_string) (ModelTimeSystem* self, gint64 time);
174         char* (*get_time_duration) (ModelTimeSystem* self, gint64 time);
175 };
176
177 struct _ClipLibraryViewPrivate {
178         ModelProject* project;
179         GtkTreeView* tree_view;
180         GtkTreeSelection* selection;
181         GtkLabel* label;
182         GtkListStore* list_store;
183         gint num_clipfiles;
184         GeeArrayList* files_dragging;
185         GtkIconTheme* icon_theme;
186         GdkPixbuf* default_audio_icon;
187         GdkPixbuf* default_video_icon;
188         GdkPixbuf* default_error_icon;
189         ClipLibraryViewSortMode sort_mode;
190         ModelTimeSystem* time_provider;
191 };
192
193 typedef enum  {
194         CLIP_LIBRARY_VIEW_COLUMN_TYPE_THUMBNAIL,
195         CLIP_LIBRARY_VIEW_COLUMN_TYPE_NAME,
196         CLIP_LIBRARY_VIEW_COLUMN_TYPE_DURATION,
197         CLIP_LIBRARY_VIEW_COLUMN_TYPE_FILENAME
198 } ClipLibraryViewColumnType;
199
200 struct _Fraction {
201         gint numerator;
202         gint denominator;
203 };
204
205 struct _ModelTempoInformationIface {
206         GTypeInterface parent_iface;
207         void (*get_time_signature) (ModelTempoInformation* self, Fraction* result);
208         gint (*get_bpm) (ModelTempoInformation* self);
209 };
210
211 typedef enum  {
212         LOGGING_FACILITY_SIGNAL_HANDLERS,
213         LOGGING_FACILITY_DEVELOPER_WARNINGS,
214         LOGGING_FACILITY_GRAPH,
215         LOGGING_FACILITY_LOADING,
216         LOGGING_FACILITY_IMPORT,
217         LOGGING_FACILITY_SINGLEDECODEBIN
218 } LoggingFacility;
219
220 typedef enum  {
221         LOGGING_LEVEL_CRITICAL,
222         LOGGING_LEVEL_HIGH,
223         LOGGING_LEVEL_MEDIUM,
224         LOGGING_LEVEL_LOW,
225         LOGGING_LEVEL_INFO,
226         LOGGING_LEVEL_VERBOSE
227 } LoggingLevel;
228
229 struct _TimeCode {
230         gint hour;
231         gint minute;
232         gint second;
233         gint frame;
234         gboolean drop_code;
235 };
236
237 struct _ModelProject {
238         GObject parent_instance;
239         ModelProjectPrivate * priv;
240         GeeArrayList* tracks;
241         GeeArrayList* inactive_tracks;
242         GeeArrayList* clipfiles;
243         ViewMediaEngine* media_engine;
244         char* project_file;
245         ModelProjectLoader* loader;
246         ModelUndoManager* undo_manager;
247         ModelLibraryImporter* importer;
248         Fraction default_framerate;
249         gboolean click_during_play;
250         gboolean click_during_record;
251         double click_volume;
252         gboolean library_visible;
253         gint library_width;
254         gboolean snap_to_clip;
255 };
256
257 struct _ModelProjectClass {
258         GObjectClass parent_class;
259         void (*get_clip_time) (ModelProject* self, ModelClipFile* f, TimeCode* result);
260         char* (*get_project_file) (ModelProject* self);
261         void (*do_append) (ModelProject* self, ModelTrack* track, ModelClipFile* clipfile, const char* name, gint64 insert_time);
262         void (*add_track) (ModelProject* self, ModelTrack* track);
263         void (*insert_track) (ModelProject* self, gint index, ModelTrack* track);
264         void (*load) (ModelProject* self, const char* fname);
265         void (*save) (ModelProject* self, const char* filename);
266         char* (*get_app_name) (ModelProject* self);
267         void (*load_complete) (ModelProject* self);
268 };
269
270 struct _ModelClipFile {
271         GObject parent_instance;
272         ModelClipFilePrivate * priv;
273         char* filename;
274         GstCaps* video_caps;
275         GstCaps* audio_caps;
276         GdkPixbuf* thumbnail;
277 };
278
279 struct _ModelClipFileClass {
280         GObjectClass parent_class;
281 };
282
283 typedef enum  {
284         MODEL_MEDIA_TYPE_AUDIO,
285         MODEL_MEDIA_TYPE_VIDEO
286 } ModelMediaType;
287
288
289 extern GtkMenu* clip_library_view_context_menu;
290 GtkMenu* clip_library_view_context_menu = NULL;
291 static gpointer clip_library_view_parent_class = NULL;
292
293 GType clip_library_view_get_type (void);
294 GType model_project_get_type (void);
295 static GType clip_library_view_sort_mode_get_type (void) G_GNUC_UNUSED;
296 GType model_time_system_get_type (void);
297 #define CLIP_LIBRARY_VIEW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_CLIP_LIBRARY_VIEW, ClipLibraryViewPrivate))
298 enum  {
299         CLIP_LIBRARY_VIEW_DUMMY_PROPERTY
300 };
301 static GType clip_library_view_column_type_get_type (void) G_GNUC_UNUSED;
302 static GtkTreeViewColumn* clip_library_view_add_column (ClipLibraryView* self, ClipLibraryViewColumnType c);
303 static gint clip_library_view_name_sort (ClipLibraryView* self, GtkTreeModel* model, GtkTreeIter* a, GtkTreeIter* b);
304 static gint _clip_library_view_name_sort_gtk_tree_iter_compare_func (GtkTreeModel* model, GtkTreeIter* a, GtkTreeIter* b, gpointer self);
305 void parse_color (const char* color, GdkColor* result);
306 GType model_clip_file_get_type (void);
307 static void clip_library_view_on_clipfile_added (ClipLibraryView* self, ModelClipFile* f);
308 static void _clip_library_view_on_clipfile_added_model_project_clipfile_added (ModelProject* _sender, ModelClipFile* c, gpointer self);
309 void clip_library_view_on_clipfile_removed (ClipLibraryView* self, ModelClipFile* f);
310 static void _clip_library_view_on_clipfile_removed_model_project_clipfile_removed (ModelProject* _sender, ModelClipFile* clip_file, gpointer self);
311 static void clip_library_view_on_remove_all_rows (ClipLibraryView* self);
312 static void _clip_library_view_on_remove_all_rows_model_project_cleared (ModelProject* _sender, gpointer self);
313 GType fraction_get_type (void);
314 Fraction* fraction_dup (const Fraction* self);
315 void fraction_free (Fraction* self);
316 GType model_tempo_information_get_type (void);
317 static void clip_library_view_on_time_signature_changed (ClipLibraryView* self, Fraction* time_signature);
318 static void _clip_library_view_on_time_signature_changed_model_tempo_information_time_signature_changed (ModelTempoInformation* _sender, Fraction* time_signature, gpointer self);
319 static void clip_library_view_on_drag_begin (ClipLibraryView* self, GdkDragContext* c);
320 static void _clip_library_view_on_drag_begin_gtk_widget_drag_begin (GtkWidget* _sender, GdkDragContext* context, gpointer self);
321 static void clip_library_view_on_drag_data_get (ClipLibraryView* self, GdkDragContext* context, GtkSelectionData* data, guint info, guint time);
322 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);
323 static void clip_library_view_on_cursor_changed (ClipLibraryView* self);
324 static void _clip_library_view_on_cursor_changed_gtk_tree_view_cursor_changed (GtkTreeView* _sender, gpointer self);
325 static gboolean clip_library_view_on_button_pressed (ClipLibraryView* self, GdkEventButton* b);
326 static gboolean _clip_library_view_on_button_pressed_gtk_widget_button_press_event (GtkWidget* _sender, GdkEventButton* event, gpointer self);
327 static gboolean clip_library_view_on_button_released (ClipLibraryView* self, GdkEventButton* b);
328 static gboolean _clip_library_view_on_button_released_gtk_widget_button_release_event (GtkWidget* _sender, GdkEventButton* event, gpointer self);
329 ClipLibraryView* clip_library_view_new (ModelProject* p, ModelTimeSystem* time_provider, const char* drag_message, GdkDragAction actions);
330 ClipLibraryView* clip_library_view_construct (GType object_type, ModelProject* p, ModelTimeSystem* time_provider, const char* drag_message, GdkDragAction actions);
331 static GtkTreePath* clip_library_view_find_first_selected (ClipLibraryView* self);
332 GType logging_facility_get_type (void);
333 GType logging_level_get_type (void);
334 void logging_emit (GObject* object, LoggingFacility facility, LoggingLevel level, const char* message);
335 gboolean clip_library_view_has_selection (ClipLibraryView* self);
336 void clip_library_view_unselect_all (ClipLibraryView* self);
337 GType model_track_get_type (void);
338 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);
339 GType time_code_get_type (void);
340 TimeCode* time_code_dup (const TimeCode* self);
341 void time_code_free (TimeCode* self);
342 GType view_media_engine_get_type (void);
343 GType model_project_loader_get_type (void);
344 gpointer model_undo_manager_ref (gpointer instance);
345 void model_undo_manager_unref (gpointer instance);
346 GParamSpec* model_param_spec_undo_manager (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
347 void model_value_set_undo_manager (GValue* value, gpointer v_object);
348 void model_value_take_undo_manager (GValue* value, gpointer v_object);
349 gpointer model_value_get_undo_manager (const GValue* value);
350 GType model_undo_manager_get_type (void);
351 GType model_library_importer_get_type (void);
352 void model_library_importer_add_file (ModelLibraryImporter* self, const char* filename, GError** error);
353 void model_library_importer_start (ModelLibraryImporter* self, GError** error);
354 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);
355 static void _vala_array_add1 (char*** array, int* length, int* size, char* value);
356 static void _g_list_free_gtk_tree_path_free (GList* self);
357 static gint clip_library_view_get_selected_rows (ClipLibraryView* self, GList** paths);
358 gboolean model_clip_file_is_online (ModelClipFile* self);
359 GType model_media_type_get_type (void);
360 gboolean model_clip_file_is_of_type (ModelClipFile* self, ModelMediaType t);
361 char* isolate_filename (const char* path);
362 char* model_time_system_get_time_duration (ModelTimeSystem* self, gint64 time);
363 gint64 model_clip_file_get_length (ModelClipFile* self);
364 static void clip_library_view_update_iter (ClipLibraryView* self, GtkTreeIter* it, ModelClipFile* clip_file);
365 static gint clip_library_view_find_clipfile (ClipLibraryView* self, ModelClipFile* f, GtkTreeIter* iter);
366 static gboolean clip_library_view_remove_row (ClipLibraryView* self, GtkTreeIter* it);
367 ModelClipFile* model_project_find_clipfile (ModelProject* self, const char* filename);
368 gboolean model_project_clipfile_on_track (ModelProject* self, const char* filename);
369 GtkResponseType dialog_utils_delete_cancel (const char* message);
370 void model_project_remove_clipfile (ModelProject* self, const char* filename);
371 char* model_project_get_audio_path (ModelProject* self);
372 GtkResponseType dialog_utils_delete_keep (const char* message);
373 void model_undo_manager_reset (ModelUndoManager* self);
374 static void clip_library_view_delete_row (ClipLibraryView* self, GtkTreeModel* model, GtkTreePath* path);
375 GeeArrayList* clip_library_view_get_selected_files (ClipLibraryView* self);
376 void model_undo_manager_start_transaction (ModelUndoManager* self, const char* description);
377 void model_undo_manager_end_transaction (ModelUndoManager* self, const char* description);
378 void clip_library_view_delete_selection (ClipLibraryView* self);
379 void clip_library_view_select_all (ClipLibraryView* self);
380 gint stricmp (const char* str1, const char* str2);
381 static void clip_library_view_finalize (GObject* obj);
382 static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
383 static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
384 static gint _vala_array_length (gpointer array);
385 static int _vala_strcmp0 (const char * str1, const char * str2);
386
387 extern const GtkTargetEntry drag_target_entries[1];
388
389
390 static GType clip_library_view_sort_mode_get_type (void) {
391         static volatile gsize clip_library_view_sort_mode_type_id__volatile = 0;
392         if (g_once_init_enter (&clip_library_view_sort_mode_type_id__volatile)) {
393                 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}};
394                 GType clip_library_view_sort_mode_type_id;
395                 clip_library_view_sort_mode_type_id = g_enum_register_static ("ClipLibraryViewSortMode", values);
396                 g_once_init_leave (&clip_library_view_sort_mode_type_id__volatile, clip_library_view_sort_mode_type_id);
397         }
398         return clip_library_view_sort_mode_type_id__volatile;
399 }
400
401
402 static GType clip_library_view_column_type_get_type (void) {
403         static volatile gsize clip_library_view_column_type_type_id__volatile = 0;
404         if (g_once_init_enter (&clip_library_view_column_type_type_id__volatile)) {
405                 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}};
406                 GType clip_library_view_column_type_type_id;
407                 clip_library_view_column_type_type_id = g_enum_register_static ("ClipLibraryViewColumnType", values);
408                 g_once_init_leave (&clip_library_view_column_type_type_id__volatile, clip_library_view_column_type_type_id);
409         }
410         return clip_library_view_column_type_type_id__volatile;
411 }
412
413
414 static gpointer _g_object_ref0 (gpointer self) {
415         return self ? g_object_ref (self) : NULL;
416 }
417
418
419 #line 480 "ClipLibraryView.vala"
420 static gint _clip_library_view_name_sort_gtk_tree_iter_compare_func (GtkTreeModel* model, GtkTreeIter* a, GtkTreeIter* b, gpointer self) {
421 #line 422 "ClipLibraryView.c"
422         gint result;
423         result = clip_library_view_name_sort (self, model, a, b);
424         return result;
425 }
426
427
428 #line 332 "ClipLibraryView.vala"
429 static void _clip_library_view_on_clipfile_added_model_project_clipfile_added (ModelProject* _sender, ModelClipFile* c, gpointer self) {
430 #line 431 "ClipLibraryView.c"
431         clip_library_view_on_clipfile_added (self, c);
432 }
433
434
435 #line 372 "ClipLibraryView.vala"
436 static void _clip_library_view_on_clipfile_removed_model_project_clipfile_removed (ModelProject* _sender, ModelClipFile* clip_file, gpointer self) {
437 #line 438 "ClipLibraryView.c"
438         clip_library_view_on_clipfile_removed (self, clip_file);
439 }
440
441
442 #line 394 "ClipLibraryView.vala"
443 static void _clip_library_view_on_remove_all_rows_model_project_cleared (ModelProject* _sender, gpointer self) {
444 #line 445 "ClipLibraryView.c"
445         clip_library_view_on_remove_all_rows (self);
446 }
447
448
449 #line 406 "ClipLibraryView.vala"
450 static void _clip_library_view_on_time_signature_changed_model_tempo_information_time_signature_changed (ModelTempoInformation* _sender, Fraction* time_signature, gpointer self) {
451 #line 452 "ClipLibraryView.c"
452         clip_library_view_on_time_signature_changed (self, time_signature);
453 }
454
455
456 #line 264 "ClipLibraryView.vala"
457 static void _clip_library_view_on_drag_begin_gtk_widget_drag_begin (GtkWidget* _sender, GdkDragContext* context, gpointer self) {
458 #line 459 "ClipLibraryView.c"
459         clip_library_view_on_drag_begin (self, context);
460 }
461
462
463 #line 239 "ClipLibraryView.vala"
464 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) {
465 #line 466 "ClipLibraryView.c"
466         clip_library_view_on_drag_data_get (self, context, selection_data, info, time_);
467 }
468
469
470 #line 205 "ClipLibraryView.vala"
471 static void _clip_library_view_on_cursor_changed_gtk_tree_view_cursor_changed (GtkTreeView* _sender, gpointer self) {
472 #line 473 "ClipLibraryView.c"
473         clip_library_view_on_cursor_changed (self);
474 }
475
476
477 #line 124 "ClipLibraryView.vala"
478 static gboolean _clip_library_view_on_button_pressed_gtk_widget_button_press_event (GtkWidget* _sender, GdkEventButton* event, gpointer self) {
479 #line 480 "ClipLibraryView.c"
480         gboolean result;
481         result = clip_library_view_on_button_pressed (self, event);
482         return result;
483 }
484
485
486 #line 166 "ClipLibraryView.vala"
487 static gboolean _clip_library_view_on_button_released_gtk_widget_button_release_event (GtkWidget* _sender, GdkEventButton* event, gpointer self) {
488 #line 489 "ClipLibraryView.c"
489         gboolean result;
490         result = clip_library_view_on_button_released (self, event);
491         return result;
492 }
493
494
495 #line 42 "ClipLibraryView.vala"
496 ClipLibraryView* clip_library_view_construct (GType object_type, ModelProject* p, ModelTimeSystem* time_provider, const char* drag_message, GdkDragAction actions) {
497 #line 498 "ClipLibraryView.c"
498         GError * _inner_error_;
499         ClipLibraryView * self;
500         ModelProject* _tmp0_;
501         ModelTimeSystem* _tmp1_;
502         GtkIconTheme* _tmp2_;
503         GtkListStore* _tmp3_;
504         GtkTreeView* _tmp4_;
505         GtkTreeViewColumn* _tmp5_;
506         GtkTreeViewColumn* name_column;
507         GtkTreeViewColumn* _tmp6_;
508         GdkColor _tmp11_;
509         GdkColor _tmp10_ = {0};
510         GdkColor _tmp13_;
511         GdkColor _tmp12_ = {0};
512         GtkTreeSelection* _tmp14_;
513 #line 42 "ClipLibraryView.vala"
514         g_return_val_if_fail (MODEL_IS_PROJECT (p), NULL);
515 #line 42 "ClipLibraryView.vala"
516         g_return_val_if_fail (MODEL_IS_TIME_SYSTEM (time_provider), NULL);
517 #line 518 "ClipLibraryView.c"
518         _inner_error_ = NULL;
519         self = g_object_newv (object_type, 0, NULL);
520 #line 44 "ClipLibraryView.vala"
521         gtk_drag_dest_set (GTK_WIDGET (self), GTK_DEST_DEFAULT_ALL, drag_target_entries, G_N_ELEMENTS (drag_target_entries), GDK_ACTION_COPY);
522 #line 45 "ClipLibraryView.vala"
523         self->priv->project = (_tmp0_ = _g_object_ref0 (p), _g_object_unref0 (self->priv->project), _tmp0_);
524 #line 46 "ClipLibraryView.vala"
525         self->priv->time_provider = (_tmp1_ = _g_object_ref0 (time_provider), _g_object_unref0 (self->priv->time_provider), _tmp1_);
526 #line 48 "ClipLibraryView.vala"
527         self->priv->icon_theme = (_tmp2_ = _g_object_ref0 (gtk_icon_theme_get_default ()), _g_object_unref0 (self->priv->icon_theme), _tmp2_);
528 #line 50 "ClipLibraryView.vala"
529         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_);
530 #line 53 "ClipLibraryView.vala"
531         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_);
532 #line 55 "ClipLibraryView.vala"
533         _tmp5_ = clip_library_view_add_column (self, CLIP_LIBRARY_VIEW_COLUMN_TYPE_THUMBNAIL);
534 #line 535 "ClipLibraryView.c"
535         _g_object_unref0 (_tmp5_);
536 #line 56 "ClipLibraryView.vala"
537         name_column = clip_library_view_add_column (self, CLIP_LIBRARY_VIEW_COLUMN_TYPE_NAME);
538 #line 57 "ClipLibraryView.vala"
539         _tmp6_ = clip_library_view_add_column (self, CLIP_LIBRARY_VIEW_COLUMN_TYPE_DURATION);
540 #line 541 "ClipLibraryView.c"
541         _g_object_unref0 (_tmp6_);
542 #line 58 "ClipLibraryView.vala"
543         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);
544 #line 59 "ClipLibraryView.vala"
545         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);
546 #line 61 "ClipLibraryView.vala"
547         self->priv->num_clipfiles = 0;
548 #line 62 "ClipLibraryView.vala"
549         if (drag_message != NULL) {
550 #line 551 "ClipLibraryView.c"
551                 GtkLabel* _tmp7_;
552                 GdkColor _tmp9_;
553                 GdkColor _tmp8_ = {0};
554 #line 63 "ClipLibraryView.vala"
555                 self->priv->label = (_tmp7_ = g_object_ref_sink ((GtkLabel*) gtk_label_new (drag_message)), _g_object_unref0 (self->priv->label), _tmp7_);
556 #line 64 "ClipLibraryView.vala"
557                 gtk_widget_modify_fg (GTK_WIDGET (self->priv->label), GTK_STATE_NORMAL, (_tmp9_ = (parse_color ("#fff", &_tmp8_), _tmp8_), &_tmp9_));
558 #line 559 "ClipLibraryView.c"
559         }
560 #line 67 "ClipLibraryView.vala"
561         gtk_widget_modify_bg (GTK_WIDGET (self), GTK_STATE_NORMAL, (_tmp11_ = (parse_color ("#444", &_tmp10_), _tmp10_), &_tmp11_));
562 #line 68 "ClipLibraryView.vala"
563         gtk_widget_modify_base (GTK_WIDGET (self->priv->tree_view), GTK_STATE_NORMAL, (_tmp13_ = (parse_color ("#444", &_tmp12_), _tmp12_), &_tmp13_));
564 #line 70 "ClipLibraryView.vala"
565         gtk_tree_view_set_headers_visible (self->priv->tree_view, FALSE);
566 #line 71 "ClipLibraryView.vala"
567         g_signal_connect_object (self->priv->project, "clipfile-added", (GCallback) _clip_library_view_on_clipfile_added_model_project_clipfile_added, self, 0);
568 #line 72 "ClipLibraryView.vala"
569         g_signal_connect_object (self->priv->project, "clipfile-removed", (GCallback) _clip_library_view_on_clipfile_removed_model_project_clipfile_removed, self, 0);
570 #line 73 "ClipLibraryView.vala"
571         g_signal_connect_object (self->priv->project, "cleared", (GCallback) _clip_library_view_on_remove_all_rows_model_project_cleared, self, 0);
572 #line 74 "ClipLibraryView.vala"
573         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);
574 #line 76 "ClipLibraryView.vala"
575         gtk_drag_source_set (GTK_WIDGET (self->priv->tree_view), GDK_BUTTON1_MASK, drag_target_entries, G_N_ELEMENTS (drag_target_entries), actions);
576 #line 77 "ClipLibraryView.vala"
577         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);
578 #line 78 "ClipLibraryView.vala"
579         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);
580 #line 79 "ClipLibraryView.vala"
581         g_signal_connect_object (self->priv->tree_view, "cursor-changed", (GCallback) _clip_library_view_on_cursor_changed_gtk_tree_view_cursor_changed, self, 0);
582 #line 81 "ClipLibraryView.vala"
583         self->priv->selection = (_tmp14_ = _g_object_ref0 (gtk_tree_view_get_selection (self->priv->tree_view)), _g_object_unref0 (self->priv->selection), _tmp14_);
584 #line 82 "ClipLibraryView.vala"
585         gtk_tree_selection_set_mode (self->priv->selection, GTK_SELECTION_MULTIPLE);
586 #line 83 "ClipLibraryView.vala"
587         if (self->priv->label != NULL) {
588 #line 84 "ClipLibraryView.vala"
589                 gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->priv->label));
590 #line 591 "ClipLibraryView.c"
591         }
592 #line 92 "ClipLibraryView.vala"
593         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);
594 #line 93 "ClipLibraryView.vala"
595         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);
596 #line 597 "ClipLibraryView.c"
597         {
598                 GdkPixbuf* _tmp15_;
599                 GdkPixbuf* _tmp16_;
600                 GdkPixbuf* _tmp17_;
601                 GdkPixbuf* _tmp18_;
602                 GdkPixbuf* _tmp19_;
603                 GdkPixbuf* _tmp20_;
604 #line 97 "ClipLibraryView.vala"
605                 _tmp15_ = gtk_icon_theme_load_icon (self->priv->icon_theme, "audio-x-generic", 32, (GtkIconLookupFlags) 0, &_inner_error_);
606 #line 607 "ClipLibraryView.c"
607                 if (_inner_error_ != NULL) {
608                         goto __catch0_g_error;
609                 }
610 #line 96 "ClipLibraryView.vala"
611                 self->priv->default_audio_icon = (_tmp16_ = _g_object_ref0 (_tmp15_), _g_object_unref0 (self->priv->default_audio_icon), _tmp16_);
612 #line 99 "ClipLibraryView.vala"
613                 _tmp17_ = gtk_icon_theme_load_icon (self->priv->icon_theme, "video-x-generic", 32, (GtkIconLookupFlags) 0, &_inner_error_);
614 #line 615 "ClipLibraryView.c"
615                 if (_inner_error_ != NULL) {
616                         goto __catch0_g_error;
617                 }
618 #line 98 "ClipLibraryView.vala"
619                 self->priv->default_video_icon = (_tmp18_ = _g_object_ref0 (_tmp17_), _g_object_unref0 (self->priv->default_video_icon), _tmp18_);
620 #line 101 "ClipLibraryView.vala"
621                 _tmp19_ = gtk_icon_theme_load_icon (self->priv->icon_theme, "error", 32, (GtkIconLookupFlags) 0, &_inner_error_);
622 #line 623 "ClipLibraryView.c"
623                 if (_inner_error_ != NULL) {
624                         goto __catch0_g_error;
625                 }
626 #line 100 "ClipLibraryView.vala"
627                 self->priv->default_error_icon = (_tmp20_ = _g_object_ref0 (_tmp19_), _g_object_unref0 (self->priv->default_error_icon), _tmp20_);
628 #line 629 "ClipLibraryView.c"
629         }
630         goto __finally0;
631         __catch0_g_error:
632         {
633                 GError * e;
634                 e = _inner_error_;
635                 _inner_error_ = NULL;
636                 {
637                         _g_error_free0 (e);
638                 }
639         }
640         __finally0:
641         if (_inner_error_ != NULL) {
642                 _g_object_unref0 (name_column);
643                 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);
644                 g_clear_error (&_inner_error_);
645                 return NULL;
646         }
647 #line 106 "ClipLibraryView.vala"
648         self->priv->sort_mode = CLIP_LIBRARY_VIEW_SORT_MODE_ABC;
649 #line 650 "ClipLibraryView.c"
650         _g_object_unref0 (name_column);
651         return self;
652 }
653
654
655 #line 42 "ClipLibraryView.vala"
656 ClipLibraryView* clip_library_view_new (ModelProject* p, ModelTimeSystem* time_provider, const char* drag_message, GdkDragAction actions) {
657 #line 42 "ClipLibraryView.vala"
658         return clip_library_view_construct (TYPE_CLIP_LIBRARY_VIEW, p, time_provider, drag_message, actions);
659 #line 660 "ClipLibraryView.c"
660 }
661
662
663 #line 109 "ClipLibraryView.vala"
664 static GtkTreePath* clip_library_view_find_first_selected (ClipLibraryView* self) {
665 #line 666 "ClipLibraryView.c"
666         GtkTreePath* result = NULL;
667         GtkTreeIter it = {0};
668         GtkTreeModel* model;
669         gboolean b;
670 #line 109 "ClipLibraryView.vala"
671         g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), NULL);
672 #line 111 "ClipLibraryView.vala"
673         model = _g_object_ref0 (gtk_tree_view_get_model (self->priv->tree_view));
674 #line 113 "ClipLibraryView.vala"
675         b = gtk_tree_model_get_iter_first (model, &it);
676 #line 114 "ClipLibraryView.vala"
677         while (TRUE) {
678 #line 679 "ClipLibraryView.c"
679                 GtkTreePath* path;
680 #line 114 "ClipLibraryView.vala"
681                 if (!b) {
682 #line 114 "ClipLibraryView.vala"
683                         break;
684 #line 685 "ClipLibraryView.c"
685                 }
686 #line 115 "ClipLibraryView.vala"
687                 path = gtk_tree_model_get_path (model, &it);
688 #line 116 "ClipLibraryView.vala"
689                 if (gtk_tree_selection_path_is_selected (self->priv->selection, path)) {
690 #line 691 "ClipLibraryView.c"
691                         result = path;
692                         _g_object_unref0 (model);
693 #line 117 "ClipLibraryView.vala"
694                         return result;
695 #line 696 "ClipLibraryView.c"
696                 }
697 #line 119 "ClipLibraryView.vala"
698                 b = gtk_tree_model_iter_next (model, &it);
699 #line 700 "ClipLibraryView.c"
700                 _gtk_tree_path_free0 (path);
701         }
702         result = NULL;
703         _g_object_unref0 (model);
704 #line 121 "ClipLibraryView.vala"
705         return result;
706 #line 707 "ClipLibraryView.c"
707 }
708
709
710 #line 124 "ClipLibraryView.vala"
711 static gboolean clip_library_view_on_button_pressed (ClipLibraryView* self, GdkEventButton* b) {
712 #line 713 "ClipLibraryView.c"
713         gboolean result = FALSE;
714         GtkTreePath* path;
715         gint cell_x = 0;
716         gint cell_y = 0;
717         GtkTreePath* _tmp1_;
718         GtkTreePath* _tmp0_ = NULL;
719         gboolean shift_pressed;
720         gboolean control_pressed;
721         gboolean _tmp2_ = FALSE;
722 #line 124 "ClipLibraryView.vala"
723         g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), FALSE);
724 #line 125 "ClipLibraryView.vala"
725         logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_button_pressed");
726 #line 727 "ClipLibraryView.c"
727         path = NULL;
728 #line 131 "ClipLibraryView.vala"
729         gtk_tree_view_get_path_at_pos (self->priv->tree_view, (gint) (*b).x, (gint) (*b).y, &_tmp0_, NULL, &cell_x, &cell_y);
730 #line 131 "ClipLibraryView.vala"
731         path = (_tmp1_ = _tmp0_, _gtk_tree_path_free0 (path), _tmp1_);
732 #line 133 "ClipLibraryView.vala"
733         if (path == NULL) {
734 #line 134 "ClipLibraryView.vala"
735                 gtk_tree_selection_unselect_all (self->priv->selection);
736 #line 737 "ClipLibraryView.c"
737                 result = TRUE;
738                 _gtk_tree_path_free0 (path);
739 #line 135 "ClipLibraryView.vala"
740                 return result;
741 #line 742 "ClipLibraryView.c"
742         }
743 #line 138 "ClipLibraryView.vala"
744         shift_pressed = ((*b).state & GDK_SHIFT_MASK) != 0;
745 #line 139 "ClipLibraryView.vala"
746         control_pressed = ((*b).state & GDK_CONTROL_MASK) != 0;
747 #line 141 "ClipLibraryView.vala"
748         if (!control_pressed) {
749 #line 142 "ClipLibraryView.vala"
750                 _tmp2_ = !shift_pressed;
751 #line 752 "ClipLibraryView.c"
752         } else {
753 #line 141 "ClipLibraryView.vala"
754                 _tmp2_ = FALSE;
755 #line 756 "ClipLibraryView.c"
756         }
757 #line 141 "ClipLibraryView.vala"
758         if (_tmp2_) {
759 #line 143 "ClipLibraryView.vala"
760                 if (!gtk_tree_selection_path_is_selected (self->priv->selection, path)) {
761 #line 144 "ClipLibraryView.vala"
762                         gtk_tree_selection_unselect_all (self->priv->selection);
763 #line 764 "ClipLibraryView.c"
764                 }
765         } else {
766 #line 146 "ClipLibraryView.vala"
767                 if (shift_pressed) {
768 #line 769 "ClipLibraryView.c"
769                         GtkTreePath* first;
770 #line 147 "ClipLibraryView.vala"
771                         first = clip_library_view_find_first_selected (self);
772 #line 149 "ClipLibraryView.vala"
773                         if (first != NULL) {
774 #line 150 "ClipLibraryView.vala"
775                                 gtk_tree_selection_select_range (self->priv->selection, first, path);
776 #line 777 "ClipLibraryView.c"
777                         }
778                         _gtk_tree_path_free0 (first);
779                 }
780         }
781 #line 153 "ClipLibraryView.vala"
782         gtk_tree_selection_select_path (self->priv->selection, path);
783 #line 155 "ClipLibraryView.vala"
784         if ((*b).button == 3) {
785 #line 156 "ClipLibraryView.vala"
786                 g_signal_emit_by_name (self, "selection-changed", TRUE);
787 #line 157 "ClipLibraryView.vala"
788                 gtk_menu_shell_select_first (GTK_MENU_SHELL (clip_library_view_context_menu), TRUE);
789 #line 158 "ClipLibraryView.vala"
790                 gtk_menu_popup (clip_library_view_context_menu, NULL, NULL, NULL, NULL, (guint) 0, (*b).time);
791 #line 792 "ClipLibraryView.c"
792         } else {
793 #line 160 "ClipLibraryView.vala"
794                 gtk_menu_popdown (clip_library_view_context_menu);
795 #line 796 "ClipLibraryView.c"
796         }
797         result = TRUE;
798         _gtk_tree_path_free0 (path);
799 #line 163 "ClipLibraryView.vala"
800         return result;
801 #line 802 "ClipLibraryView.c"
802 }
803
804
805 #line 166 "ClipLibraryView.vala"
806 static gboolean clip_library_view_on_button_released (ClipLibraryView* self, GdkEventButton* b) {
807 #line 808 "ClipLibraryView.c"
808         gboolean result = FALSE;
809         GtkTreePath* path;
810         GtkTreeViewColumn* column;
811         gint cell_x = 0;
812         gint cell_y = 0;
813         GtkTreeViewColumn* _tmp3_;
814         GtkTreeViewColumn* _tmp2_ = NULL;
815         GtkTreePath* _tmp1_;
816         GtkTreePath* _tmp0_ = NULL;
817         gboolean _tmp4_ = FALSE;
818         gboolean shift_pressed;
819         gboolean control_pressed;
820         gboolean _tmp6_ = FALSE;
821 #line 166 "ClipLibraryView.vala"
822         g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), FALSE);
823 #line 167 "ClipLibraryView.vala"
824         logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_button_released");
825 #line 826 "ClipLibraryView.c"
826         path = NULL;
827         column = NULL;
828 #line 174 "ClipLibraryView.vala"
829         (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_));
830 #line 174 "ClipLibraryView.vala"
831         column = (_tmp3_ = _g_object_ref0 (_tmp2_), _g_object_unref0 (column), _tmp3_);
832 #line 185 "ClipLibraryView.vala"
833         if (path == NULL) {
834 #line 185 "ClipLibraryView.vala"
835                 _tmp4_ = TRUE;
836 #line 837 "ClipLibraryView.c"
837         } else {
838                 gboolean _tmp5_ = FALSE;
839 #line 186 "ClipLibraryView.vala"
840                 if (cell_x == 0) {
841 #line 186 "ClipLibraryView.vala"
842                         _tmp5_ = cell_y == 0;
843 #line 844 "ClipLibraryView.c"
844                 } else {
845 #line 186 "ClipLibraryView.vala"
846                         _tmp5_ = FALSE;
847 #line 848 "ClipLibraryView.c"
848                 }
849 #line 186 "ClipLibraryView.vala"
850                 _tmp4_ = _tmp5_;
851 #line 852 "ClipLibraryView.c"
852         }
853 #line 185 "ClipLibraryView.vala"
854         if (_tmp4_) {
855 #line 187 "ClipLibraryView.vala"
856                 g_signal_emit_by_name (self, "selection-changed", FALSE);
857 #line 858 "ClipLibraryView.c"
858                 result = TRUE;
859                 _gtk_tree_path_free0 (path);
860                 _g_object_unref0 (column);
861 #line 188 "ClipLibraryView.vala"
862                 return result;
863 #line 864 "ClipLibraryView.c"
864         }
865 #line 191 "ClipLibraryView.vala"
866         shift_pressed = ((*b).state & GDK_SHIFT_MASK) != 0;
867 #line 192 "ClipLibraryView.vala"
868         control_pressed = ((*b).state & GDK_CONTROL_MASK) != 0;
869 #line 194 "ClipLibraryView.vala"
870         if (!control_pressed) {
871 #line 195 "ClipLibraryView.vala"
872                 _tmp6_ = !shift_pressed;
873 #line 874 "ClipLibraryView.c"
874         } else {
875 #line 194 "ClipLibraryView.vala"
876                 _tmp6_ = FALSE;
877 #line 878 "ClipLibraryView.c"
878         }
879 #line 194 "ClipLibraryView.vala"
880         if (_tmp6_) {
881 #line 196 "ClipLibraryView.vala"
882                 if (gtk_tree_selection_path_is_selected (self->priv->selection, path)) {
883 #line 197 "ClipLibraryView.vala"
884                         gtk_tree_selection_unselect_all (self->priv->selection);
885 #line 886 "ClipLibraryView.c"
886                 }
887         }
888 #line 199 "ClipLibraryView.vala"
889         gtk_tree_selection_select_path (self->priv->selection, path);
890 #line 200 "ClipLibraryView.vala"
891         g_signal_emit_by_name (self, "selection-changed", TRUE);
892 #line 893 "ClipLibraryView.c"
893         result = TRUE;
894         _gtk_tree_path_free0 (path);
895         _g_object_unref0 (column);
896 #line 202 "ClipLibraryView.vala"
897         return result;
898 #line 899 "ClipLibraryView.c"
899 }
900
901
902 #line 205 "ClipLibraryView.vala"
903 static void clip_library_view_on_cursor_changed (ClipLibraryView* self) {
904 #line 205 "ClipLibraryView.vala"
905         g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
906 #line 206 "ClipLibraryView.vala"
907         logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_cursor_changed");
908 #line 207 "ClipLibraryView.vala"
909         g_signal_emit_by_name (self, "selection-changed", clip_library_view_has_selection (self));
910 #line 911 "ClipLibraryView.c"
911 }
912
913
914 #line 210 "ClipLibraryView.vala"
915 void clip_library_view_unselect_all (ClipLibraryView* self) {
916 #line 210 "ClipLibraryView.vala"
917         g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
918 #line 211 "ClipLibraryView.vala"
919         gtk_tree_selection_unselect_all (self->priv->selection);
920 #line 212 "ClipLibraryView.vala"
921         g_signal_emit_by_name (self, "selection-changed", FALSE);
922 #line 923 "ClipLibraryView.c"
923 }
924
925
926 #line 215 "ClipLibraryView.vala"
927 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) {
928 #line 929 "ClipLibraryView.c"
929         ClipLibraryView * self;
930         GError * _inner_error_;
931         char** _tmp1_;
932         gint _a_size_;
933         gint a_length1;
934         char** _tmp0_;
935         char** a;
936         self = CLIP_LIBRARY_VIEW (base);
937 #line 215 "ClipLibraryView.vala"
938         g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
939 #line 215 "ClipLibraryView.vala"
940         g_return_if_fail (selection_data != NULL);
941 #line 942 "ClipLibraryView.c"
942         _inner_error_ = NULL;
943 #line 218 "ClipLibraryView.vala"
944         logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_drag_data_received");
945 #line 946 "ClipLibraryView.c"
946         a = (_tmp1_ = _tmp0_ = gtk_selection_data_get_uris (selection_data), a_length1 = _vala_array_length (_tmp0_), _a_size_ = a_length1, _tmp1_);
947 #line 220 "ClipLibraryView.vala"
948         gtk_drag_finish (context, TRUE, FALSE, (guint32) time);
949 #line 222 "ClipLibraryView.vala"
950         model_project_create_clip_importer (self->priv->project, NULL, FALSE, (gint64) 0, FALSE, GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self))), a_length1);
951 #line 952 "ClipLibraryView.c"
952         {
953                 {
954                         char** s_collection;
955                         int s_collection_length1;
956                         int s_it;
957 #line 225 "ClipLibraryView.vala"
958                         s_collection = a;
959 #line 960 "ClipLibraryView.c"
960                         s_collection_length1 = a_length1;
961                         for (s_it = 0; s_it < a_length1; s_it = s_it + 1) {
962                                 char* s;
963                                 s = g_strdup (s_collection[s_it]);
964                                 {
965                                         char* filename;
966                                         filename = NULL;
967                                         {
968                                                 char* _tmp2_;
969                                                 char* _tmp3_;
970 #line 228 "ClipLibraryView.vala"
971                                                 _tmp2_ = g_filename_from_uri (s, NULL, &_inner_error_);
972 #line 973 "ClipLibraryView.c"
973                                                 if (_inner_error_ != NULL) {
974                                                         if (_inner_error_->domain == G_CONVERT_ERROR) {
975                                                                 goto __catch2_g_convert_error;
976                                                         }
977                                                         _g_free0 (s);
978                                                         _g_free0 (filename);
979                                                         a = (_vala_array_free (a, a_length1, (GDestroyNotify) g_free), NULL);
980                                                         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);
981                                                         g_clear_error (&_inner_error_);
982                                                         return;
983                                                 }
984 #line 228 "ClipLibraryView.vala"
985                                                 filename = (_tmp3_ = _tmp2_, _g_free0 (filename), _tmp3_);
986 #line 987 "ClipLibraryView.c"
987                                         }
988                                         goto __finally2;
989                                         __catch2_g_convert_error:
990                                         {
991                                                 GError * e;
992                                                 e = _inner_error_;
993                                                 _inner_error_ = NULL;
994                                                 {
995                                                         _g_error_free0 (e);
996                                                         _g_free0 (s);
997                                                         _g_free0 (filename);
998 #line 229 "ClipLibraryView.vala"
999                                                         continue;
1000 #line 1001 "ClipLibraryView.c"
1001                                                 }
1002                                         }
1003                                         __finally2:
1004                                         if (_inner_error_ != NULL) {
1005                                                 _g_free0 (s);
1006                                                 _g_free0 (filename);
1007                                                 goto __catch1_g_error;
1008                                         }
1009 #line 230 "ClipLibraryView.vala"
1010                                         model_library_importer_add_file (self->priv->project->importer, filename, &_inner_error_);
1011 #line 1012 "ClipLibraryView.c"
1012                                         if (_inner_error_ != NULL) {
1013                                                 _g_free0 (s);
1014                                                 _g_free0 (filename);
1015                                                 goto __catch1_g_error;
1016                                         }
1017                                         _g_free0 (s);
1018                                         _g_free0 (filename);
1019                                 }
1020                         }
1021                 }
1022 #line 232 "ClipLibraryView.vala"
1023                 model_library_importer_start (self->priv->project->importer, &_inner_error_);
1024 #line 1025 "ClipLibraryView.c"
1025                 if (_inner_error_ != NULL) {
1026                         goto __catch1_g_error;
1027                 }
1028         }
1029         goto __finally1;
1030         __catch1_g_error:
1031         {
1032                 GError * e;
1033                 e = _inner_error_;
1034                 _inner_error_ = NULL;
1035                 {
1036 #line 234 "ClipLibraryView.vala"
1037                         g_signal_emit_by_name (self->priv->project, "error-occurred", "Error importing", e->message);
1038 #line 1039 "ClipLibraryView.c"
1039                         _g_error_free0 (e);
1040                 }
1041         }
1042         __finally1:
1043         if (_inner_error_ != NULL) {
1044                 a = (_vala_array_free (a, a_length1, (GDestroyNotify) g_free), NULL);
1045                 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);
1046                 g_clear_error (&_inner_error_);
1047                 return;
1048         }
1049         a = (_vala_array_free (a, a_length1, (GDestroyNotify) g_free), NULL);
1050 }
1051
1052
1053 static void _vala_array_add1 (char*** array, int* length, int* size, char* value) {
1054         if ((*length) == (*size)) {
1055                 *size = (*size) ? (2 * (*size)) : 4;
1056                 *array = g_renew (char*, *array, (*size) + 1);
1057         }
1058         (*array)[(*length)++] = value;
1059         (*array)[*length] = NULL;
1060 }
1061
1062
1063 #line 239 "ClipLibraryView.vala"
1064 static void clip_library_view_on_drag_data_get (ClipLibraryView* self, GdkDragContext* context, GtkSelectionData* data, guint info, guint time) {
1065 #line 1066 "ClipLibraryView.c"
1066         GError * _inner_error_;
1067         char* uri;
1068         char** _tmp0_;
1069         gint _uri_array_size_;
1070         gint uri_array_length1;
1071         char** uri_array;
1072 #line 239 "ClipLibraryView.vala"
1073         g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
1074 #line 239 "ClipLibraryView.vala"
1075         g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
1076 #line 239 "ClipLibraryView.vala"
1077         g_return_if_fail (data != NULL);
1078 #line 1079 "ClipLibraryView.c"
1079         _inner_error_ = NULL;
1080 #line 241 "ClipLibraryView.vala"
1081         logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_drag_data_get");
1082 #line 1083 "ClipLibraryView.c"
1083         uri = NULL;
1084         uri_array = (_tmp0_ = g_new0 (char*, 0 + 1), uri_array_length1 = 0, _uri_array_size_ = uri_array_length1, _tmp0_);
1085         {
1086                 GeeIterator* _s_it;
1087                 _s_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->priv->files_dragging));
1088 #line 245 "ClipLibraryView.vala"
1089                 while (TRUE) {
1090 #line 1091 "ClipLibraryView.c"
1091                         char* s;
1092 #line 245 "ClipLibraryView.vala"
1093                         if (!gee_iterator_next (_s_it)) {
1094 #line 245 "ClipLibraryView.vala"
1095                                 break;
1096 #line 1097 "ClipLibraryView.c"
1097                         }
1098 #line 245 "ClipLibraryView.vala"
1099                         s = (char*) gee_iterator_get (_s_it);
1100 #line 1101 "ClipLibraryView.c"
1101                         {
1102                                 char* _tmp1_;
1103                                 char* _tmp2_;
1104 #line 247 "ClipLibraryView.vala"
1105                                 _tmp1_ = g_filename_to_uri (s, NULL, &_inner_error_);
1106 #line 1107 "ClipLibraryView.c"
1107                                 if (_inner_error_ != NULL) {
1108                                         if (_inner_error_->domain == G_CONVERT_ERROR) {
1109                                                 goto __catch3_g_convert_error;
1110                                         }
1111                                         _g_free0 (s);
1112                                         _g_object_unref0 (_s_it);
1113                                         _g_free0 (uri);
1114                                         uri_array = (_vala_array_free (uri_array, uri_array_length1, (GDestroyNotify) g_free), NULL);
1115                                         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);
1116                                         g_clear_error (&_inner_error_);
1117                                         return;
1118                                 }
1119 #line 247 "ClipLibraryView.vala"
1120                                 uri = (_tmp2_ = _tmp1_, _g_free0 (uri), _tmp2_);
1121 #line 1122 "ClipLibraryView.c"
1122                         }
1123                         goto __finally3;
1124                         __catch3_g_convert_error:
1125                         {
1126                                 GError * e;
1127                                 e = _inner_error_;
1128                                 _inner_error_ = NULL;
1129                                 {
1130                                         char* _tmp3_;
1131 #line 249 "ClipLibraryView.vala"
1132                                         uri = (_tmp3_ = g_strdup (s), _g_free0 (uri), _tmp3_);
1133 #line 250 "ClipLibraryView.vala"
1134                                         g_warning ("ClipLibraryView.vala:250: Cannot get URI for %s! (%s)\n", s, e->message);
1135 #line 1136 "ClipLibraryView.c"
1136                                         _g_error_free0 (e);
1137                                 }
1138                         }
1139                         __finally3:
1140                         if (_inner_error_ != NULL) {
1141                                 _g_free0 (s);
1142                                 _g_object_unref0 (_s_it);
1143                                 _g_free0 (uri);
1144                                 uri_array = (_vala_array_free (uri_array, uri_array_length1, (GDestroyNotify) g_free), NULL);
1145                                 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);
1146                                 g_clear_error (&_inner_error_);
1147                                 return;
1148                         }
1149 #line 252 "ClipLibraryView.vala"
1150                         _vala_array_add1 (&uri_array, &uri_array_length1, &_uri_array_size_, g_strdup (uri));
1151 #line 1152 "ClipLibraryView.c"
1152                         _g_free0 (s);
1153                 }
1154                 _g_object_unref0 (_s_it);
1155         }
1156 #line 254 "ClipLibraryView.vala"
1157         gtk_selection_data_set_uris (data, uri_array);
1158 #line 256 "ClipLibraryView.vala"
1159         gtk_drag_set_icon_default (context);
1160 #line 1161 "ClipLibraryView.c"
1161         _g_free0 (uri);
1162         uri_array = (_vala_array_free (uri_array, uri_array_length1, (GDestroyNotify) g_free), NULL);
1163 }
1164
1165
1166 static void _g_list_free_gtk_tree_path_free (GList* self) {
1167         g_list_foreach (self, (GFunc) gtk_tree_path_free, NULL);
1168         g_list_free (self);
1169 }
1170
1171
1172 #line 259 "ClipLibraryView.vala"
1173 static gint clip_library_view_get_selected_rows (ClipLibraryView* self, GList** paths) {
1174 #line 1175 "ClipLibraryView.c"
1175         gint result = 0;
1176         GList* _tmp0_;
1177 #line 259 "ClipLibraryView.vala"
1178         g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), 0);
1179 #line 1180 "ClipLibraryView.c"
1180         if (paths != NULL) {
1181                 *paths = NULL;
1182         }
1183 #line 260 "ClipLibraryView.vala"
1184         *paths = (_tmp0_ = gtk_tree_selection_get_selected_rows (self->priv->selection, NULL), __g_list_free_gtk_tree_path_free0 (*paths), _tmp0_);
1185 #line 1186 "ClipLibraryView.c"
1186         result = (gint) g_list_length (*paths);
1187 #line 261 "ClipLibraryView.vala"
1188         return result;
1189 #line 1190 "ClipLibraryView.c"
1190 }
1191
1192
1193 static gpointer _gtk_tree_path_copy0 (gpointer self) {
1194         return self ? gtk_tree_path_copy (self) : NULL;
1195 }
1196
1197
1198 #line 264 "ClipLibraryView.vala"
1199 static void clip_library_view_on_drag_begin (ClipLibraryView* self, GdkDragContext* c) {
1200 #line 1201 "ClipLibraryView.c"
1201         GList* paths;
1202         GList* _tmp2_;
1203         gint _tmp1_;
1204         GList* _tmp0_ = NULL;
1205 #line 264 "ClipLibraryView.vala"
1206         g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
1207 #line 264 "ClipLibraryView.vala"
1208         g_return_if_fail (GDK_IS_DRAG_CONTEXT (c));
1209 #line 265 "ClipLibraryView.vala"
1210         logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_drag_begin");
1211 #line 1212 "ClipLibraryView.c"
1212         paths = NULL;
1213 #line 267 "ClipLibraryView.vala"
1214         if ((_tmp1_ = clip_library_view_get_selected_rows (self, &_tmp0_), paths = (_tmp2_ = _tmp0_, __g_list_free_gtk_tree_path_free0 (paths), _tmp2_), _tmp1_) > 0) {
1215 #line 1216 "ClipLibraryView.c"
1216                 gboolean set_pixbuf;
1217 #line 268 "ClipLibraryView.vala"
1218                 set_pixbuf = FALSE;
1219 #line 269 "ClipLibraryView.vala"
1220                 gee_abstract_collection_clear (GEE_ABSTRACT_COLLECTION (self->priv->files_dragging));
1221 #line 1222 "ClipLibraryView.c"
1222                 {
1223                         GList* t_collection;
1224                         GList* t_it;
1225 #line 270 "ClipLibraryView.vala"
1226                         t_collection = paths;
1227 #line 1228 "ClipLibraryView.c"
1228                         for (t_it = t_collection; t_it != NULL; t_it = t_it->next) {
1229                                 GtkTreePath* t;
1230 #line 270 "ClipLibraryView.vala"
1231                                 t = _gtk_tree_path_copy0 ((GtkTreePath*) t_it->data);
1232 #line 1233 "ClipLibraryView.c"
1233                                 {
1234                                         GtkTreeIter iter = {0};
1235                                         char* filename;
1236 #line 272 "ClipLibraryView.vala"
1237                                         gtk_tree_model_get_iter (GTK_TREE_MODEL (self->priv->list_store), &iter, t);
1238 #line 1239 "ClipLibraryView.c"
1239                                         filename = NULL;
1240 #line 275 "ClipLibraryView.vala"
1241                                         gtk_tree_model_get (GTK_TREE_MODEL (self->priv->list_store), &iter, CLIP_LIBRARY_VIEW_COLUMN_TYPE_FILENAME, &filename, -1, -1);
1242 #line 276 "ClipLibraryView.vala"
1243                                         gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->priv->files_dragging), filename);
1244 #line 278 "ClipLibraryView.vala"
1245                                         if (!set_pixbuf) {
1246 #line 1247 "ClipLibraryView.c"
1247                                                 GdkPixbuf* pixbuf;
1248                                                 pixbuf = NULL;
1249 #line 280 "ClipLibraryView.vala"
1250                                                 gtk_tree_model_get (GTK_TREE_MODEL (self->priv->list_store), &iter, CLIP_LIBRARY_VIEW_COLUMN_TYPE_THUMBNAIL, &pixbuf, -1, -1);
1251 #line 282 "ClipLibraryView.vala"
1252                                                 gtk_drag_set_icon_pixbuf (c, pixbuf, 0, 0);
1253 #line 283 "ClipLibraryView.vala"
1254                                                 set_pixbuf = TRUE;
1255 #line 1256 "ClipLibraryView.c"
1256                                                 _g_object_unref0 (pixbuf);
1257                                         }
1258                                         _gtk_tree_path_free0 (t);
1259                                         _g_free0 (filename);
1260                                 }
1261                         }
1262                 }
1263         }
1264         __g_list_free_gtk_tree_path_free0 (paths);
1265 }
1266
1267
1268 #line 289 "ClipLibraryView.vala"
1269 static GtkTreeViewColumn* clip_library_view_add_column (ClipLibraryView* self, ClipLibraryViewColumnType c) {
1270 #line 1271 "ClipLibraryView.c"
1271         GtkTreeViewColumn* result = NULL;
1272         GtkTreeViewColumn* column;
1273         GtkCellRenderer* renderer;
1274 #line 289 "ClipLibraryView.vala"
1275         g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), NULL);
1276 #line 290 "ClipLibraryView.vala"
1277         column = g_object_ref_sink (gtk_tree_view_column_new ());
1278 #line 1279 "ClipLibraryView.c"
1279         renderer = NULL;
1280 #line 293 "ClipLibraryView.vala"
1281         if (c == CLIP_LIBRARY_VIEW_COLUMN_TYPE_THUMBNAIL) {
1282 #line 1283 "ClipLibraryView.c"
1283                 GtkCellRenderer* _tmp0_;
1284 #line 294 "ClipLibraryView.vala"
1285                 renderer = (_tmp0_ = GTK_CELL_RENDERER (g_object_ref_sink ((GtkCellRendererPixbuf*) gtk_cell_renderer_pixbuf_new ())), _g_object_unref0 (renderer), _tmp0_);
1286 #line 1287 "ClipLibraryView.c"
1287         } else {
1288                 GtkCellRenderer* _tmp1_;
1289                 GdkColor _tmp2_ = {0};
1290                 GdkColor color;
1291 #line 296 "ClipLibraryView.vala"
1292                 renderer = (_tmp1_ = GTK_CELL_RENDERER (g_object_ref_sink ((GtkCellRendererText*) gtk_cell_renderer_text_new ())), _g_object_unref0 (renderer), _tmp1_);
1293 #line 297 "ClipLibraryView.vala"
1294                 color = (parse_color ("#FFF", &_tmp2_), _tmp2_);
1295 #line 298 "ClipLibraryView.vala"
1296                 g_object_set (G_OBJECT (renderer), "foreground-gdk", &color, NULL);
1297 #line 1298 "ClipLibraryView.c"
1298         }
1299 #line 301 "ClipLibraryView.vala"
1300         gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (column), renderer, TRUE);
1301 #line 302 "ClipLibraryView.vala"
1302         gtk_tree_view_column_set_resizable (column, TRUE);
1303 #line 304 "ClipLibraryView.vala"
1304         if (c == CLIP_LIBRARY_VIEW_COLUMN_TYPE_THUMBNAIL) {
1305 #line 305 "ClipLibraryView.vala"
1306                 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (column), renderer, "pixbuf", gtk_tree_view_append_column (self->priv->tree_view, column) - 1);
1307 #line 1308 "ClipLibraryView.c"
1308         } else {
1309 #line 307 "ClipLibraryView.vala"
1310                 gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (column), renderer, "text", gtk_tree_view_append_column (self->priv->tree_view, column) - 1);
1311 #line 1312 "ClipLibraryView.c"
1312         }
1313         result = column;
1314         _g_object_unref0 (renderer);
1315 #line 309 "ClipLibraryView.vala"
1316         return result;
1317 #line 1318 "ClipLibraryView.c"
1318 }
1319
1320
1321 #line 312 "ClipLibraryView.vala"
1322 static void clip_library_view_update_iter (ClipLibraryView* self, GtkTreeIter* it, ModelClipFile* clip_file) {
1323 #line 1324 "ClipLibraryView.c"
1324         GdkPixbuf* icon;
1325         char* _tmp5_;
1326         char* _tmp4_;
1327 #line 312 "ClipLibraryView.vala"
1328         g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
1329 #line 312 "ClipLibraryView.vala"
1330         g_return_if_fail (MODEL_IS_CLIP_FILE (clip_file));
1331 #line 1332 "ClipLibraryView.c"
1332         icon = NULL;
1333 #line 315 "ClipLibraryView.vala"
1334         if (model_clip_file_is_online (clip_file)) {
1335 #line 316 "ClipLibraryView.vala"
1336                 if (clip_file->thumbnail == NULL) {
1337 #line 1338 "ClipLibraryView.c"
1338                         GdkPixbuf* _tmp0_;
1339                         GdkPixbuf* _tmp1_;
1340                         _tmp0_ = NULL;
1341 #line 317 "ClipLibraryView.vala"
1342                         if (model_clip_file_is_of_type (clip_file, MODEL_MEDIA_TYPE_VIDEO)) {
1343 #line 318 "ClipLibraryView.vala"
1344                                 _tmp0_ = self->priv->default_video_icon;
1345 #line 1346 "ClipLibraryView.c"
1346                         } else {
1347 #line 318 "ClipLibraryView.vala"
1348                                 _tmp0_ = self->priv->default_audio_icon;
1349 #line 1350 "ClipLibraryView.c"
1350                         }
1351 #line 317 "ClipLibraryView.vala"
1352                         icon = (_tmp1_ = _g_object_ref0 (_tmp0_), _g_object_unref0 (icon), _tmp1_);
1353 #line 1354 "ClipLibraryView.c"
1354                 } else {
1355                         GdkPixbuf* _tmp2_;
1356 #line 320 "ClipLibraryView.vala"
1357                         icon = (_tmp2_ = _g_object_ref0 (clip_file->thumbnail), _g_object_unref0 (icon), _tmp2_);
1358 #line 1359 "ClipLibraryView.c"
1359                 }
1360         } else {
1361                 GdkPixbuf* _tmp3_;
1362 #line 323 "ClipLibraryView.vala"
1363                 icon = (_tmp3_ = _g_object_ref0 (self->priv->default_error_icon), _g_object_unref0 (icon), _tmp3_);
1364 #line 1365 "ClipLibraryView.c"
1365         }
1366 #line 326 "ClipLibraryView.vala"
1367         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);
1368 #line 1369 "ClipLibraryView.c"
1369         _g_free0 (_tmp5_);
1370         _g_free0 (_tmp4_);
1371         _g_object_unref0 (icon);
1372 }
1373
1374
1375 #line 332 "ClipLibraryView.vala"
1376 static void clip_library_view_on_clipfile_added (ClipLibraryView* self, ModelClipFile* f) {
1377 #line 1378 "ClipLibraryView.c"
1378         GtkTreeIter it = {0};
1379 #line 332 "ClipLibraryView.vala"
1380         g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
1381 #line 332 "ClipLibraryView.vala"
1382         g_return_if_fail (MODEL_IS_CLIP_FILE (f));
1383 #line 333 "ClipLibraryView.vala"
1384         logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_file_added");
1385 #line 336 "ClipLibraryView.vala"
1386         if (clip_library_view_find_clipfile (self, f, &it) >= 0) {
1387 #line 337 "ClipLibraryView.vala"
1388                 gtk_list_store_remove (self->priv->list_store, &it);
1389 #line 1390 "ClipLibraryView.c"
1390         } else {
1391 #line 339 "ClipLibraryView.vala"
1392                 if (self->priv->num_clipfiles == 0) {
1393 #line 340 "ClipLibraryView.vala"
1394                         if (self->priv->label != NULL) {
1395 #line 341 "ClipLibraryView.vala"
1396                                 gtk_container_remove (GTK_CONTAINER (self), GTK_WIDGET (self->priv->label));
1397 #line 1398 "ClipLibraryView.c"
1398                         }
1399 #line 343 "ClipLibraryView.vala"
1400                         gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->priv->tree_view));
1401 #line 344 "ClipLibraryView.vala"
1402                         gtk_widget_show (GTK_WIDGET (self->priv->tree_view));
1403 #line 1404 "ClipLibraryView.c"
1404                 }
1405 #line 346 "ClipLibraryView.vala"
1406                 self->priv->num_clipfiles++;
1407 #line 1408 "ClipLibraryView.c"
1408         }
1409 #line 349 "ClipLibraryView.vala"
1410         gtk_list_store_append (self->priv->list_store, &it);
1411 #line 350 "ClipLibraryView.vala"
1412         clip_library_view_update_iter (self, &it, f);
1413 #line 1414 "ClipLibraryView.c"
1414 }
1415
1416
1417 #line 353 "ClipLibraryView.vala"
1418 static gint clip_library_view_find_clipfile (ClipLibraryView* self, ModelClipFile* f, GtkTreeIter* iter) {
1419 #line 1420 "ClipLibraryView.c"
1420         gint result = 0;
1421         GtkTreeModel* model;
1422         gboolean b;
1423         gint i;
1424 #line 353 "ClipLibraryView.vala"
1425         g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), 0);
1426 #line 353 "ClipLibraryView.vala"
1427         g_return_val_if_fail (MODEL_IS_CLIP_FILE (f), 0);
1428 #line 354 "ClipLibraryView.vala"
1429         model = _g_object_ref0 (gtk_tree_view_get_model (self->priv->tree_view));
1430 #line 356 "ClipLibraryView.vala"
1431         b = gtk_tree_model_get_iter_first (model, iter);
1432 #line 358 "ClipLibraryView.vala"
1433         i = 0;
1434 #line 359 "ClipLibraryView.vala"
1435         while (TRUE) {
1436 #line 1437 "ClipLibraryView.c"
1437                 char* filename;
1438 #line 359 "ClipLibraryView.vala"
1439                 if (!b) {
1440 #line 359 "ClipLibraryView.vala"
1441                         break;
1442 #line 1443 "ClipLibraryView.c"
1443                 }
1444                 filename = NULL;
1445 #line 361 "ClipLibraryView.vala"
1446                 gtk_tree_model_get (model, iter, CLIP_LIBRARY_VIEW_COLUMN_TYPE_FILENAME, &filename, -1);
1447 #line 363 "ClipLibraryView.vala"
1448                 if (_vala_strcmp0 (filename, f->filename) == 0) {
1449 #line 1450 "ClipLibraryView.c"
1450                         result = i;
1451                         _g_free0 (filename);
1452                         _g_object_unref0 (model);
1453 #line 364 "ClipLibraryView.vala"
1454                         return result;
1455 #line 1456 "ClipLibraryView.c"
1456                 }
1457 #line 366 "ClipLibraryView.vala"
1458                 i++;
1459 #line 367 "ClipLibraryView.vala"
1460                 b = gtk_tree_model_iter_next (model, iter);
1461 #line 1462 "ClipLibraryView.c"
1462                 _g_free0 (filename);
1463         }
1464         result = -1;
1465         _g_object_unref0 (model);
1466 #line 369 "ClipLibraryView.vala"
1467         return result;
1468 #line 1469 "ClipLibraryView.c"
1469 }
1470
1471
1472 #line 372 "ClipLibraryView.vala"
1473 void clip_library_view_on_clipfile_removed (ClipLibraryView* self, ModelClipFile* f) {
1474 #line 1475 "ClipLibraryView.c"
1475         GtkTreeIter it = {0};
1476 #line 372 "ClipLibraryView.vala"
1477         g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
1478 #line 372 "ClipLibraryView.vala"
1479         g_return_if_fail (MODEL_IS_CLIP_FILE (f));
1480 #line 373 "ClipLibraryView.vala"
1481         logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_file_removed");
1482 #line 376 "ClipLibraryView.vala"
1483         if (clip_library_view_find_clipfile (self, f, &it) >= 0) {
1484 #line 377 "ClipLibraryView.vala"
1485                 clip_library_view_remove_row (self, &it);
1486 #line 1487 "ClipLibraryView.c"
1487         }
1488 }
1489
1490
1491 #line 381 "ClipLibraryView.vala"
1492 static gboolean clip_library_view_remove_row (ClipLibraryView* self, GtkTreeIter* it) {
1493 #line 1494 "ClipLibraryView.c"
1494         gboolean result = FALSE;
1495         gboolean b;
1496 #line 381 "ClipLibraryView.vala"
1497         g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), FALSE);
1498 #line 382 "ClipLibraryView.vala"
1499         b = gtk_list_store_remove (self->priv->list_store, it);
1500 #line 383 "ClipLibraryView.vala"
1501         self->priv->num_clipfiles--;
1502 #line 384 "ClipLibraryView.vala"
1503         if (self->priv->num_clipfiles == 0) {
1504 #line 385 "ClipLibraryView.vala"
1505                 gtk_container_remove (GTK_CONTAINER (self), GTK_WIDGET (self->priv->tree_view));
1506 #line 386 "ClipLibraryView.vala"
1507                 if (self->priv->label != NULL) {
1508 #line 387 "ClipLibraryView.vala"
1509                         gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (self->priv->label));
1510 #line 388 "ClipLibraryView.vala"
1511                         gtk_widget_show (GTK_WIDGET (self->priv->label));
1512 #line 1513 "ClipLibraryView.c"
1513                 }
1514         }
1515         result = b;
1516 #line 391 "ClipLibraryView.vala"
1517         return result;
1518 #line 1519 "ClipLibraryView.c"
1519 }
1520
1521
1522 #line 394 "ClipLibraryView.vala"
1523 static void clip_library_view_on_remove_all_rows (ClipLibraryView* self) {
1524 #line 1525 "ClipLibraryView.c"
1525         GtkTreeModel* model;
1526         GtkTreeIter iter = {0};
1527         gboolean b;
1528 #line 394 "ClipLibraryView.vala"
1529         g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
1530 #line 395 "ClipLibraryView.vala"
1531         logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_remove_all_rows");
1532 #line 396 "ClipLibraryView.vala"
1533         model = _g_object_ref0 (gtk_tree_view_get_model (self->priv->tree_view));
1534 #line 399 "ClipLibraryView.vala"
1535         b = gtk_tree_model_get_iter_first (model, &iter);
1536 #line 401 "ClipLibraryView.vala"
1537         while (TRUE) {
1538 #line 401 "ClipLibraryView.vala"
1539                 if (!b) {
1540 #line 401 "ClipLibraryView.vala"
1541                         break;
1542 #line 1543 "ClipLibraryView.c"
1543                 }
1544 #line 402 "ClipLibraryView.vala"
1545                 b = clip_library_view_remove_row (self, &iter);
1546 #line 1547 "ClipLibraryView.c"
1547         }
1548         _g_object_unref0 (model);
1549 }
1550
1551
1552 #line 406 "ClipLibraryView.vala"
1553 static void clip_library_view_on_time_signature_changed (ClipLibraryView* self, Fraction* time_signature) {
1554 #line 1555 "ClipLibraryView.c"
1555         GtkTreeIter iter = {0};
1556         gboolean more_items;
1557 #line 406 "ClipLibraryView.vala"
1558         g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
1559 #line 407 "ClipLibraryView.vala"
1560         logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_time_signature_changed");
1561 #line 409 "ClipLibraryView.vala"
1562         more_items = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (self->priv->list_store), &iter);
1563 #line 410 "ClipLibraryView.vala"
1564         while (TRUE) {
1565 #line 1566 "ClipLibraryView.c"
1566                 char* filename;
1567                 ModelClipFile* clip_file;
1568                 char* _tmp0_;
1569 #line 410 "ClipLibraryView.vala"
1570                 if (!more_items) {
1571 #line 410 "ClipLibraryView.vala"
1572                         break;
1573 #line 1574 "ClipLibraryView.c"
1574                 }
1575                 filename = NULL;
1576 #line 412 "ClipLibraryView.vala"
1577                 gtk_tree_model_get (GTK_TREE_MODEL (self->priv->list_store), &iter, CLIP_LIBRARY_VIEW_COLUMN_TYPE_FILENAME, &filename, -1, -1);
1578 #line 413 "ClipLibraryView.vala"
1579                 clip_file = model_project_find_clipfile (self->priv->project, filename);
1580 #line 414 "ClipLibraryView.vala"
1581                 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);
1582 #line 1583 "ClipLibraryView.c"
1583                 _g_free0 (_tmp0_);
1584 #line 416 "ClipLibraryView.vala"
1585                 more_items = gtk_tree_model_iter_next (GTK_TREE_MODEL (self->priv->list_store), &iter);
1586 #line 1587 "ClipLibraryView.c"
1587                 _g_free0 (filename);
1588                 _g_object_unref0 (clip_file);
1589         }
1590 }
1591
1592
1593 #line 420 "ClipLibraryView.vala"
1594 static void clip_library_view_delete_row (ClipLibraryView* self, GtkTreeModel* model, GtkTreePath* path) {
1595 #line 1596 "ClipLibraryView.c"
1596         GtkTreeIter it = {0};
1597 #line 420 "ClipLibraryView.vala"
1598         g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
1599 #line 420 "ClipLibraryView.vala"
1600         g_return_if_fail (GTK_IS_TREE_MODEL (model));
1601 #line 420 "ClipLibraryView.vala"
1602         g_return_if_fail (path != NULL);
1603 #line 422 "ClipLibraryView.vala"
1604         if (gtk_tree_model_get_iter (GTK_TREE_MODEL (self->priv->list_store), &it, path)) {
1605 #line 1606 "ClipLibraryView.c"
1606                 char* filename;
1607                 char* _tmp1_;
1608                 char* _tmp0_;
1609                 gboolean _tmp2_;
1610                 filename = NULL;
1611 #line 424 "ClipLibraryView.vala"
1612                 gtk_tree_model_get (model, &it, CLIP_LIBRARY_VIEW_COLUMN_TYPE_FILENAME, &filename, -1, -1);
1613 #line 425 "ClipLibraryView.vala"
1614                 if (model_project_clipfile_on_track (self->priv->project, filename)) {
1615 #line 426 "ClipLibraryView.vala"
1616                         if (dialog_utils_delete_cancel ("Clip is in use.  Delete anyway?") != GTK_RESPONSE_YES) {
1617 #line 1618 "ClipLibraryView.c"
1618                                 _g_free0 (filename);
1619 #line 428 "ClipLibraryView.vala"
1620                                 return;
1621 #line 1622 "ClipLibraryView.c"
1622                         }
1623                 }
1624 #line 431 "ClipLibraryView.vala"
1625                 model_project_remove_clipfile (self->priv->project, filename);
1626 #line 433 "ClipLibraryView.vala"
1627                 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_)) {
1628 #line 434 "ClipLibraryView.vala"
1629                         if (dialog_utils_delete_keep ("Delete clip from disk?  This action is not undoable.") == GTK_RESPONSE_YES) {
1630 #line 436 "ClipLibraryView.vala"
1631                                 if (g_unlink (filename) != 0) {
1632 #line 437 "ClipLibraryView.vala"
1633                                         g_signal_emit_by_name (self->priv->project, "error-occurred", "Could not delete %s", filename);
1634 #line 1635 "ClipLibraryView.c"
1635                                 }
1636 #line 439 "ClipLibraryView.vala"
1637                                 model_undo_manager_reset (self->priv->project->undo_manager);
1638 #line 1639 "ClipLibraryView.c"
1639                         }
1640                 }
1641                 _g_free0 (filename);
1642         }
1643 }
1644
1645
1646 #line 445 "ClipLibraryView.vala"
1647 gboolean clip_library_view_has_selection (ClipLibraryView* self) {
1648 #line 1649 "ClipLibraryView.c"
1649         gboolean result = FALSE;
1650         GList* paths;
1651         GList* _tmp2_;
1652         gint _tmp1_;
1653         GList* _tmp0_ = NULL;
1654 #line 445 "ClipLibraryView.vala"
1655         g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), FALSE);
1656 #line 1657 "ClipLibraryView.c"
1657         paths = NULL;
1658         result = (_tmp1_ = clip_library_view_get_selected_rows (self, &_tmp0_), paths = (_tmp2_ = _tmp0_, __g_list_free_gtk_tree_path_free0 (paths), _tmp2_), _tmp1_) != 0;
1659         __g_list_free_gtk_tree_path_free0 (paths);
1660 #line 447 "ClipLibraryView.vala"
1661         return result;
1662 #line 1663 "ClipLibraryView.c"
1663         __g_list_free_gtk_tree_path_free0 (paths);
1664 }
1665
1666
1667 #line 450 "ClipLibraryView.vala"
1668 GeeArrayList* clip_library_view_get_selected_files (ClipLibraryView* self) {
1669 #line 1670 "ClipLibraryView.c"
1670         GeeArrayList* result = NULL;
1671         GList* paths;
1672         GeeArrayList* return_value;
1673         GList* _tmp2_;
1674         gint _tmp1_;
1675         GList* _tmp0_ = NULL;
1676 #line 450 "ClipLibraryView.vala"
1677         g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), NULL);
1678 #line 1679 "ClipLibraryView.c"
1679         paths = NULL;
1680 #line 452 "ClipLibraryView.vala"
1681         return_value = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL);
1682 #line 453 "ClipLibraryView.vala"
1683         if ((_tmp1_ = clip_library_view_get_selected_rows (self, &_tmp0_), paths = (_tmp2_ = _tmp0_, __g_list_free_gtk_tree_path_free0 (paths), _tmp2_), _tmp1_) != 0) {
1684 #line 1685 "ClipLibraryView.c"
1685                 {
1686                         GList* path_collection;
1687                         GList* path_it;
1688 #line 454 "ClipLibraryView.vala"
1689                         path_collection = paths;
1690 #line 1691 "ClipLibraryView.c"
1691                         for (path_it = path_collection; path_it != NULL; path_it = path_it->next) {
1692                                 GtkTreePath* path;
1693 #line 454 "ClipLibraryView.vala"
1694                                 path = _gtk_tree_path_copy0 ((GtkTreePath*) path_it->data);
1695 #line 1696 "ClipLibraryView.c"
1696                                 {
1697                                         GtkTreeIter iter = {0};
1698 #line 456 "ClipLibraryView.vala"
1699                                         if (gtk_tree_model_get_iter (GTK_TREE_MODEL (self->priv->list_store), &iter, path)) {
1700 #line 1701 "ClipLibraryView.c"
1701                                                 char* name;
1702                                                 name = NULL;
1703 #line 458 "ClipLibraryView.vala"
1704                                                 gtk_tree_model_get (GTK_TREE_MODEL (self->priv->list_store), &iter, CLIP_LIBRARY_VIEW_COLUMN_TYPE_FILENAME, &name, -1, -1);
1705 #line 459 "ClipLibraryView.vala"
1706                                                 gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (return_value), name);
1707 #line 1708 "ClipLibraryView.c"
1708                                                 _g_free0 (name);
1709                                         }
1710                                         _gtk_tree_path_free0 (path);
1711                                 }
1712                         }
1713                 }
1714         }
1715         result = return_value;
1716         __g_list_free_gtk_tree_path_free0 (paths);
1717 #line 463 "ClipLibraryView.vala"
1718         return result;
1719 #line 1720 "ClipLibraryView.c"
1720 }
1721
1722
1723 #line 466 "ClipLibraryView.vala"
1724 void clip_library_view_delete_selection (ClipLibraryView* self) {
1725 #line 1726 "ClipLibraryView.c"
1726         GList* paths;
1727         GList* _tmp2_;
1728         gint _tmp1_;
1729         GList* _tmp0_ = NULL;
1730 #line 466 "ClipLibraryView.vala"
1731         g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
1732 #line 1733 "ClipLibraryView.c"
1733         paths = NULL;
1734 #line 468 "ClipLibraryView.vala"
1735         model_undo_manager_start_transaction (self->priv->project->undo_manager, "Delete Clips From Library");
1736 #line 469 "ClipLibraryView.vala"
1737         if ((_tmp1_ = clip_library_view_get_selected_rows (self, &_tmp0_), paths = (_tmp2_ = _tmp0_, __g_list_free_gtk_tree_path_free0 (paths), _tmp2_), _tmp1_) > 0) {
1738 #line 1739 "ClipLibraryView.c"
1739                 {
1740                         gint i;
1741 #line 470 "ClipLibraryView.vala"
1742                         i = ((gint) g_list_length (paths)) - 1;
1743 #line 1744 "ClipLibraryView.c"
1744                         {
1745                                 gboolean _tmp3_;
1746 #line 470 "ClipLibraryView.vala"
1747                                 _tmp3_ = TRUE;
1748 #line 470 "ClipLibraryView.vala"
1749                                 while (TRUE) {
1750 #line 470 "ClipLibraryView.vala"
1751                                         if (!_tmp3_) {
1752 #line 470 "ClipLibraryView.vala"
1753                                                 i--;
1754 #line 1755 "ClipLibraryView.c"
1755                                         }
1756 #line 470 "ClipLibraryView.vala"
1757                                         _tmp3_ = FALSE;
1758 #line 470 "ClipLibraryView.vala"
1759                                         if (!(i >= 0)) {
1760 #line 470 "ClipLibraryView.vala"
1761                                                 break;
1762 #line 1763 "ClipLibraryView.c"
1763                                         }
1764 #line 471 "ClipLibraryView.vala"
1765                                         clip_library_view_delete_row (self, GTK_TREE_MODEL (self->priv->list_store), (GtkTreePath*) g_list_nth_data (paths, (guint) i));
1766 #line 1767 "ClipLibraryView.c"
1767                                 }
1768                         }
1769                 }
1770         }
1771 #line 473 "ClipLibraryView.vala"
1772         model_undo_manager_end_transaction (self->priv->project->undo_manager, "Delete Clips From Library");
1773 #line 1774 "ClipLibraryView.c"
1774         __g_list_free_gtk_tree_path_free0 (paths);
1775 }
1776
1777
1778 #line 476 "ClipLibraryView.vala"
1779 void clip_library_view_select_all (ClipLibraryView* self) {
1780 #line 476 "ClipLibraryView.vala"
1781         g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
1782 #line 477 "ClipLibraryView.vala"
1783         gtk_tree_selection_select_all (self->priv->selection);
1784 #line 1785 "ClipLibraryView.c"
1785 }
1786
1787
1788 #line 480 "ClipLibraryView.vala"
1789 static gint clip_library_view_name_sort (ClipLibraryView* self, GtkTreeModel* model, GtkTreeIter* a, GtkTreeIter* b) {
1790 #line 1791 "ClipLibraryView.c"
1791         gint result = 0;
1792         char* left;
1793         char* right;
1794 #line 480 "ClipLibraryView.vala"
1795         g_return_val_if_fail (IS_CLIP_LIBRARY_VIEW (self), 0);
1796 #line 480 "ClipLibraryView.vala"
1797         g_return_val_if_fail (GTK_IS_TREE_MODEL (model), 0);
1798 #line 1799 "ClipLibraryView.c"
1799         left = NULL;
1800         right = NULL;
1801 #line 483 "ClipLibraryView.vala"
1802         gtk_tree_model_get (model, a, CLIP_LIBRARY_VIEW_COLUMN_TYPE_NAME, &left, -1);
1803 #line 484 "ClipLibraryView.vala"
1804         gtk_tree_model_get (model, b, CLIP_LIBRARY_VIEW_COLUMN_TYPE_NAME, &right, -1);
1805 #line 1806 "ClipLibraryView.c"
1806         result = stricmp (left, right);
1807         _g_free0 (left);
1808         _g_free0 (right);
1809 #line 485 "ClipLibraryView.vala"
1810         return result;
1811 #line 1812 "ClipLibraryView.c"
1812 }
1813
1814
1815 static void clip_library_view_class_init (ClipLibraryViewClass * klass) {
1816         clip_library_view_parent_class = g_type_class_peek_parent (klass);
1817         g_type_class_add_private (klass, sizeof (ClipLibraryViewPrivate));
1818         GTK_WIDGET_CLASS (klass)->drag_data_received = clip_library_view_real_drag_data_received;
1819         G_OBJECT_CLASS (klass)->finalize = clip_library_view_finalize;
1820         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);
1821 }
1822
1823
1824 static void clip_library_view_instance_init (ClipLibraryView * self) {
1825         self->priv = CLIP_LIBRARY_VIEW_GET_PRIVATE (self);
1826         self->priv->label = NULL;
1827         self->priv->files_dragging = gee_array_list_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL);
1828 }
1829
1830
1831 static void clip_library_view_finalize (GObject* obj) {
1832         ClipLibraryView * self;
1833         self = CLIP_LIBRARY_VIEW (obj);
1834         _g_object_unref0 (self->priv->project);
1835         _g_object_unref0 (self->priv->tree_view);
1836         _g_object_unref0 (self->priv->selection);
1837         _g_object_unref0 (self->priv->label);
1838         _g_object_unref0 (self->priv->list_store);
1839         _g_object_unref0 (self->priv->files_dragging);
1840         _g_object_unref0 (self->priv->icon_theme);
1841         _g_object_unref0 (self->priv->default_audio_icon);
1842         _g_object_unref0 (self->priv->default_video_icon);
1843         _g_object_unref0 (self->priv->default_error_icon);
1844         _g_object_unref0 (self->priv->time_provider);
1845         G_OBJECT_CLASS (clip_library_view_parent_class)->finalize (obj);
1846 }
1847
1848
1849 GType clip_library_view_get_type (void) {
1850         static volatile gsize clip_library_view_type_id__volatile = 0;
1851         if (g_once_init_enter (&clip_library_view_type_id__volatile)) {
1852                 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 };
1853                 GType clip_library_view_type_id;
1854                 clip_library_view_type_id = g_type_register_static (GTK_TYPE_EVENT_BOX, "ClipLibraryView", &g_define_type_info, 0);
1855                 g_once_init_leave (&clip_library_view_type_id__volatile, clip_library_view_type_id);
1856         }
1857         return clip_library_view_type_id__volatile;
1858 }
1859
1860
1861 static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
1862         if ((array != NULL) && (destroy_func != NULL)) {
1863                 int i;
1864                 for (i = 0; i < array_length; i = i + 1) {
1865                         if (((gpointer*) array)[i] != NULL) {
1866                                 destroy_func (((gpointer*) array)[i]);
1867                         }
1868                 }
1869         }
1870 }
1871
1872
1873 static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
1874         _vala_array_destroy (array, array_length, destroy_func);
1875         g_free (array);
1876 }
1877
1878
1879 static gint _vala_array_length (gpointer array) {
1880         int length;
1881         length = 0;
1882         if (array) {
1883                 while (((gpointer*) array)[length]) {
1884                         length++;
1885                 }
1886         }
1887         return length;
1888 }
1889
1890
1891 static int _vala_strcmp0 (const char * str1, const char * str2) {
1892         if (str1 == NULL) {
1893                 return -(str1 != str2);
1894         }
1895         if (str2 == NULL) {
1896                 return str1 != str2;
1897         }
1898         return strcmp (str1, str2);
1899 }
1900
1901
1902
1903