Initial commit
[fillmore] / src / marina / marina / TrackView.c
diff --git a/src/marina/marina/TrackView.c b/src/marina/marina/TrackView.c
new file mode 100644 (file)
index 0000000..ec56a4f
--- /dev/null
@@ -0,0 +1,860 @@
+/* TrackView.c generated by valac, the Vala compiler
+ * generated from TrackView.vala, do not modify */
+
+/* Copyright 2009-2010 Yorba Foundation
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later).  See the COPYING file in this distribution. 
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+#include <float.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gee.h>
+#include <gdk/gdk.h>
+
+
+#define TYPE_TRACK_VIEW (track_view_get_type ())
+#define TRACK_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TRACK_VIEW, TrackView))
+#define IS_TRACK_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TRACK_VIEW))
+#define TRACK_VIEW_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_TRACK_VIEW, TrackViewIface))
+
+typedef struct _TrackView TrackView;
+typedef struct _TrackViewIface TrackViewIface;
+
+#define TYPE_CLIP_VIEW (clip_view_get_type ())
+#define CLIP_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CLIP_VIEW, ClipView))
+#define CLIP_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CLIP_VIEW, ClipViewClass))
+#define IS_CLIP_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CLIP_VIEW))
+#define IS_CLIP_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CLIP_VIEW))
+#define CLIP_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CLIP_VIEW, ClipViewClass))
+
+typedef struct _ClipView ClipView;
+typedef struct _ClipViewClass ClipViewClass;
+
+#define MODEL_TYPE_TRACK (model_track_get_type ())
+#define MODEL_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TRACK, ModelTrack))
+#define MODEL_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_TRACK, ModelTrackClass))
+#define MODEL_IS_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TRACK))
+#define MODEL_IS_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_TRACK))
+#define MODEL_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_TRACK, ModelTrackClass))
+
+typedef struct _ModelTrack ModelTrack;
+typedef struct _ModelTrackClass ModelTrackClass;
+
+#define TYPE_TRACK_VIEW_CONCRETE (track_view_concrete_get_type ())
+#define TRACK_VIEW_CONCRETE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TRACK_VIEW_CONCRETE, TrackViewConcrete))
+#define TRACK_VIEW_CONCRETE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TRACK_VIEW_CONCRETE, TrackViewConcreteClass))
+#define IS_TRACK_VIEW_CONCRETE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TRACK_VIEW_CONCRETE))
+#define IS_TRACK_VIEW_CONCRETE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TRACK_VIEW_CONCRETE))
+#define TRACK_VIEW_CONCRETE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TRACK_VIEW_CONCRETE, TrackViewConcreteClass))
+
+typedef struct _TrackViewConcrete TrackViewConcrete;
+typedef struct _TrackViewConcreteClass TrackViewConcreteClass;
+typedef struct _TrackViewConcretePrivate TrackViewConcretePrivate;
+
+#define TYPE_TIME_LINE (time_line_get_type ())
+#define TIME_LINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TIME_LINE, TimeLine))
+#define TIME_LINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TIME_LINE, TimeLineClass))
+#define IS_TIME_LINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TIME_LINE))
+#define IS_TIME_LINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TIME_LINE))
+#define TIME_LINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TIME_LINE, TimeLineClass))
+
+typedef struct _TimeLine TimeLine;
+typedef struct _TimeLineClass TimeLineClass;
+
+#define TYPE_TRANSPORT_DELEGATE (transport_delegate_get_type ())
+#define TRANSPORT_DELEGATE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TRANSPORT_DELEGATE, TransportDelegate))
+#define IS_TRANSPORT_DELEGATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TRANSPORT_DELEGATE))
+#define TRANSPORT_DELEGATE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_TRANSPORT_DELEGATE, TransportDelegateIface))
+
+typedef struct _TransportDelegate TransportDelegate;
+typedef struct _TransportDelegateIface TransportDelegateIface;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+#define MODEL_TYPE_CLIP (model_clip_get_type ())
+#define MODEL_CLIP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP, ModelClip))
+#define MODEL_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP, ModelClipClass))
+#define MODEL_IS_CLIP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP))
+#define MODEL_IS_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP))
+#define MODEL_CLIP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP, ModelClipClass))
+
+typedef struct _ModelClip ModelClip;
+typedef struct _ModelClipClass ModelClipClass;
+
+#define LOGGING_TYPE_FACILITY (logging_facility_get_type ())
+
+#define LOGGING_TYPE_LEVEL (logging_level_get_type ())
+typedef struct _TimeLinePrivate TimeLinePrivate;
+
+#define MODEL_TYPE_PROJECT (model_project_get_type ())
+#define MODEL_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_PROJECT, ModelProject))
+#define MODEL_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_PROJECT, ModelProjectClass))
+#define MODEL_IS_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_PROJECT))
+#define MODEL_IS_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_PROJECT))
+#define MODEL_PROJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_PROJECT, ModelProjectClass))
+
+typedef struct _ModelProject ModelProject;
+typedef struct _ModelProjectClass ModelProjectClass;
+
+#define MODEL_TYPE_TIME_SYSTEM (model_time_system_get_type ())
+#define MODEL_TIME_SYSTEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TIME_SYSTEM, ModelTimeSystem))
+#define MODEL_IS_TIME_SYSTEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TIME_SYSTEM))
+#define MODEL_TIME_SYSTEM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MODEL_TYPE_TIME_SYSTEM, ModelTimeSystemIface))
+
+typedef struct _ModelTimeSystem ModelTimeSystem;
+typedef struct _ModelTimeSystemIface ModelTimeSystemIface;
+
+#define VIEW_TYPE_RULER (view_ruler_get_type ())
+#define VIEW_RULER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_RULER, ViewRuler))
+#define VIEW_RULER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_RULER, ViewRulerClass))
+#define VIEW_IS_RULER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_RULER))
+#define VIEW_IS_RULER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_RULER))
+#define VIEW_RULER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_RULER, ViewRulerClass))
+
+typedef struct _ViewRuler ViewRuler;
+typedef struct _ViewRulerClass ViewRulerClass;
+
+#define TYPE_CLIPBOARD (clipboard_get_type ())
+#define CLIPBOARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CLIPBOARD, Clipboard))
+#define CLIPBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CLIPBOARD, ClipboardClass))
+#define IS_CLIPBOARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CLIPBOARD))
+#define IS_CLIPBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CLIPBOARD))
+#define CLIPBOARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CLIPBOARD, ClipboardClass))
+
+typedef struct _Clipboard Clipboard;
+typedef struct _ClipboardClass ClipboardClass;
+typedef struct _ClipViewPrivate ClipViewPrivate;
+#define _g_list_free0(var) ((var == NULL) ? NULL : (var = (g_list_free (var), NULL)))
+
+struct _TrackViewIface {
+       GTypeInterface parent_iface;
+       void (*move_to_top) (TrackView* self, ClipView* clip_view);
+       void (*resize) (TrackView* self);
+       ModelTrack* (*get_track) (TrackView* self);
+       gint (*get_track_height) (TrackView* self);
+       GtkWidget* (*find_child) (TrackView* self, double x, double y);
+       void (*select_all) (TrackView* self);
+};
+
+struct _TrackViewConcrete {
+       GtkFixed parent_instance;
+       TrackViewConcretePrivate * priv;
+};
+
+struct _TrackViewConcreteClass {
+       GtkFixedClass parent_class;
+};
+
+struct _TransportDelegateIface {
+       GTypeInterface parent_iface;
+       gboolean (*is_playing) (TransportDelegate* self);
+       gboolean (*is_recording) (TransportDelegate* self);
+       gboolean (*is_stopped) (TransportDelegate* self);
+};
+
+struct _TrackViewConcretePrivate {
+       ModelTrack* track;
+       TimeLine* timeline;
+       TransportDelegate* transport_delegate;
+};
+
+typedef enum  {
+       LOGGING_FACILITY_SIGNAL_HANDLERS,
+       LOGGING_FACILITY_DEVELOPER_WARNINGS,
+       LOGGING_FACILITY_GRAPH,
+       LOGGING_FACILITY_LOADING,
+       LOGGING_FACILITY_IMPORT,
+       LOGGING_FACILITY_SINGLEDECODEBIN
+} LoggingFacility;
+
+typedef enum  {
+       LOGGING_LEVEL_CRITICAL,
+       LOGGING_LEVEL_HIGH,
+       LOGGING_LEVEL_MEDIUM,
+       LOGGING_LEVEL_LOW,
+       LOGGING_LEVEL_INFO,
+       LOGGING_LEVEL_VERBOSE
+} LoggingLevel;
+
+struct _ModelTimeSystemIface {
+       GTypeInterface parent_iface;
+       void (*calculate_pixel_step) (ModelTimeSystem* self, float inc, float pixel_min, float pixel_div);
+       gint64 (*xpos_to_time) (ModelTimeSystem* self, gint x);
+       gint64 (*xsize_to_time) (ModelTimeSystem* self, gint x);
+       gint (*time_to_xpos) (ModelTimeSystem* self, gint64 time);
+       gint64 (*get_pixel_snap_time) (ModelTimeSystem* self);
+       gint (*time_to_xsize) (ModelTimeSystem* self, gint64 time);
+       float (*get_pixel_percentage) (ModelTimeSystem* self);
+       gint (*get_start_token) (ModelTimeSystem* self, gint xsize);
+       gint (*get_next_position) (ModelTimeSystem* self, gint token);
+       gint (*get_pixel_height) (ModelTimeSystem* self, gint token);
+       char* (*get_display_string) (ModelTimeSystem* self, gint token);
+       gint (*frame_to_xsize) (ModelTimeSystem* self, gint frame);
+       gint (*xsize_to_frame) (ModelTimeSystem* self, gint xsize);
+       char* (*get_time_string) (ModelTimeSystem* self, gint64 time);
+       char* (*get_time_duration) (ModelTimeSystem* self, gint64 time);
+};
+
+struct _TimeLine {
+       GtkEventBox parent_instance;
+       TimeLinePrivate * priv;
+       ModelProject* project;
+       ModelTimeSystem* provider;
+       ViewRuler* ruler;
+       GeeArrayList* tracks;
+       GeeArrayList* selected_clips;
+       Clipboard* clipboard;
+};
+
+struct _TimeLineClass {
+       GtkEventBoxClass parent_class;
+};
+
+struct _ClipView {
+       GtkDrawingArea parent_instance;
+       ClipViewPrivate * priv;
+       ModelClip* clip;
+       gint64 initial_time;
+       gboolean is_selected;
+       gint height;
+};
+
+struct _ClipViewClass {
+       GtkDrawingAreaClass parent_class;
+};
+
+
+static gpointer track_view_concrete_parent_class = NULL;
+static TrackViewIface* track_view_concrete_track_view_parent_iface = NULL;
+
+GType clip_view_get_type (void);
+GType model_track_get_type (void);
+GType track_view_get_type (void);
+GType track_view_concrete_get_type (void);
+GType time_line_get_type (void);
+GType transport_delegate_get_type (void);
+#define TRACK_VIEW_CONCRETE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_TRACK_VIEW_CONCRETE, TrackViewConcretePrivate))
+enum  {
+       TRACK_VIEW_CONCRETE_DUMMY_PROPERTY
+};
+#define TRACK_VIEW_CONCRETE_clip_height 64
+#define TIME_LINE_BORDER 4
+#define TRACK_VIEW_CONCRETE_TrackHeight (TRACK_VIEW_CONCRETE_clip_height + (TIME_LINE_BORDER * 2))
+GType model_clip_get_type (void);
+static void track_view_concrete_on_clip_added (TrackViewConcrete* self, ModelTrack* t, ModelClip* clip, gboolean select);
+static void _track_view_concrete_on_clip_added_model_track_clip_added (ModelTrack* _sender, ModelClip* clip, gboolean select, gpointer self);
+static void track_view_concrete_on_clip_removed (TrackViewConcrete* self, ModelClip* clip);
+static void _track_view_concrete_on_clip_removed_model_track_clip_removed (ModelTrack* _sender, ModelClip* clip, gpointer self);
+TrackViewConcrete* track_view_concrete_new (TransportDelegate* transport_delegate, ModelTrack* track, TimeLine* timeline);
+TrackViewConcrete* track_view_concrete_construct (GType object_type, TransportDelegate* transport_delegate, ModelTrack* track, TimeLine* timeline);
+static void track_view_concrete_real_size_request (GtkWidget* base, GtkRequisition* requisition);
+GType logging_facility_get_type (void);
+GType logging_level_get_type (void);
+void logging_emit (GObject* object, LoggingFacility facility, LoggingLevel level, const char* message);
+static void track_view_concrete_set_clip_pos (TrackViewConcrete* self, ClipView* view);
+static void track_view_concrete_on_clip_moved (TrackViewConcrete* self, ClipView* clip);
+void model_track_delete_clip (ModelTrack* self, ModelClip* clip);
+static void track_view_concrete_clear_drag (TrackViewConcrete* self);
+static void track_view_concrete_on_clip_deleted (TrackViewConcrete* self, ModelClip* clip);
+GType model_project_get_type (void);
+GType model_time_system_get_type (void);
+GType view_ruler_get_type (void);
+gpointer clipboard_ref (gpointer instance);
+void clipboard_unref (gpointer instance);
+GParamSpec* param_spec_clipboard (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void value_set_clipboard (GValue* value, gpointer v_object);
+void value_take_clipboard (GValue* value, gpointer v_object);
+gpointer value_get_clipboard (const GValue* value);
+GType clipboard_get_type (void);
+ClipView* clip_view_new (TransportDelegate* transport_delegate, ModelClip* clip, ModelTimeSystem* time_provider, gint height);
+ClipView* clip_view_construct (GType object_type, TransportDelegate* transport_delegate, ModelClip* clip, ModelTimeSystem* time_provider, gint height);
+static void _track_view_concrete_on_clip_moved_clip_view_clip_moved (ClipView* _sender, ClipView* clip, gpointer self);
+static void _track_view_concrete_on_clip_deleted_clip_view_clip_deleted (ClipView* _sender, ModelClip* clip, gpointer self);
+static void track_view_concrete_on_move_begin (TrackViewConcrete* self, ClipView* clip_view, gboolean do_copy);
+static void _track_view_concrete_on_move_begin_clip_view_move_begin (ClipView* _sender, ClipView* clip_view, gboolean copy, gpointer self);
+static void track_view_concrete_on_trim_begin (TrackViewConcrete* self, ClipView* clip_view);
+static void _track_view_concrete_on_trim_begin_clip_view_trim_begin (ClipView* _sender, ClipView* clip_view, GdkWindowEdge edge, gpointer self);
+gint model_time_system_time_to_xpos (ModelTimeSystem* self, gint64 time);
+gint64 model_clip_get_start (ModelClip* self);
+static void track_view_concrete_real_move_to_top (TrackView* base, ClipView* clip_view);
+void track_view_move_to_top (TrackView* self, ClipView* clip_view);
+void clip_view_on_clip_moved (ClipView* self, ModelClip* clip);
+static void track_view_concrete_real_resize (TrackView* base);
+void time_line_deselect_all_clips (TimeLine* self);
+static gboolean track_view_concrete_real_button_press_event (GtkWidget* base, GdkEventButton* e);
+static ModelTrack* track_view_concrete_real_get_track (TrackView* base);
+static gint track_view_concrete_real_get_track_height (TrackView* base);
+static GtkWidget* track_view_concrete_real_find_child (TrackView* base, double x, double y);
+void clip_view_select (ClipView* self);
+static void track_view_concrete_real_select_all (TrackView* base);
+static void track_view_concrete_finalize (GObject* obj);
+
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+#line 44 "TrackView.vala"
+static void _track_view_concrete_on_clip_added_model_track_clip_added (ModelTrack* _sender, ModelClip* clip, gboolean select, gpointer self) {
+#line 307 "TrackView.c"
+       track_view_concrete_on_clip_added (self, _sender, clip, select);
+}
+
+
+#line 101 "TrackView.vala"
+static void _track_view_concrete_on_clip_removed_model_track_clip_removed (ModelTrack* _sender, ModelClip* clip, gpointer self) {
+#line 314 "TrackView.c"
+       track_view_concrete_on_clip_removed (self, clip);
+}
+
+
+#line 17 "TrackView.vala"
+TrackViewConcrete* track_view_concrete_construct (GType object_type, TransportDelegate* transport_delegate, ModelTrack* track, TimeLine* timeline) {
+#line 321 "TrackView.c"
+       TrackViewConcrete * self;
+       ModelTrack* _tmp0_;
+       TimeLine* _tmp1_;
+       TransportDelegate* _tmp2_;
+#line 17 "TrackView.vala"
+       g_return_val_if_fail (IS_TRANSPORT_DELEGATE (transport_delegate), NULL);
+#line 17 "TrackView.vala"
+       g_return_val_if_fail (MODEL_IS_TRACK (track), NULL);
+#line 17 "TrackView.vala"
+       g_return_val_if_fail (IS_TIME_LINE (timeline), NULL);
+#line 332 "TrackView.c"
+       self = g_object_newv (object_type, 0, NULL);
+#line 19 "TrackView.vala"
+       self->priv->track = (_tmp0_ = _g_object_ref0 (track), _g_object_unref0 (self->priv->track), _tmp0_);
+#line 20 "TrackView.vala"
+       self->priv->timeline = (_tmp1_ = _g_object_ref0 (timeline), _g_object_unref0 (self->priv->timeline), _tmp1_);
+#line 21 "TrackView.vala"
+       self->priv->transport_delegate = (_tmp2_ = _g_object_ref0 (transport_delegate), _g_object_unref0 (self->priv->transport_delegate), _tmp2_);
+#line 23 "TrackView.vala"
+       g_signal_connect_object (track, "clip-added", (GCallback) _track_view_concrete_on_clip_added_model_track_clip_added, self, 0);
+#line 24 "TrackView.vala"
+       g_signal_connect_object (track, "clip-removed", (GCallback) _track_view_concrete_on_clip_removed_model_track_clip_removed, self, 0);
+#line 344 "TrackView.c"
+       return self;
+}
+
+
+#line 17 "TrackView.vala"
+TrackViewConcrete* track_view_concrete_new (TransportDelegate* transport_delegate, ModelTrack* track, TimeLine* timeline) {
+#line 17 "TrackView.vala"
+       return track_view_concrete_construct (TYPE_TRACK_VIEW_CONCRETE, transport_delegate, track, timeline);
+#line 353 "TrackView.c"
+}
+
+
+#line 27 "TrackView.vala"
+static void track_view_concrete_real_size_request (GtkWidget* base, GtkRequisition* requisition) {
+#line 359 "TrackView.c"
+       TrackViewConcrete * self;
+       self = TRACK_VIEW_CONCRETE (base);
+#line 28 "TrackView.vala"
+       GTK_WIDGET_CLASS (track_view_concrete_parent_class)->size_request (GTK_WIDGET (GTK_FIXED (self)), requisition);
+#line 29 "TrackView.vala"
+       (*requisition).height = TRACK_VIEW_CONCRETE_TrackHeight;
+#line 30 "TrackView.vala"
+       (*requisition).width = (*requisition).width + TIME_LINE_BORDER;
+#line 368 "TrackView.c"
+}
+
+
+#line 33 "TrackView.vala"
+static void track_view_concrete_on_clip_moved (TrackViewConcrete* self, ClipView* clip) {
+#line 33 "TrackView.vala"
+       g_return_if_fail (IS_TRACK_VIEW_CONCRETE (self));
+#line 33 "TrackView.vala"
+       g_return_if_fail (IS_CLIP_VIEW (clip));
+#line 34 "TrackView.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_moved");
+#line 35 "TrackView.vala"
+       track_view_concrete_set_clip_pos (self, clip);
+#line 382 "TrackView.c"
+}
+
+
+#line 38 "TrackView.vala"
+static void track_view_concrete_on_clip_deleted (TrackViewConcrete* self, ModelClip* clip) {
+#line 38 "TrackView.vala"
+       g_return_if_fail (IS_TRACK_VIEW_CONCRETE (self));
+#line 38 "TrackView.vala"
+       g_return_if_fail (MODEL_IS_CLIP (clip));
+#line 39 "TrackView.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_deleted");
+#line 40 "TrackView.vala"
+       model_track_delete_clip (self->priv->track, clip);
+#line 41 "TrackView.vala"
+       track_view_concrete_clear_drag (self);
+#line 398 "TrackView.c"
+}
+
+
+#line 33 "TrackView.vala"
+static void _track_view_concrete_on_clip_moved_clip_view_clip_moved (ClipView* _sender, ClipView* clip, gpointer self) {
+#line 404 "TrackView.c"
+       track_view_concrete_on_clip_moved (self, clip);
+}
+
+
+#line 38 "TrackView.vala"
+static void _track_view_concrete_on_clip_deleted_clip_view_clip_deleted (ClipView* _sender, ModelClip* clip, gpointer self) {
+#line 411 "TrackView.c"
+       track_view_concrete_on_clip_deleted (self, clip);
+}
+
+
+#line 82 "TrackView.vala"
+static void _track_view_concrete_on_move_begin_clip_view_move_begin (ClipView* _sender, ClipView* clip_view, gboolean copy, gpointer self) {
+#line 418 "TrackView.c"
+       track_view_concrete_on_move_begin (self, clip_view, copy);
+}
+
+
+#line 77 "TrackView.vala"
+static void _track_view_concrete_on_trim_begin_clip_view_trim_begin (ClipView* _sender, ClipView* clip_view, GdkWindowEdge edge, gpointer self) {
+#line 425 "TrackView.c"
+       track_view_concrete_on_trim_begin (self, clip_view);
+}
+
+
+#line 44 "TrackView.vala"
+static void track_view_concrete_on_clip_added (TrackViewConcrete* self, ModelTrack* t, ModelClip* clip, gboolean select) {
+#line 432 "TrackView.c"
+       ClipView* view;
+#line 44 "TrackView.vala"
+       g_return_if_fail (IS_TRACK_VIEW_CONCRETE (self));
+#line 44 "TrackView.vala"
+       g_return_if_fail (MODEL_IS_TRACK (t));
+#line 44 "TrackView.vala"
+       g_return_if_fail (MODEL_IS_CLIP (clip));
+#line 45 "TrackView.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_added");
+#line 46 "TrackView.vala"
+       view = g_object_ref_sink (clip_view_new (self->priv->transport_delegate, clip, self->priv->timeline->provider, TRACK_VIEW_CONCRETE_clip_height));
+#line 47 "TrackView.vala"
+       g_signal_connect_object (view, "clip-moved", (GCallback) _track_view_concrete_on_clip_moved_clip_view_clip_moved, self, 0);
+#line 48 "TrackView.vala"
+       g_signal_connect_object (view, "clip-deleted", (GCallback) _track_view_concrete_on_clip_deleted_clip_view_clip_deleted, self, 0);
+#line 49 "TrackView.vala"
+       g_signal_connect_object (view, "move-begin", (GCallback) _track_view_concrete_on_move_begin_clip_view_move_begin, self, 0);
+#line 50 "TrackView.vala"
+       g_signal_connect_object (view, "trim-begin", (GCallback) _track_view_concrete_on_trim_begin_clip_view_trim_begin, self, 0);
+#line 52 "TrackView.vala"
+       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);
+#line 53 "TrackView.vala"
+       gtk_widget_show (GTK_WIDGET (view));
+#line 55 "TrackView.vala"
+       g_signal_emit_by_name (self->priv->timeline, "track-changed");
+#line 56 "TrackView.vala"
+       g_signal_emit_by_name (TRACK_VIEW (self), "clip-view-added", view);
+#line 57 "TrackView.vala"
+       if (select) {
+#line 58 "TrackView.vala"
+               g_signal_emit_by_name (view, "selection-request", view, FALSE);
+#line 464 "TrackView.c"
+       }
+       _g_object_unref0 (view);
+}
+
+
+#line 64 "TrackView.vala"
+static void track_view_concrete_real_move_to_top (TrackView* base, ClipView* clip_view) {
+#line 472 "TrackView.c"
+       TrackViewConcrete * self;
+       self = TRACK_VIEW_CONCRETE (base);
+#line 64 "TrackView.vala"
+       g_return_if_fail (IS_CLIP_VIEW (clip_view));
+#line 70 "TrackView.vala"
+       gtk_container_remove (GTK_CONTAINER (self), GTK_WIDGET (clip_view));
+#line 71 "TrackView.vala"
+       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);
+#line 74 "TrackView.vala"
+       gtk_widget_show (GTK_WIDGET (clip_view));
+#line 483 "TrackView.c"
+}
+
+
+#line 77 "TrackView.vala"
+static void track_view_concrete_on_trim_begin (TrackViewConcrete* self, ClipView* clip_view) {
+#line 77 "TrackView.vala"
+       g_return_if_fail (IS_TRACK_VIEW_CONCRETE (self));
+#line 77 "TrackView.vala"
+       g_return_if_fail (IS_CLIP_VIEW (clip_view));
+#line 78 "TrackView.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_trim_begin");
+#line 79 "TrackView.vala"
+       track_view_move_to_top (TRACK_VIEW (self), clip_view);
+#line 497 "TrackView.c"
+}
+
+
+#line 82 "TrackView.vala"
+static void track_view_concrete_on_move_begin (TrackViewConcrete* self, ClipView* clip_view, gboolean do_copy) {
+#line 82 "TrackView.vala"
+       g_return_if_fail (IS_TRACK_VIEW_CONCRETE (self));
+#line 82 "TrackView.vala"
+       g_return_if_fail (IS_CLIP_VIEW (clip_view));
+#line 83 "TrackView.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_move_begin");
+#line 84 "TrackView.vala"
+       track_view_move_to_top (TRACK_VIEW (self), clip_view);
+#line 511 "TrackView.c"
+}
+
+
+#line 87 "TrackView.vala"
+static void track_view_concrete_set_clip_pos (TrackViewConcrete* self, ClipView* view) {
+#line 87 "TrackView.vala"
+       g_return_if_fail (IS_TRACK_VIEW_CONCRETE (self));
+#line 87 "TrackView.vala"
+       g_return_if_fail (IS_CLIP_VIEW (view));
+#line 88 "TrackView.vala"
+       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);
+#line 89 "TrackView.vala"
+       gtk_widget_queue_draw (GTK_WIDGET (self));
+#line 525 "TrackView.c"
+}
+
+
+#line 92 "TrackView.vala"
+static void track_view_concrete_real_resize (TrackView* base) {
+#line 531 "TrackView.c"
+       TrackViewConcrete * self;
+       self = TRACK_VIEW_CONCRETE (base);
+       {
+               GList* w_collection;
+               GList* w_it;
+#line 93 "TrackView.vala"
+               w_collection = gtk_container_get_children (GTK_CONTAINER (self));
+#line 539 "TrackView.c"
+               for (w_it = w_collection; w_it != NULL; w_it = w_it->next) {
+                       GtkWidget* w;
+#line 93 "TrackView.vala"
+                       w = _g_object_ref0 ((GtkWidget*) w_it->data);
+#line 544 "TrackView.c"
+                       {
+                               GtkWidget* _tmp0_;
+                               ClipView* view;
+#line 94 "TrackView.vala"
+                               view = _g_object_ref0 ((_tmp0_ = w, IS_CLIP_VIEW (_tmp0_) ? ((ClipView*) _tmp0_) : NULL));
+#line 95 "TrackView.vala"
+                               if (view != NULL) {
+#line 96 "TrackView.vala"
+                                       clip_view_on_clip_moved (view, view->clip);
+#line 554 "TrackView.c"
+                               }
+                               _g_object_unref0 (w);
+                               _g_object_unref0 (view);
+                       }
+               }
+#line 93 "TrackView.vala"
+               _g_list_free0 (w_collection);
+#line 562 "TrackView.c"
+       }
+}
+
+
+#line 101 "TrackView.vala"
+static void track_view_concrete_on_clip_removed (TrackViewConcrete* self, ModelClip* clip) {
+#line 101 "TrackView.vala"
+       g_return_if_fail (IS_TRACK_VIEW_CONCRETE (self));
+#line 101 "TrackView.vala"
+       g_return_if_fail (MODEL_IS_CLIP (clip));
+#line 102 "TrackView.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_removed");
+#line 575 "TrackView.c"
+       {
+               GList* w_collection;
+               GList* w_it;
+#line 103 "TrackView.vala"
+               w_collection = gtk_container_get_children (GTK_CONTAINER (self));
+#line 581 "TrackView.c"
+               for (w_it = w_collection; w_it != NULL; w_it = w_it->next) {
+                       GtkWidget* w;
+#line 103 "TrackView.vala"
+                       w = _g_object_ref0 ((GtkWidget*) w_it->data);
+#line 586 "TrackView.c"
+                       {
+                               GtkWidget* _tmp0_;
+                               ClipView* view;
+#line 104 "TrackView.vala"
+                               view = _g_object_ref0 ((_tmp0_ = w, IS_CLIP_VIEW (_tmp0_) ? ((ClipView*) _tmp0_) : NULL));
+#line 105 "TrackView.vala"
+                               if (view->clip == clip) {
+#line 594 "TrackView.c"
+                                       guint _tmp1_;
+#line 106 "TrackView.vala"
+                                       g_signal_parse_name ("clip-moved", TYPE_CLIP_VIEW, &_tmp1_, NULL, FALSE);
+#line 106 "TrackView.vala"
+                                       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);
+#line 107 "TrackView.vala"
+                                       gtk_container_remove (GTK_CONTAINER (self), GTK_WIDGET (view));
+#line 108 "TrackView.vala"
+                                       g_signal_emit_by_name (self->priv->timeline, "track-changed");
+#line 604 "TrackView.c"
+                                       _g_object_unref0 (w);
+                                       _g_object_unref0 (view);
+                                       _g_list_free0 (w_collection);
+#line 109 "TrackView.vala"
+                                       return;
+#line 610 "TrackView.c"
+                               }
+                               _g_object_unref0 (w);
+                               _g_object_unref0 (view);
+                       }
+               }
+#line 103 "TrackView.vala"
+               _g_list_free0 (w_collection);
+#line 618 "TrackView.c"
+       }
+}
+
+
+#line 124 "TrackView.vala"
+static gboolean track_view_concrete_real_button_press_event (GtkWidget* base, GdkEventButton* e) {
+#line 625 "TrackView.c"
+       TrackViewConcrete * self;
+       gboolean result = FALSE;
+       gboolean _tmp0_ = FALSE;
+       gboolean _tmp1_ = FALSE;
+       gboolean _tmp2_ = FALSE;
+       self = TRACK_VIEW_CONCRETE (base);
+#line 125 "TrackView.vala"
+       if ((*e).type != GDK_BUTTON_PRESS) {
+#line 126 "TrackView.vala"
+               _tmp1_ = (*e).type != GDK_2BUTTON_PRESS;
+#line 636 "TrackView.c"
+       } else {
+#line 125 "TrackView.vala"
+               _tmp1_ = FALSE;
+#line 640 "TrackView.c"
+       }
+#line 125 "TrackView.vala"
+       if (_tmp1_) {
+#line 127 "TrackView.vala"
+               _tmp0_ = (*e).type != GDK_3BUTTON_PRESS;
+#line 646 "TrackView.c"
+       } else {
+#line 125 "TrackView.vala"
+               _tmp0_ = FALSE;
+#line 650 "TrackView.c"
+       }
+#line 125 "TrackView.vala"
+       if (_tmp0_) {
+#line 654 "TrackView.c"
+               result = FALSE;
+#line 128 "TrackView.vala"
+               return result;
+#line 658 "TrackView.c"
+       }
+#line 130 "TrackView.vala"
+       if ((*e).button == 1) {
+#line 130 "TrackView.vala"
+               _tmp2_ = TRUE;
+#line 664 "TrackView.c"
+       } else {
+#line 131 "TrackView.vala"
+               _tmp2_ = (*e).button == 3;
+#line 668 "TrackView.c"
+       }
+#line 130 "TrackView.vala"
+       if (_tmp2_) {
+#line 150 "TrackView.vala"
+               time_line_deselect_all_clips (self->priv->timeline);
+#line 674 "TrackView.c"
+       }
+       result = FALSE;
+#line 155 "TrackView.vala"
+       return result;
+#line 679 "TrackView.c"
+}
+
+
+#line 169 "TrackView.vala"
+static void track_view_concrete_clear_drag (TrackViewConcrete* self) {
+#line 169 "TrackView.vala"
+       g_return_if_fail (IS_TRACK_VIEW_CONCRETE (self));
+#line 170 "TrackView.vala"
+       gdk_window_set_cursor (GTK_WIDGET (self)->window, NULL);
+#line 171 "TrackView.vala"
+       gtk_widget_queue_draw (GTK_WIDGET (self));
+#line 691 "TrackView.c"
+}
+
+
+#line 174 "TrackView.vala"
+static ModelTrack* track_view_concrete_real_get_track (TrackView* base) {
+#line 697 "TrackView.c"
+       TrackViewConcrete * self;
+       ModelTrack* result = NULL;
+       self = TRACK_VIEW_CONCRETE (base);
+       result = _g_object_ref0 (self->priv->track);
+#line 175 "TrackView.vala"
+       return result;
+#line 704 "TrackView.c"
+}
+
+
+#line 178 "TrackView.vala"
+static gint track_view_concrete_real_get_track_height (TrackView* base) {
+#line 710 "TrackView.c"
+       TrackViewConcrete * self;
+       gint result = 0;
+       self = TRACK_VIEW_CONCRETE (base);
+       result = TRACK_VIEW_CONCRETE_TrackHeight;
+#line 179 "TrackView.vala"
+       return result;
+#line 717 "TrackView.c"
+}
+
+
+#line 182 "TrackView.vala"
+static GtkWidget* track_view_concrete_real_find_child (TrackView* base, double x, double y) {
+#line 723 "TrackView.c"
+       TrackViewConcrete * self;
+       GtkWidget* result = NULL;
+       self = TRACK_VIEW_CONCRETE (base);
+       {
+               GList* w_collection;
+               GList* w_it;
+#line 183 "TrackView.vala"
+               w_collection = gtk_container_get_children (GTK_CONTAINER (self));
+#line 732 "TrackView.c"
+               for (w_it = w_collection; w_it != NULL; w_it = w_it->next) {
+                       GtkWidget* w;
+#line 183 "TrackView.vala"
+                       w = _g_object_ref0 ((GtkWidget*) w_it->data);
+#line 737 "TrackView.c"
+                       {
+                               gboolean _tmp0_ = FALSE;
+#line 184 "TrackView.vala"
+                               if (w->allocation.x <= x) {
+#line 184 "TrackView.vala"
+                                       _tmp0_ = x < (w->allocation.x + w->allocation.width);
+#line 744 "TrackView.c"
+                               } else {
+#line 184 "TrackView.vala"
+                                       _tmp0_ = FALSE;
+#line 748 "TrackView.c"
+                               }
+#line 184 "TrackView.vala"
+                               if (_tmp0_) {
+#line 752 "TrackView.c"
+                                       result = w;
+                                       _g_list_free0 (w_collection);
+#line 185 "TrackView.vala"
+                                       return result;
+#line 757 "TrackView.c"
+                               }
+                               _g_object_unref0 (w);
+                       }
+               }
+#line 183 "TrackView.vala"
+               _g_list_free0 (w_collection);
+#line 764 "TrackView.c"
+       }
+       result = NULL;
+#line 188 "TrackView.vala"
+       return result;
+#line 769 "TrackView.c"
+}
+
+
+#line 191 "TrackView.vala"
+static void track_view_concrete_real_select_all (TrackView* base) {
+#line 775 "TrackView.c"
+       TrackViewConcrete * self;
+       self = TRACK_VIEW_CONCRETE (base);
+       {
+               GList* child_collection;
+               GList* child_it;
+#line 192 "TrackView.vala"
+               child_collection = gtk_container_get_children (GTK_CONTAINER (self));
+#line 783 "TrackView.c"
+               for (child_it = child_collection; child_it != NULL; child_it = child_it->next) {
+                       GtkWidget* child;
+#line 192 "TrackView.vala"
+                       child = _g_object_ref0 ((GtkWidget*) child_it->data);
+#line 788 "TrackView.c"
+                       {
+                               GtkWidget* _tmp0_;
+                               ClipView* clip_view;
+#line 193 "TrackView.vala"
+                               clip_view = _g_object_ref0 ((_tmp0_ = child, IS_CLIP_VIEW (_tmp0_) ? ((ClipView*) _tmp0_) : NULL));
+#line 194 "TrackView.vala"
+                               if (clip_view != NULL) {
+#line 195 "TrackView.vala"
+                                       clip_view_select (clip_view);
+#line 798 "TrackView.c"
+                               }
+                               _g_object_unref0 (child);
+                               _g_object_unref0 (clip_view);
+                       }
+               }
+#line 192 "TrackView.vala"
+               _g_list_free0 (child_collection);
+#line 806 "TrackView.c"
+       }
+}
+
+
+static void track_view_concrete_class_init (TrackViewConcreteClass * klass) {
+       track_view_concrete_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (TrackViewConcretePrivate));
+       GTK_WIDGET_CLASS (klass)->size_request = track_view_concrete_real_size_request;
+       GTK_WIDGET_CLASS (klass)->button_press_event = track_view_concrete_real_button_press_event;
+       G_OBJECT_CLASS (klass)->finalize = track_view_concrete_finalize;
+}
+
+
+static void track_view_concrete_track_view_interface_init (TrackViewIface * iface) {
+       track_view_concrete_track_view_parent_iface = g_type_interface_peek_parent (iface);
+       iface->move_to_top = track_view_concrete_real_move_to_top;
+       iface->resize = track_view_concrete_real_resize;
+       iface->get_track = track_view_concrete_real_get_track;
+       iface->get_track_height = track_view_concrete_real_get_track_height;
+       iface->find_child = track_view_concrete_real_find_child;
+       iface->select_all = track_view_concrete_real_select_all;
+}
+
+
+static void track_view_concrete_instance_init (TrackViewConcrete * self) {
+       self->priv = TRACK_VIEW_CONCRETE_GET_PRIVATE (self);
+}
+
+
+static void track_view_concrete_finalize (GObject* obj) {
+       TrackViewConcrete * self;
+       self = TRACK_VIEW_CONCRETE (obj);
+       _g_object_unref0 (self->priv->track);
+       _g_object_unref0 (self->priv->timeline);
+       _g_object_unref0 (self->priv->transport_delegate);
+       G_OBJECT_CLASS (track_view_concrete_parent_class)->finalize (obj);
+}
+
+
+GType track_view_concrete_get_type (void) {
+       static volatile gsize track_view_concrete_type_id__volatile = 0;
+       if (g_once_init_enter (&track_view_concrete_type_id__volatile)) {
+               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 };
+               static const GInterfaceInfo track_view_info = { (GInterfaceInitFunc) track_view_concrete_track_view_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
+               GType track_view_concrete_type_id;
+               track_view_concrete_type_id = g_type_register_static (GTK_TYPE_FIXED, "TrackViewConcrete", &g_define_type_info, 0);
+               g_type_add_interface_static (track_view_concrete_type_id, TYPE_TRACK_VIEW, &track_view_info);
+               g_once_init_leave (&track_view_concrete_type_id__volatile, track_view_concrete_type_id);
+       }
+       return track_view_concrete_type_id__volatile;
+}
+
+
+
+