Initial commit
[fillmore] / src / marina / marina / TrackView.c
1 /* TrackView.c generated by valac, the Vala compiler
2  * generated from TrackView.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 <float.h>
14 #include <math.h>
15 #include <stdlib.h>
16 #include <string.h>
17 #include <gee.h>
18 #include <gdk/gdk.h>
19
20
21 #define TYPE_TRACK_VIEW (track_view_get_type ())
22 #define TRACK_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TRACK_VIEW, TrackView))
23 #define IS_TRACK_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TRACK_VIEW))
24 #define TRACK_VIEW_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_TRACK_VIEW, TrackViewIface))
25
26 typedef struct _TrackView TrackView;
27 typedef struct _TrackViewIface TrackViewIface;
28
29 #define TYPE_CLIP_VIEW (clip_view_get_type ())
30 #define CLIP_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CLIP_VIEW, ClipView))
31 #define CLIP_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CLIP_VIEW, ClipViewClass))
32 #define IS_CLIP_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CLIP_VIEW))
33 #define IS_CLIP_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CLIP_VIEW))
34 #define CLIP_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CLIP_VIEW, ClipViewClass))
35
36 typedef struct _ClipView ClipView;
37 typedef struct _ClipViewClass ClipViewClass;
38
39 #define MODEL_TYPE_TRACK (model_track_get_type ())
40 #define MODEL_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TRACK, ModelTrack))
41 #define MODEL_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_TRACK, ModelTrackClass))
42 #define MODEL_IS_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TRACK))
43 #define MODEL_IS_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_TRACK))
44 #define MODEL_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_TRACK, ModelTrackClass))
45
46 typedef struct _ModelTrack ModelTrack;
47 typedef struct _ModelTrackClass ModelTrackClass;
48
49 #define TYPE_TRACK_VIEW_CONCRETE (track_view_concrete_get_type ())
50 #define TRACK_VIEW_CONCRETE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TRACK_VIEW_CONCRETE, TrackViewConcrete))
51 #define TRACK_VIEW_CONCRETE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TRACK_VIEW_CONCRETE, TrackViewConcreteClass))
52 #define IS_TRACK_VIEW_CONCRETE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TRACK_VIEW_CONCRETE))
53 #define IS_TRACK_VIEW_CONCRETE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TRACK_VIEW_CONCRETE))
54 #define TRACK_VIEW_CONCRETE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TRACK_VIEW_CONCRETE, TrackViewConcreteClass))
55
56 typedef struct _TrackViewConcrete TrackViewConcrete;
57 typedef struct _TrackViewConcreteClass TrackViewConcreteClass;
58 typedef struct _TrackViewConcretePrivate TrackViewConcretePrivate;
59
60 #define TYPE_TIME_LINE (time_line_get_type ())
61 #define TIME_LINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TIME_LINE, TimeLine))
62 #define TIME_LINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TIME_LINE, TimeLineClass))
63 #define IS_TIME_LINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TIME_LINE))
64 #define IS_TIME_LINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TIME_LINE))
65 #define TIME_LINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TIME_LINE, TimeLineClass))
66
67 typedef struct _TimeLine TimeLine;
68 typedef struct _TimeLineClass TimeLineClass;
69
70 #define TYPE_TRANSPORT_DELEGATE (transport_delegate_get_type ())
71 #define TRANSPORT_DELEGATE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TRANSPORT_DELEGATE, TransportDelegate))
72 #define IS_TRANSPORT_DELEGATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TRANSPORT_DELEGATE))
73 #define TRANSPORT_DELEGATE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_TRANSPORT_DELEGATE, TransportDelegateIface))
74
75 typedef struct _TransportDelegate TransportDelegate;
76 typedef struct _TransportDelegateIface TransportDelegateIface;
77 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
78
79 #define MODEL_TYPE_CLIP (model_clip_get_type ())
80 #define MODEL_CLIP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP, ModelClip))
81 #define MODEL_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP, ModelClipClass))
82 #define MODEL_IS_CLIP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP))
83 #define MODEL_IS_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP))
84 #define MODEL_CLIP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP, ModelClipClass))
85
86 typedef struct _ModelClip ModelClip;
87 typedef struct _ModelClipClass ModelClipClass;
88
89 #define LOGGING_TYPE_FACILITY (logging_facility_get_type ())
90
91 #define LOGGING_TYPE_LEVEL (logging_level_get_type ())
92 typedef struct _TimeLinePrivate TimeLinePrivate;
93
94 #define MODEL_TYPE_PROJECT (model_project_get_type ())
95 #define MODEL_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_PROJECT, ModelProject))
96 #define MODEL_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_PROJECT, ModelProjectClass))
97 #define MODEL_IS_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_PROJECT))
98 #define MODEL_IS_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_PROJECT))
99 #define MODEL_PROJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_PROJECT, ModelProjectClass))
100
101 typedef struct _ModelProject ModelProject;
102 typedef struct _ModelProjectClass ModelProjectClass;
103
104 #define MODEL_TYPE_TIME_SYSTEM (model_time_system_get_type ())
105 #define MODEL_TIME_SYSTEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TIME_SYSTEM, ModelTimeSystem))
106 #define MODEL_IS_TIME_SYSTEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TIME_SYSTEM))
107 #define MODEL_TIME_SYSTEM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MODEL_TYPE_TIME_SYSTEM, ModelTimeSystemIface))
108
109 typedef struct _ModelTimeSystem ModelTimeSystem;
110 typedef struct _ModelTimeSystemIface ModelTimeSystemIface;
111
112 #define VIEW_TYPE_RULER (view_ruler_get_type ())
113 #define VIEW_RULER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_RULER, ViewRuler))
114 #define VIEW_RULER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_RULER, ViewRulerClass))
115 #define VIEW_IS_RULER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_RULER))
116 #define VIEW_IS_RULER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_RULER))
117 #define VIEW_RULER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_RULER, ViewRulerClass))
118
119 typedef struct _ViewRuler ViewRuler;
120 typedef struct _ViewRulerClass ViewRulerClass;
121
122 #define TYPE_CLIPBOARD (clipboard_get_type ())
123 #define CLIPBOARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CLIPBOARD, Clipboard))
124 #define CLIPBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CLIPBOARD, ClipboardClass))
125 #define IS_CLIPBOARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CLIPBOARD))
126 #define IS_CLIPBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CLIPBOARD))
127 #define CLIPBOARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CLIPBOARD, ClipboardClass))
128
129 typedef struct _Clipboard Clipboard;
130 typedef struct _ClipboardClass ClipboardClass;
131 typedef struct _ClipViewPrivate ClipViewPrivate;
132 #define _g_list_free0(var) ((var == NULL) ? NULL : (var = (g_list_free (var), NULL)))
133
134 struct _TrackViewIface {
135         GTypeInterface parent_iface;
136         void (*move_to_top) (TrackView* self, ClipView* clip_view);
137         void (*resize) (TrackView* self);
138         ModelTrack* (*get_track) (TrackView* self);
139         gint (*get_track_height) (TrackView* self);
140         GtkWidget* (*find_child) (TrackView* self, double x, double y);
141         void (*select_all) (TrackView* self);
142 };
143
144 struct _TrackViewConcrete {
145         GtkFixed parent_instance;
146         TrackViewConcretePrivate * priv;
147 };
148
149 struct _TrackViewConcreteClass {
150         GtkFixedClass parent_class;
151 };
152
153 struct _TransportDelegateIface {
154         GTypeInterface parent_iface;
155         gboolean (*is_playing) (TransportDelegate* self);
156         gboolean (*is_recording) (TransportDelegate* self);
157         gboolean (*is_stopped) (TransportDelegate* self);
158 };
159
160 struct _TrackViewConcretePrivate {
161         ModelTrack* track;
162         TimeLine* timeline;
163         TransportDelegate* transport_delegate;
164 };
165
166 typedef enum  {
167         LOGGING_FACILITY_SIGNAL_HANDLERS,
168         LOGGING_FACILITY_DEVELOPER_WARNINGS,
169         LOGGING_FACILITY_GRAPH,
170         LOGGING_FACILITY_LOADING,
171         LOGGING_FACILITY_IMPORT,
172         LOGGING_FACILITY_SINGLEDECODEBIN
173 } LoggingFacility;
174
175 typedef enum  {
176         LOGGING_LEVEL_CRITICAL,
177         LOGGING_LEVEL_HIGH,
178         LOGGING_LEVEL_MEDIUM,
179         LOGGING_LEVEL_LOW,
180         LOGGING_LEVEL_INFO,
181         LOGGING_LEVEL_VERBOSE
182 } LoggingLevel;
183
184 struct _ModelTimeSystemIface {
185         GTypeInterface parent_iface;
186         void (*calculate_pixel_step) (ModelTimeSystem* self, float inc, float pixel_min, float pixel_div);
187         gint64 (*xpos_to_time) (ModelTimeSystem* self, gint x);
188         gint64 (*xsize_to_time) (ModelTimeSystem* self, gint x);
189         gint (*time_to_xpos) (ModelTimeSystem* self, gint64 time);
190         gint64 (*get_pixel_snap_time) (ModelTimeSystem* self);
191         gint (*time_to_xsize) (ModelTimeSystem* self, gint64 time);
192         float (*get_pixel_percentage) (ModelTimeSystem* self);
193         gint (*get_start_token) (ModelTimeSystem* self, gint xsize);
194         gint (*get_next_position) (ModelTimeSystem* self, gint token);
195         gint (*get_pixel_height) (ModelTimeSystem* self, gint token);
196         char* (*get_display_string) (ModelTimeSystem* self, gint token);
197         gint (*frame_to_xsize) (ModelTimeSystem* self, gint frame);
198         gint (*xsize_to_frame) (ModelTimeSystem* self, gint xsize);
199         char* (*get_time_string) (ModelTimeSystem* self, gint64 time);
200         char* (*get_time_duration) (ModelTimeSystem* self, gint64 time);
201 };
202
203 struct _TimeLine {
204         GtkEventBox parent_instance;
205         TimeLinePrivate * priv;
206         ModelProject* project;
207         ModelTimeSystem* provider;
208         ViewRuler* ruler;
209         GeeArrayList* tracks;
210         GeeArrayList* selected_clips;
211         Clipboard* clipboard;
212 };
213
214 struct _TimeLineClass {
215         GtkEventBoxClass parent_class;
216 };
217
218 struct _ClipView {
219         GtkDrawingArea parent_instance;
220         ClipViewPrivate * priv;
221         ModelClip* clip;
222         gint64 initial_time;
223         gboolean is_selected;
224         gint height;
225 };
226
227 struct _ClipViewClass {
228         GtkDrawingAreaClass parent_class;
229 };
230
231
232 static gpointer track_view_concrete_parent_class = NULL;
233 static TrackViewIface* track_view_concrete_track_view_parent_iface = NULL;
234
235 GType clip_view_get_type (void);
236 GType model_track_get_type (void);
237 GType track_view_get_type (void);
238 GType track_view_concrete_get_type (void);
239 GType time_line_get_type (void);
240 GType transport_delegate_get_type (void);
241 #define TRACK_VIEW_CONCRETE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_TRACK_VIEW_CONCRETE, TrackViewConcretePrivate))
242 enum  {
243         TRACK_VIEW_CONCRETE_DUMMY_PROPERTY
244 };
245 #define TRACK_VIEW_CONCRETE_clip_height 64
246 #define TIME_LINE_BORDER 4
247 #define TRACK_VIEW_CONCRETE_TrackHeight (TRACK_VIEW_CONCRETE_clip_height + (TIME_LINE_BORDER * 2))
248 GType model_clip_get_type (void);
249 static void track_view_concrete_on_clip_added (TrackViewConcrete* self, ModelTrack* t, ModelClip* clip, gboolean select);
250 static void _track_view_concrete_on_clip_added_model_track_clip_added (ModelTrack* _sender, ModelClip* clip, gboolean select, gpointer self);
251 static void track_view_concrete_on_clip_removed (TrackViewConcrete* self, ModelClip* clip);
252 static void _track_view_concrete_on_clip_removed_model_track_clip_removed (ModelTrack* _sender, ModelClip* clip, gpointer self);
253 TrackViewConcrete* track_view_concrete_new (TransportDelegate* transport_delegate, ModelTrack* track, TimeLine* timeline);
254 TrackViewConcrete* track_view_concrete_construct (GType object_type, TransportDelegate* transport_delegate, ModelTrack* track, TimeLine* timeline);
255 static void track_view_concrete_real_size_request (GtkWidget* base, GtkRequisition* requisition);
256 GType logging_facility_get_type (void);
257 GType logging_level_get_type (void);
258 void logging_emit (GObject* object, LoggingFacility facility, LoggingLevel level, const char* message);
259 static void track_view_concrete_set_clip_pos (TrackViewConcrete* self, ClipView* view);
260 static void track_view_concrete_on_clip_moved (TrackViewConcrete* self, ClipView* clip);
261 void model_track_delete_clip (ModelTrack* self, ModelClip* clip);
262 static void track_view_concrete_clear_drag (TrackViewConcrete* self);
263 static void track_view_concrete_on_clip_deleted (TrackViewConcrete* self, ModelClip* clip);
264 GType model_project_get_type (void);
265 GType model_time_system_get_type (void);
266 GType view_ruler_get_type (void);
267 gpointer clipboard_ref (gpointer instance);
268 void clipboard_unref (gpointer instance);
269 GParamSpec* param_spec_clipboard (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
270 void value_set_clipboard (GValue* value, gpointer v_object);
271 void value_take_clipboard (GValue* value, gpointer v_object);
272 gpointer value_get_clipboard (const GValue* value);
273 GType clipboard_get_type (void);
274 ClipView* clip_view_new (TransportDelegate* transport_delegate, ModelClip* clip, ModelTimeSystem* time_provider, gint height);
275 ClipView* clip_view_construct (GType object_type, TransportDelegate* transport_delegate, ModelClip* clip, ModelTimeSystem* time_provider, gint height);
276 static void _track_view_concrete_on_clip_moved_clip_view_clip_moved (ClipView* _sender, ClipView* clip, gpointer self);
277 static void _track_view_concrete_on_clip_deleted_clip_view_clip_deleted (ClipView* _sender, ModelClip* clip, gpointer self);
278 static void track_view_concrete_on_move_begin (TrackViewConcrete* self, ClipView* clip_view, gboolean do_copy);
279 static void _track_view_concrete_on_move_begin_clip_view_move_begin (ClipView* _sender, ClipView* clip_view, gboolean copy, gpointer self);
280 static void track_view_concrete_on_trim_begin (TrackViewConcrete* self, ClipView* clip_view);
281 static void _track_view_concrete_on_trim_begin_clip_view_trim_begin (ClipView* _sender, ClipView* clip_view, GdkWindowEdge edge, gpointer self);
282 gint model_time_system_time_to_xpos (ModelTimeSystem* self, gint64 time);
283 gint64 model_clip_get_start (ModelClip* self);
284 static void track_view_concrete_real_move_to_top (TrackView* base, ClipView* clip_view);
285 void track_view_move_to_top (TrackView* self, ClipView* clip_view);
286 void clip_view_on_clip_moved (ClipView* self, ModelClip* clip);
287 static void track_view_concrete_real_resize (TrackView* base);
288 void time_line_deselect_all_clips (TimeLine* self);
289 static gboolean track_view_concrete_real_button_press_event (GtkWidget* base, GdkEventButton* e);
290 static ModelTrack* track_view_concrete_real_get_track (TrackView* base);
291 static gint track_view_concrete_real_get_track_height (TrackView* base);
292 static GtkWidget* track_view_concrete_real_find_child (TrackView* base, double x, double y);
293 void clip_view_select (ClipView* self);
294 static void track_view_concrete_real_select_all (TrackView* base);
295 static void track_view_concrete_finalize (GObject* obj);
296
297
298
299 static gpointer _g_object_ref0 (gpointer self) {
300         return self ? g_object_ref (self) : NULL;
301 }
302
303
304 #line 44 "TrackView.vala"
305 static void _track_view_concrete_on_clip_added_model_track_clip_added (ModelTrack* _sender, ModelClip* clip, gboolean select, gpointer self) {
306 #line 307 "TrackView.c"
307         track_view_concrete_on_clip_added (self, _sender, clip, select);
308 }
309
310
311 #line 101 "TrackView.vala"
312 static void _track_view_concrete_on_clip_removed_model_track_clip_removed (ModelTrack* _sender, ModelClip* clip, gpointer self) {
313 #line 314 "TrackView.c"
314         track_view_concrete_on_clip_removed (self, clip);
315 }
316
317
318 #line 17 "TrackView.vala"
319 TrackViewConcrete* track_view_concrete_construct (GType object_type, TransportDelegate* transport_delegate, ModelTrack* track, TimeLine* timeline) {
320 #line 321 "TrackView.c"
321         TrackViewConcrete * self;
322         ModelTrack* _tmp0_;
323         TimeLine* _tmp1_;
324         TransportDelegate* _tmp2_;
325 #line 17 "TrackView.vala"
326         g_return_val_if_fail (IS_TRANSPORT_DELEGATE (transport_delegate), NULL);
327 #line 17 "TrackView.vala"
328         g_return_val_if_fail (MODEL_IS_TRACK (track), NULL);
329 #line 17 "TrackView.vala"
330         g_return_val_if_fail (IS_TIME_LINE (timeline), NULL);
331 #line 332 "TrackView.c"
332         self = g_object_newv (object_type, 0, NULL);
333 #line 19 "TrackView.vala"
334         self->priv->track = (_tmp0_ = _g_object_ref0 (track), _g_object_unref0 (self->priv->track), _tmp0_);
335 #line 20 "TrackView.vala"
336         self->priv->timeline = (_tmp1_ = _g_object_ref0 (timeline), _g_object_unref0 (self->priv->timeline), _tmp1_);
337 #line 21 "TrackView.vala"
338         self->priv->transport_delegate = (_tmp2_ = _g_object_ref0 (transport_delegate), _g_object_unref0 (self->priv->transport_delegate), _tmp2_);
339 #line 23 "TrackView.vala"
340         g_signal_connect_object (track, "clip-added", (GCallback) _track_view_concrete_on_clip_added_model_track_clip_added, self, 0);
341 #line 24 "TrackView.vala"
342         g_signal_connect_object (track, "clip-removed", (GCallback) _track_view_concrete_on_clip_removed_model_track_clip_removed, self, 0);
343 #line 344 "TrackView.c"
344         return self;
345 }
346
347
348 #line 17 "TrackView.vala"
349 TrackViewConcrete* track_view_concrete_new (TransportDelegate* transport_delegate, ModelTrack* track, TimeLine* timeline) {
350 #line 17 "TrackView.vala"
351         return track_view_concrete_construct (TYPE_TRACK_VIEW_CONCRETE, transport_delegate, track, timeline);
352 #line 353 "TrackView.c"
353 }
354
355
356 #line 27 "TrackView.vala"
357 static void track_view_concrete_real_size_request (GtkWidget* base, GtkRequisition* requisition) {
358 #line 359 "TrackView.c"
359         TrackViewConcrete * self;
360         self = TRACK_VIEW_CONCRETE (base);
361 #line 28 "TrackView.vala"
362         GTK_WIDGET_CLASS (track_view_concrete_parent_class)->size_request (GTK_WIDGET (GTK_FIXED (self)), requisition);
363 #line 29 "TrackView.vala"
364         (*requisition).height = TRACK_VIEW_CONCRETE_TrackHeight;
365 #line 30 "TrackView.vala"
366         (*requisition).width = (*requisition).width + TIME_LINE_BORDER;
367 #line 368 "TrackView.c"
368 }
369
370
371 #line 33 "TrackView.vala"
372 static void track_view_concrete_on_clip_moved (TrackViewConcrete* self, ClipView* clip) {
373 #line 33 "TrackView.vala"
374         g_return_if_fail (IS_TRACK_VIEW_CONCRETE (self));
375 #line 33 "TrackView.vala"
376         g_return_if_fail (IS_CLIP_VIEW (clip));
377 #line 34 "TrackView.vala"
378         logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_moved");
379 #line 35 "TrackView.vala"
380         track_view_concrete_set_clip_pos (self, clip);
381 #line 382 "TrackView.c"
382 }
383
384
385 #line 38 "TrackView.vala"
386 static void track_view_concrete_on_clip_deleted (TrackViewConcrete* self, ModelClip* clip) {
387 #line 38 "TrackView.vala"
388         g_return_if_fail (IS_TRACK_VIEW_CONCRETE (self));
389 #line 38 "TrackView.vala"
390         g_return_if_fail (MODEL_IS_CLIP (clip));
391 #line 39 "TrackView.vala"
392         logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_deleted");
393 #line 40 "TrackView.vala"
394         model_track_delete_clip (self->priv->track, clip);
395 #line 41 "TrackView.vala"
396         track_view_concrete_clear_drag (self);
397 #line 398 "TrackView.c"
398 }
399
400
401 #line 33 "TrackView.vala"
402 static void _track_view_concrete_on_clip_moved_clip_view_clip_moved (ClipView* _sender, ClipView* clip, gpointer self) {
403 #line 404 "TrackView.c"
404         track_view_concrete_on_clip_moved (self, clip);
405 }
406
407
408 #line 38 "TrackView.vala"
409 static void _track_view_concrete_on_clip_deleted_clip_view_clip_deleted (ClipView* _sender, ModelClip* clip, gpointer self) {
410 #line 411 "TrackView.c"
411         track_view_concrete_on_clip_deleted (self, clip);
412 }
413
414
415 #line 82 "TrackView.vala"
416 static void _track_view_concrete_on_move_begin_clip_view_move_begin (ClipView* _sender, ClipView* clip_view, gboolean copy, gpointer self) {
417 #line 418 "TrackView.c"
418         track_view_concrete_on_move_begin (self, clip_view, copy);
419 }
420
421
422 #line 77 "TrackView.vala"
423 static void _track_view_concrete_on_trim_begin_clip_view_trim_begin (ClipView* _sender, ClipView* clip_view, GdkWindowEdge edge, gpointer self) {
424 #line 425 "TrackView.c"
425         track_view_concrete_on_trim_begin (self, clip_view);
426 }
427
428
429 #line 44 "TrackView.vala"
430 static void track_view_concrete_on_clip_added (TrackViewConcrete* self, ModelTrack* t, ModelClip* clip, gboolean select) {
431 #line 432 "TrackView.c"
432         ClipView* view;
433 #line 44 "TrackView.vala"
434         g_return_if_fail (IS_TRACK_VIEW_CONCRETE (self));
435 #line 44 "TrackView.vala"
436         g_return_if_fail (MODEL_IS_TRACK (t));
437 #line 44 "TrackView.vala"
438         g_return_if_fail (MODEL_IS_CLIP (clip));
439 #line 45 "TrackView.vala"
440         logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_added");
441 #line 46 "TrackView.vala"
442         view = g_object_ref_sink (clip_view_new (self->priv->transport_delegate, clip, self->priv->timeline->provider, TRACK_VIEW_CONCRETE_clip_height));
443 #line 47 "TrackView.vala"
444         g_signal_connect_object (view, "clip-moved", (GCallback) _track_view_concrete_on_clip_moved_clip_view_clip_moved, self, 0);
445 #line 48 "TrackView.vala"
446         g_signal_connect_object (view, "clip-deleted", (GCallback) _track_view_concrete_on_clip_deleted_clip_view_clip_deleted, self, 0);
447 #line 49 "TrackView.vala"
448         g_signal_connect_object (view, "move-begin", (GCallback) _track_view_concrete_on_move_begin_clip_view_move_begin, self, 0);
449 #line 50 "TrackView.vala"
450         g_signal_connect_object (view, "trim-begin", (GCallback) _track_view_concrete_on_trim_begin_clip_view_trim_begin, self, 0);
451 #line 52 "TrackView.vala"
452         gtk_fixed_put (GTK_FIXED (self), GTK_WIDGET (view), model_time_system_time_to_xpos (self->priv->timeline->provider, model_clip_get_start (clip)), TIME_LINE_BORDER);
453 #line 53 "TrackView.vala"
454         gtk_widget_show (GTK_WIDGET (view));
455 #line 55 "TrackView.vala"
456         g_signal_emit_by_name (self->priv->timeline, "track-changed");
457 #line 56 "TrackView.vala"
458         g_signal_emit_by_name (TRACK_VIEW (self), "clip-view-added", view);
459 #line 57 "TrackView.vala"
460         if (select) {
461 #line 58 "TrackView.vala"
462                 g_signal_emit_by_name (view, "selection-request", view, FALSE);
463 #line 464 "TrackView.c"
464         }
465         _g_object_unref0 (view);
466 }
467
468
469 #line 64 "TrackView.vala"
470 static void track_view_concrete_real_move_to_top (TrackView* base, ClipView* clip_view) {
471 #line 472 "TrackView.c"
472         TrackViewConcrete * self;
473         self = TRACK_VIEW_CONCRETE (base);
474 #line 64 "TrackView.vala"
475         g_return_if_fail (IS_CLIP_VIEW (clip_view));
476 #line 70 "TrackView.vala"
477         gtk_container_remove (GTK_CONTAINER (self), GTK_WIDGET (clip_view));
478 #line 71 "TrackView.vala"
479         gtk_fixed_put (GTK_FIXED (self), GTK_WIDGET (clip_view), model_time_system_time_to_xpos (self->priv->timeline->provider, model_clip_get_start (clip_view->clip)), TIME_LINE_BORDER);
480 #line 74 "TrackView.vala"
481         gtk_widget_show (GTK_WIDGET (clip_view));
482 #line 483 "TrackView.c"
483 }
484
485
486 #line 77 "TrackView.vala"
487 static void track_view_concrete_on_trim_begin (TrackViewConcrete* self, ClipView* clip_view) {
488 #line 77 "TrackView.vala"
489         g_return_if_fail (IS_TRACK_VIEW_CONCRETE (self));
490 #line 77 "TrackView.vala"
491         g_return_if_fail (IS_CLIP_VIEW (clip_view));
492 #line 78 "TrackView.vala"
493         logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_trim_begin");
494 #line 79 "TrackView.vala"
495         track_view_move_to_top (TRACK_VIEW (self), clip_view);
496 #line 497 "TrackView.c"
497 }
498
499
500 #line 82 "TrackView.vala"
501 static void track_view_concrete_on_move_begin (TrackViewConcrete* self, ClipView* clip_view, gboolean do_copy) {
502 #line 82 "TrackView.vala"
503         g_return_if_fail (IS_TRACK_VIEW_CONCRETE (self));
504 #line 82 "TrackView.vala"
505         g_return_if_fail (IS_CLIP_VIEW (clip_view));
506 #line 83 "TrackView.vala"
507         logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_move_begin");
508 #line 84 "TrackView.vala"
509         track_view_move_to_top (TRACK_VIEW (self), clip_view);
510 #line 511 "TrackView.c"
511 }
512
513
514 #line 87 "TrackView.vala"
515 static void track_view_concrete_set_clip_pos (TrackViewConcrete* self, ClipView* view) {
516 #line 87 "TrackView.vala"
517         g_return_if_fail (IS_TRACK_VIEW_CONCRETE (self));
518 #line 87 "TrackView.vala"
519         g_return_if_fail (IS_CLIP_VIEW (view));
520 #line 88 "TrackView.vala"
521         gtk_fixed_move (GTK_FIXED (self), GTK_WIDGET (view), model_time_system_time_to_xpos (self->priv->timeline->provider, model_clip_get_start (view->clip)), TIME_LINE_BORDER);
522 #line 89 "TrackView.vala"
523         gtk_widget_queue_draw (GTK_WIDGET (self));
524 #line 525 "TrackView.c"
525 }
526
527
528 #line 92 "TrackView.vala"
529 static void track_view_concrete_real_resize (TrackView* base) {
530 #line 531 "TrackView.c"
531         TrackViewConcrete * self;
532         self = TRACK_VIEW_CONCRETE (base);
533         {
534                 GList* w_collection;
535                 GList* w_it;
536 #line 93 "TrackView.vala"
537                 w_collection = gtk_container_get_children (GTK_CONTAINER (self));
538 #line 539 "TrackView.c"
539                 for (w_it = w_collection; w_it != NULL; w_it = w_it->next) {
540                         GtkWidget* w;
541 #line 93 "TrackView.vala"
542                         w = _g_object_ref0 ((GtkWidget*) w_it->data);
543 #line 544 "TrackView.c"
544                         {
545                                 GtkWidget* _tmp0_;
546                                 ClipView* view;
547 #line 94 "TrackView.vala"
548                                 view = _g_object_ref0 ((_tmp0_ = w, IS_CLIP_VIEW (_tmp0_) ? ((ClipView*) _tmp0_) : NULL));
549 #line 95 "TrackView.vala"
550                                 if (view != NULL) {
551 #line 96 "TrackView.vala"
552                                         clip_view_on_clip_moved (view, view->clip);
553 #line 554 "TrackView.c"
554                                 }
555                                 _g_object_unref0 (w);
556                                 _g_object_unref0 (view);
557                         }
558                 }
559 #line 93 "TrackView.vala"
560                 _g_list_free0 (w_collection);
561 #line 562 "TrackView.c"
562         }
563 }
564
565
566 #line 101 "TrackView.vala"
567 static void track_view_concrete_on_clip_removed (TrackViewConcrete* self, ModelClip* clip) {
568 #line 101 "TrackView.vala"
569         g_return_if_fail (IS_TRACK_VIEW_CONCRETE (self));
570 #line 101 "TrackView.vala"
571         g_return_if_fail (MODEL_IS_CLIP (clip));
572 #line 102 "TrackView.vala"
573         logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_removed");
574 #line 575 "TrackView.c"
575         {
576                 GList* w_collection;
577                 GList* w_it;
578 #line 103 "TrackView.vala"
579                 w_collection = gtk_container_get_children (GTK_CONTAINER (self));
580 #line 581 "TrackView.c"
581                 for (w_it = w_collection; w_it != NULL; w_it = w_it->next) {
582                         GtkWidget* w;
583 #line 103 "TrackView.vala"
584                         w = _g_object_ref0 ((GtkWidget*) w_it->data);
585 #line 586 "TrackView.c"
586                         {
587                                 GtkWidget* _tmp0_;
588                                 ClipView* view;
589 #line 104 "TrackView.vala"
590                                 view = _g_object_ref0 ((_tmp0_ = w, IS_CLIP_VIEW (_tmp0_) ? ((ClipView*) _tmp0_) : NULL));
591 #line 105 "TrackView.vala"
592                                 if (view->clip == clip) {
593 #line 594 "TrackView.c"
594                                         guint _tmp1_;
595 #line 106 "TrackView.vala"
596                                         g_signal_parse_name ("clip-moved", TYPE_CLIP_VIEW, &_tmp1_, NULL, FALSE);
597 #line 106 "TrackView.vala"
598                                         g_signal_handlers_disconnect_matched (view, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp1_, 0, NULL, (GCallback) _track_view_concrete_on_clip_moved_clip_view_clip_moved, self);
599 #line 107 "TrackView.vala"
600                                         gtk_container_remove (GTK_CONTAINER (self), GTK_WIDGET (view));
601 #line 108 "TrackView.vala"
602                                         g_signal_emit_by_name (self->priv->timeline, "track-changed");
603 #line 604 "TrackView.c"
604                                         _g_object_unref0 (w);
605                                         _g_object_unref0 (view);
606                                         _g_list_free0 (w_collection);
607 #line 109 "TrackView.vala"
608                                         return;
609 #line 610 "TrackView.c"
610                                 }
611                                 _g_object_unref0 (w);
612                                 _g_object_unref0 (view);
613                         }
614                 }
615 #line 103 "TrackView.vala"
616                 _g_list_free0 (w_collection);
617 #line 618 "TrackView.c"
618         }
619 }
620
621
622 #line 124 "TrackView.vala"
623 static gboolean track_view_concrete_real_button_press_event (GtkWidget* base, GdkEventButton* e) {
624 #line 625 "TrackView.c"
625         TrackViewConcrete * self;
626         gboolean result = FALSE;
627         gboolean _tmp0_ = FALSE;
628         gboolean _tmp1_ = FALSE;
629         gboolean _tmp2_ = FALSE;
630         self = TRACK_VIEW_CONCRETE (base);
631 #line 125 "TrackView.vala"
632         if ((*e).type != GDK_BUTTON_PRESS) {
633 #line 126 "TrackView.vala"
634                 _tmp1_ = (*e).type != GDK_2BUTTON_PRESS;
635 #line 636 "TrackView.c"
636         } else {
637 #line 125 "TrackView.vala"
638                 _tmp1_ = FALSE;
639 #line 640 "TrackView.c"
640         }
641 #line 125 "TrackView.vala"
642         if (_tmp1_) {
643 #line 127 "TrackView.vala"
644                 _tmp0_ = (*e).type != GDK_3BUTTON_PRESS;
645 #line 646 "TrackView.c"
646         } else {
647 #line 125 "TrackView.vala"
648                 _tmp0_ = FALSE;
649 #line 650 "TrackView.c"
650         }
651 #line 125 "TrackView.vala"
652         if (_tmp0_) {
653 #line 654 "TrackView.c"
654                 result = FALSE;
655 #line 128 "TrackView.vala"
656                 return result;
657 #line 658 "TrackView.c"
658         }
659 #line 130 "TrackView.vala"
660         if ((*e).button == 1) {
661 #line 130 "TrackView.vala"
662                 _tmp2_ = TRUE;
663 #line 664 "TrackView.c"
664         } else {
665 #line 131 "TrackView.vala"
666                 _tmp2_ = (*e).button == 3;
667 #line 668 "TrackView.c"
668         }
669 #line 130 "TrackView.vala"
670         if (_tmp2_) {
671 #line 150 "TrackView.vala"
672                 time_line_deselect_all_clips (self->priv->timeline);
673 #line 674 "TrackView.c"
674         }
675         result = FALSE;
676 #line 155 "TrackView.vala"
677         return result;
678 #line 679 "TrackView.c"
679 }
680
681
682 #line 169 "TrackView.vala"
683 static void track_view_concrete_clear_drag (TrackViewConcrete* self) {
684 #line 169 "TrackView.vala"
685         g_return_if_fail (IS_TRACK_VIEW_CONCRETE (self));
686 #line 170 "TrackView.vala"
687         gdk_window_set_cursor (GTK_WIDGET (self)->window, NULL);
688 #line 171 "TrackView.vala"
689         gtk_widget_queue_draw (GTK_WIDGET (self));
690 #line 691 "TrackView.c"
691 }
692
693
694 #line 174 "TrackView.vala"
695 static ModelTrack* track_view_concrete_real_get_track (TrackView* base) {
696 #line 697 "TrackView.c"
697         TrackViewConcrete * self;
698         ModelTrack* result = NULL;
699         self = TRACK_VIEW_CONCRETE (base);
700         result = _g_object_ref0 (self->priv->track);
701 #line 175 "TrackView.vala"
702         return result;
703 #line 704 "TrackView.c"
704 }
705
706
707 #line 178 "TrackView.vala"
708 static gint track_view_concrete_real_get_track_height (TrackView* base) {
709 #line 710 "TrackView.c"
710         TrackViewConcrete * self;
711         gint result = 0;
712         self = TRACK_VIEW_CONCRETE (base);
713         result = TRACK_VIEW_CONCRETE_TrackHeight;
714 #line 179 "TrackView.vala"
715         return result;
716 #line 717 "TrackView.c"
717 }
718
719
720 #line 182 "TrackView.vala"
721 static GtkWidget* track_view_concrete_real_find_child (TrackView* base, double x, double y) {
722 #line 723 "TrackView.c"
723         TrackViewConcrete * self;
724         GtkWidget* result = NULL;
725         self = TRACK_VIEW_CONCRETE (base);
726         {
727                 GList* w_collection;
728                 GList* w_it;
729 #line 183 "TrackView.vala"
730                 w_collection = gtk_container_get_children (GTK_CONTAINER (self));
731 #line 732 "TrackView.c"
732                 for (w_it = w_collection; w_it != NULL; w_it = w_it->next) {
733                         GtkWidget* w;
734 #line 183 "TrackView.vala"
735                         w = _g_object_ref0 ((GtkWidget*) w_it->data);
736 #line 737 "TrackView.c"
737                         {
738                                 gboolean _tmp0_ = FALSE;
739 #line 184 "TrackView.vala"
740                                 if (w->allocation.x <= x) {
741 #line 184 "TrackView.vala"
742                                         _tmp0_ = x < (w->allocation.x + w->allocation.width);
743 #line 744 "TrackView.c"
744                                 } else {
745 #line 184 "TrackView.vala"
746                                         _tmp0_ = FALSE;
747 #line 748 "TrackView.c"
748                                 }
749 #line 184 "TrackView.vala"
750                                 if (_tmp0_) {
751 #line 752 "TrackView.c"
752                                         result = w;
753                                         _g_list_free0 (w_collection);
754 #line 185 "TrackView.vala"
755                                         return result;
756 #line 757 "TrackView.c"
757                                 }
758                                 _g_object_unref0 (w);
759                         }
760                 }
761 #line 183 "TrackView.vala"
762                 _g_list_free0 (w_collection);
763 #line 764 "TrackView.c"
764         }
765         result = NULL;
766 #line 188 "TrackView.vala"
767         return result;
768 #line 769 "TrackView.c"
769 }
770
771
772 #line 191 "TrackView.vala"
773 static void track_view_concrete_real_select_all (TrackView* base) {
774 #line 775 "TrackView.c"
775         TrackViewConcrete * self;
776         self = TRACK_VIEW_CONCRETE (base);
777         {
778                 GList* child_collection;
779                 GList* child_it;
780 #line 192 "TrackView.vala"
781                 child_collection = gtk_container_get_children (GTK_CONTAINER (self));
782 #line 783 "TrackView.c"
783                 for (child_it = child_collection; child_it != NULL; child_it = child_it->next) {
784                         GtkWidget* child;
785 #line 192 "TrackView.vala"
786                         child = _g_object_ref0 ((GtkWidget*) child_it->data);
787 #line 788 "TrackView.c"
788                         {
789                                 GtkWidget* _tmp0_;
790                                 ClipView* clip_view;
791 #line 193 "TrackView.vala"
792                                 clip_view = _g_object_ref0 ((_tmp0_ = child, IS_CLIP_VIEW (_tmp0_) ? ((ClipView*) _tmp0_) : NULL));
793 #line 194 "TrackView.vala"
794                                 if (clip_view != NULL) {
795 #line 195 "TrackView.vala"
796                                         clip_view_select (clip_view);
797 #line 798 "TrackView.c"
798                                 }
799                                 _g_object_unref0 (child);
800                                 _g_object_unref0 (clip_view);
801                         }
802                 }
803 #line 192 "TrackView.vala"
804                 _g_list_free0 (child_collection);
805 #line 806 "TrackView.c"
806         }
807 }
808
809
810 static void track_view_concrete_class_init (TrackViewConcreteClass * klass) {
811         track_view_concrete_parent_class = g_type_class_peek_parent (klass);
812         g_type_class_add_private (klass, sizeof (TrackViewConcretePrivate));
813         GTK_WIDGET_CLASS (klass)->size_request = track_view_concrete_real_size_request;
814         GTK_WIDGET_CLASS (klass)->button_press_event = track_view_concrete_real_button_press_event;
815         G_OBJECT_CLASS (klass)->finalize = track_view_concrete_finalize;
816 }
817
818
819 static void track_view_concrete_track_view_interface_init (TrackViewIface * iface) {
820         track_view_concrete_track_view_parent_iface = g_type_interface_peek_parent (iface);
821         iface->move_to_top = track_view_concrete_real_move_to_top;
822         iface->resize = track_view_concrete_real_resize;
823         iface->get_track = track_view_concrete_real_get_track;
824         iface->get_track_height = track_view_concrete_real_get_track_height;
825         iface->find_child = track_view_concrete_real_find_child;
826         iface->select_all = track_view_concrete_real_select_all;
827 }
828
829
830 static void track_view_concrete_instance_init (TrackViewConcrete * self) {
831         self->priv = TRACK_VIEW_CONCRETE_GET_PRIVATE (self);
832 }
833
834
835 static void track_view_concrete_finalize (GObject* obj) {
836         TrackViewConcrete * self;
837         self = TRACK_VIEW_CONCRETE (obj);
838         _g_object_unref0 (self->priv->track);
839         _g_object_unref0 (self->priv->timeline);
840         _g_object_unref0 (self->priv->transport_delegate);
841         G_OBJECT_CLASS (track_view_concrete_parent_class)->finalize (obj);
842 }
843
844
845 GType track_view_concrete_get_type (void) {
846         static volatile gsize track_view_concrete_type_id__volatile = 0;
847         if (g_once_init_enter (&track_view_concrete_type_id__volatile)) {
848                 static const GTypeInfo g_define_type_info = { sizeof (TrackViewConcreteClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) track_view_concrete_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (TrackViewConcrete), 0, (GInstanceInitFunc) track_view_concrete_instance_init, NULL };
849                 static const GInterfaceInfo track_view_info = { (GInterfaceInitFunc) track_view_concrete_track_view_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
850                 GType track_view_concrete_type_id;
851                 track_view_concrete_type_id = g_type_register_static (GTK_TYPE_FIXED, "TrackViewConcrete", &g_define_type_info, 0);
852                 g_type_add_interface_static (track_view_concrete_type_id, TYPE_TRACK_VIEW, &track_view_info);
853                 g_once_init_leave (&track_view_concrete_type_id__volatile, track_view_concrete_type_id);
854         }
855         return track_view_concrete_type_id__volatile;
856 }
857
858
859
860