1 /* ClipLibraryView.c generated by valac, the Vala compiler
2 * generated from ClipLibraryView.vala, do not modify */
4 /* Copyright 2009-2010 Yorba Foundation
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.
11 #include <glib-object.h>
16 #include <gdk-pixbuf/gdk-pixdata.h>
21 #include <glib/gstdio.h>
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))
31 typedef struct _ClipLibraryView ClipLibraryView;
32 typedef struct _ClipLibraryViewClass ClipLibraryViewClass;
33 typedef struct _ClipLibraryViewPrivate ClipLibraryViewPrivate;
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))
42 typedef struct _ModelProject ModelProject;
43 typedef struct _ModelProjectClass ModelProjectClass;
45 #define CLIP_LIBRARY_VIEW_TYPE_SORT_MODE (clip_library_view_sort_mode_get_type ())
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))
52 typedef struct _ModelTimeSystem ModelTimeSystem;
53 typedef struct _ModelTimeSystemIface ModelTimeSystemIface;
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)))
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))
65 typedef struct _ModelClipFile ModelClipFile;
66 typedef struct _ModelClipFileClass ModelClipFileClass;
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))
73 typedef struct _ModelTempoInformation ModelTempoInformation;
74 typedef struct _ModelTempoInformationIface ModelTempoInformationIface;
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)))
81 #define LOGGING_TYPE_FACILITY (logging_facility_get_type ())
83 #define LOGGING_TYPE_LEVEL (logging_level_get_type ())
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))
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;
97 #define TYPE_TIME_CODE (time_code_get_type ())
98 typedef struct _TimeCode TimeCode;
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))
107 typedef struct _ViewMediaEngine ViewMediaEngine;
108 typedef struct _ViewMediaEngineClass ViewMediaEngineClass;
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))
117 typedef struct _ModelProjectLoader ModelProjectLoader;
118 typedef struct _ModelProjectLoaderClass ModelProjectLoaderClass;
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))
127 typedef struct _ModelUndoManager ModelUndoManager;
128 typedef struct _ModelUndoManagerClass ModelUndoManagerClass;
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))
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;
142 #define MODEL_TYPE_MEDIA_TYPE (model_media_type_get_type ())
144 struct _ClipLibraryView {
145 GtkEventBox parent_instance;
146 ClipLibraryViewPrivate * priv;
149 struct _ClipLibraryViewClass {
150 GtkEventBoxClass parent_class;
154 CLIP_LIBRARY_VIEW_SORT_MODE_NONE,
155 CLIP_LIBRARY_VIEW_SORT_MODE_ABC
156 } ClipLibraryViewSortMode;
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);
177 struct _ClipLibraryViewPrivate {
178 ModelProject* project;
179 GtkTreeView* tree_view;
180 GtkTreeSelection* selection;
182 GtkListStore* list_store;
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;
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;
205 struct _ModelTempoInformationIface {
206 GTypeInterface parent_iface;
207 void (*get_time_signature) (ModelTempoInformation* self, Fraction* result);
208 gint (*get_bpm) (ModelTempoInformation* self);
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
221 LOGGING_LEVEL_CRITICAL,
223 LOGGING_LEVEL_MEDIUM,
226 LOGGING_LEVEL_VERBOSE
237 struct _ModelProject {
238 GObject parent_instance;
239 ModelProjectPrivate * priv;
240 GeeArrayList* tracks;
241 GeeArrayList* inactive_tracks;
242 GeeArrayList* clipfiles;
243 ViewMediaEngine* media_engine;
245 ModelProjectLoader* loader;
246 ModelUndoManager* undo_manager;
247 ModelLibraryImporter* importer;
248 Fraction default_framerate;
249 gboolean click_during_play;
250 gboolean click_during_record;
252 gboolean library_visible;
254 gboolean snap_to_clip;
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);
270 struct _ModelClipFile {
271 GObject parent_instance;
272 ModelClipFilePrivate * priv;
276 GdkPixbuf* thumbnail;
279 struct _ModelClipFileClass {
280 GObjectClass parent_class;
284 MODEL_MEDIA_TYPE_AUDIO,
285 MODEL_MEDIA_TYPE_VIDEO
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;
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))
299 CLIP_LIBRARY_VIEW_DUMMY_PROPERTY
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);
387 extern const GtkTargetEntry drag_target_entries[1];
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);
398 return clip_library_view_sort_mode_type_id__volatile;
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);
410 return clip_library_view_column_type_type_id__volatile;
414 static gpointer _g_object_ref0 (gpointer self) {
415 return self ? g_object_ref (self) : NULL;
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"
423 result = clip_library_view_name_sort (self, model, a, b);
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);
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);
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);
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);
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);
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_);
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);
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"
481 result = clip_library_view_on_button_pressed (self, event);
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"
490 result = clip_library_view_on_button_released (self, event);
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_;
505 GtkTreeViewColumn* _tmp5_;
506 GtkTreeViewColumn* name_column;
507 GtkTreeViewColumn* _tmp6_;
509 GdkColor _tmp10_ = {0};
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"
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"
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"
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"
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;
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;
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;
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"
635 _inner_error_ = NULL;
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_);
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);
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"
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};
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"
678 #line 679 "ClipLibraryView.c"
680 #line 114 "ClipLibraryView.vala"
682 #line 114 "ClipLibraryView.vala"
684 #line 685 "ClipLibraryView.c"
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"
692 _g_object_unref0 (model);
693 #line 117 "ClipLibraryView.vala"
695 #line 696 "ClipLibraryView.c"
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);
703 _g_object_unref0 (model);
704 #line 121 "ClipLibraryView.vala"
706 #line 707 "ClipLibraryView.c"
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;
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"
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"
734 #line 134 "ClipLibraryView.vala"
735 gtk_tree_selection_unselect_all (self->priv->selection);
736 #line 737 "ClipLibraryView.c"
738 _gtk_tree_path_free0 (path);
739 #line 135 "ClipLibraryView.vala"
741 #line 742 "ClipLibraryView.c"
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"
753 #line 141 "ClipLibraryView.vala"
755 #line 756 "ClipLibraryView.c"
757 #line 141 "ClipLibraryView.vala"
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"
766 #line 146 "ClipLibraryView.vala"
768 #line 769 "ClipLibraryView.c"
770 #line 147 "ClipLibraryView.vala"
771 first = clip_library_view_find_first_selected (self);
772 #line 149 "ClipLibraryView.vala"
774 #line 150 "ClipLibraryView.vala"
775 gtk_tree_selection_select_range (self->priv->selection, first, path);
776 #line 777 "ClipLibraryView.c"
778 _gtk_tree_path_free0 (first);
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"
793 #line 160 "ClipLibraryView.vala"
794 gtk_menu_popdown (clip_library_view_context_menu);
795 #line 796 "ClipLibraryView.c"
798 _gtk_tree_path_free0 (path);
799 #line 163 "ClipLibraryView.vala"
801 #line 802 "ClipLibraryView.c"
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;
810 GtkTreeViewColumn* column;
813 GtkTreeViewColumn* _tmp3_;
814 GtkTreeViewColumn* _tmp2_ = NULL;
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"
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"
834 #line 185 "ClipLibraryView.vala"
836 #line 837 "ClipLibraryView.c"
838 gboolean _tmp5_ = FALSE;
839 #line 186 "ClipLibraryView.vala"
841 #line 186 "ClipLibraryView.vala"
842 _tmp5_ = cell_y == 0;
843 #line 844 "ClipLibraryView.c"
845 #line 186 "ClipLibraryView.vala"
847 #line 848 "ClipLibraryView.c"
849 #line 186 "ClipLibraryView.vala"
851 #line 852 "ClipLibraryView.c"
853 #line 185 "ClipLibraryView.vala"
855 #line 187 "ClipLibraryView.vala"
856 g_signal_emit_by_name (self, "selection-changed", FALSE);
857 #line 858 "ClipLibraryView.c"
859 _gtk_tree_path_free0 (path);
860 _g_object_unref0 (column);
861 #line 188 "ClipLibraryView.vala"
863 #line 864 "ClipLibraryView.c"
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"
875 #line 194 "ClipLibraryView.vala"
877 #line 878 "ClipLibraryView.c"
879 #line 194 "ClipLibraryView.vala"
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"
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"
894 _gtk_tree_path_free0 (path);
895 _g_object_unref0 (column);
896 #line 202 "ClipLibraryView.vala"
898 #line 899 "ClipLibraryView.c"
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"
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"
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_;
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"
955 int s_collection_length1;
957 #line 225 "ClipLibraryView.vala"
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) {
963 s = g_strdup (s_collection[s_it]);
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;
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_);
984 #line 228 "ClipLibraryView.vala"
985 filename = (_tmp3_ = _tmp2_, _g_free0 (filename), _tmp3_);
986 #line 987 "ClipLibraryView.c"
989 __catch2_g_convert_error:
993 _inner_error_ = NULL;
998 #line 229 "ClipLibraryView.vala"
1000 #line 1001 "ClipLibraryView.c"
1004 if (_inner_error_ != NULL) {
1006 _g_free0 (filename);
1007 goto __catch1_g_error;
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) {
1014 _g_free0 (filename);
1015 goto __catch1_g_error;
1018 _g_free0 (filename);
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;
1034 _inner_error_ = NULL;
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"
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_);
1049 a = (_vala_array_free (a, a_length1, (GDestroyNotify) g_free), NULL);
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);
1058 (*array)[(*length)++] = value;
1059 (*array)[*length] = NULL;
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_;
1069 gint _uri_array_size_;
1070 gint uri_array_length1;
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"
1084 uri_array = (_tmp0_ = g_new0 (char*, 0 + 1), uri_array_length1 = 0, _uri_array_size_ = uri_array_length1, _tmp0_);
1087 _s_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->priv->files_dragging));
1088 #line 245 "ClipLibraryView.vala"
1090 #line 1091 "ClipLibraryView.c"
1092 #line 245 "ClipLibraryView.vala"
1093 if (!gee_iterator_next (_s_it)) {
1094 #line 245 "ClipLibraryView.vala"
1096 #line 1097 "ClipLibraryView.c"
1098 #line 245 "ClipLibraryView.vala"
1099 s = (char*) gee_iterator_get (_s_it);
1100 #line 1101 "ClipLibraryView.c"
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;
1112 _g_object_unref0 (_s_it);
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_);
1119 #line 247 "ClipLibraryView.vala"
1120 uri = (_tmp2_ = _tmp1_, _g_free0 (uri), _tmp2_);
1121 #line 1122 "ClipLibraryView.c"
1124 __catch3_g_convert_error:
1128 _inner_error_ = NULL;
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"
1140 if (_inner_error_ != NULL) {
1142 _g_object_unref0 (_s_it);
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_);
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"
1154 _g_object_unref0 (_s_it);
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"
1162 uri_array = (_vala_array_free (uri_array, uri_array_length1, (GDestroyNotify) g_free), NULL);
1166 static void _g_list_free_gtk_tree_path_free (GList* self) {
1167 g_list_foreach (self, (GFunc) gtk_tree_path_free, NULL);
1172 #line 259 "ClipLibraryView.vala"
1173 static gint clip_library_view_get_selected_rows (ClipLibraryView* self, GList** paths) {
1174 #line 1175 "ClipLibraryView.c"
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) {
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"
1189 #line 1190 "ClipLibraryView.c"
1193 static gpointer _gtk_tree_path_copy0 (gpointer self) {
1194 return self ? gtk_tree_path_copy (self) : NULL;
1198 #line 264 "ClipLibraryView.vala"
1199 static void clip_library_view_on_drag_begin (ClipLibraryView* self, GdkDragContext* c) {
1200 #line 1201 "ClipLibraryView.c"
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"
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"
1219 #line 269 "ClipLibraryView.vala"
1220 gee_abstract_collection_clear (GEE_ABSTRACT_COLLECTION (self->priv->files_dragging));
1221 #line 1222 "ClipLibraryView.c"
1223 GList* t_collection;
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) {
1230 #line 270 "ClipLibraryView.vala"
1231 t = _gtk_tree_path_copy0 ((GtkTreePath*) t_it->data);
1232 #line 1233 "ClipLibraryView.c"
1234 GtkTreeIter iter = {0};
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"
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"
1246 #line 1247 "ClipLibraryView.c"
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"
1255 #line 1256 "ClipLibraryView.c"
1256 _g_object_unref0 (pixbuf);
1258 _gtk_tree_path_free0 (t);
1259 _g_free0 (filename);
1264 __g_list_free_gtk_tree_path_free0 (paths);
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"
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"
1288 GtkCellRenderer* _tmp1_;
1289 GdkColor _tmp2_ = {0};
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"
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"
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"
1314 _g_object_unref0 (renderer);
1315 #line 309 "ClipLibraryView.vala"
1317 #line 1318 "ClipLibraryView.c"
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"
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"
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"
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"
1347 #line 318 "ClipLibraryView.vala"
1348 _tmp0_ = self->priv->default_audio_icon;
1349 #line 1350 "ClipLibraryView.c"
1351 #line 317 "ClipLibraryView.vala"
1352 icon = (_tmp1_ = _g_object_ref0 (_tmp0_), _g_object_unref0 (icon), _tmp1_);
1353 #line 1354 "ClipLibraryView.c"
1356 #line 320 "ClipLibraryView.vala"
1357 icon = (_tmp2_ = _g_object_ref0 (clip_file->thumbnail), _g_object_unref0 (icon), _tmp2_);
1358 #line 1359 "ClipLibraryView.c"
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"
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"
1371 _g_object_unref0 (icon);
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"
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"
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"
1405 #line 346 "ClipLibraryView.vala"
1406 self->priv->num_clipfiles++;
1407 #line 1408 "ClipLibraryView.c"
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"
1417 #line 353 "ClipLibraryView.vala"
1418 static gint clip_library_view_find_clipfile (ClipLibraryView* self, ModelClipFile* f, GtkTreeIter* iter) {
1419 #line 1420 "ClipLibraryView.c"
1421 GtkTreeModel* model;
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"
1434 #line 359 "ClipLibraryView.vala"
1436 #line 1437 "ClipLibraryView.c"
1438 #line 359 "ClipLibraryView.vala"
1440 #line 359 "ClipLibraryView.vala"
1442 #line 1443 "ClipLibraryView.c"
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"
1451 _g_free0 (filename);
1452 _g_object_unref0 (model);
1453 #line 364 "ClipLibraryView.vala"
1455 #line 1456 "ClipLibraryView.c"
1457 #line 366 "ClipLibraryView.vala"
1459 #line 367 "ClipLibraryView.vala"
1460 b = gtk_tree_model_iter_next (model, iter);
1461 #line 1462 "ClipLibraryView.c"
1462 _g_free0 (filename);
1465 _g_object_unref0 (model);
1466 #line 369 "ClipLibraryView.vala"
1468 #line 1469 "ClipLibraryView.c"
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"
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;
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"
1516 #line 391 "ClipLibraryView.vala"
1518 #line 1519 "ClipLibraryView.c"
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};
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"
1538 #line 401 "ClipLibraryView.vala"
1540 #line 401 "ClipLibraryView.vala"
1542 #line 1543 "ClipLibraryView.c"
1544 #line 402 "ClipLibraryView.vala"
1545 b = clip_library_view_remove_row (self, &iter);
1546 #line 1547 "ClipLibraryView.c"
1548 _g_object_unref0 (model);
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"
1565 #line 1566 "ClipLibraryView.c"
1567 ModelClipFile* clip_file;
1569 #line 410 "ClipLibraryView.vala"
1571 #line 410 "ClipLibraryView.vala"
1573 #line 1574 "ClipLibraryView.c"
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"
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);
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"
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"
1621 #line 1622 "ClipLibraryView.c"
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"
1636 #line 439 "ClipLibraryView.vala"
1637 model_undo_manager_reset (self->priv->project->undo_manager);
1638 #line 1639 "ClipLibraryView.c"
1641 _g_free0 (filename);
1646 #line 445 "ClipLibraryView.vala"
1647 gboolean clip_library_view_has_selection (ClipLibraryView* self) {
1648 #line 1649 "ClipLibraryView.c"
1649 gboolean result = FALSE;
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"
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"
1662 #line 1663 "ClipLibraryView.c"
1663 __g_list_free_gtk_tree_path_free0 (paths);
1667 #line 450 "ClipLibraryView.vala"
1668 GeeArrayList* clip_library_view_get_selected_files (ClipLibraryView* self) {
1669 #line 1670 "ClipLibraryView.c"
1670 GeeArrayList* result = NULL;
1672 GeeArrayList* return_value;
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"
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"
1686 GList* path_collection;
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) {
1693 #line 454 "ClipLibraryView.vala"
1694 path = _gtk_tree_path_copy0 ((GtkTreePath*) path_it->data);
1695 #line 1696 "ClipLibraryView.c"
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"
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"
1710 _gtk_tree_path_free0 (path);
1715 result = return_value;
1716 __g_list_free_gtk_tree_path_free0 (paths);
1717 #line 463 "ClipLibraryView.vala"
1719 #line 1720 "ClipLibraryView.c"
1723 #line 466 "ClipLibraryView.vala"
1724 void clip_library_view_delete_selection (ClipLibraryView* self) {
1725 #line 1726 "ClipLibraryView.c"
1729 GList* _tmp0_ = NULL;
1730 #line 466 "ClipLibraryView.vala"
1731 g_return_if_fail (IS_CLIP_LIBRARY_VIEW (self));
1732 #line 1733 "ClipLibraryView.c"
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"
1741 #line 470 "ClipLibraryView.vala"
1742 i = ((gint) g_list_length (paths)) - 1;
1743 #line 1744 "ClipLibraryView.c"
1746 #line 470 "ClipLibraryView.vala"
1748 #line 470 "ClipLibraryView.vala"
1750 #line 470 "ClipLibraryView.vala"
1752 #line 470 "ClipLibraryView.vala"
1754 #line 1755 "ClipLibraryView.c"
1756 #line 470 "ClipLibraryView.vala"
1758 #line 470 "ClipLibraryView.vala"
1760 #line 470 "ClipLibraryView.vala"
1762 #line 1763 "ClipLibraryView.c"
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"
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);
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"
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"
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"
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);
1809 #line 485 "ClipLibraryView.vala"
1811 #line 1812 "ClipLibraryView.c"
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);
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);
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);
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);
1857 return clip_library_view_type_id__volatile;
1861 static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
1862 if ((array != NULL) && (destroy_func != NULL)) {
1864 for (i = 0; i < array_length; i = i + 1) {
1865 if (((gpointer*) array)[i] != NULL) {
1866 destroy_func (((gpointer*) array)[i]);
1873 static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
1874 _vala_array_destroy (array, array_length, destroy_func);
1879 static gint _vala_array_length (gpointer array) {
1883 while (((gpointer*) array)[length]) {
1891 static int _vala_strcmp0 (const char * str1, const char * str2) {
1893 return -(str1 != str2);
1896 return str1 != str2;
1898 return strcmp (str1, str2);