X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fmarina%2Fmarina%2Ftrack.c;fp=src%2Fmarina%2Fmarina%2Ftrack.c;h=5ac696717478e10aaaafc494adc7e7c595ed3724;hb=a712cd772f4f3db8bed7037bb95c4de94767b230;hp=0000000000000000000000000000000000000000;hpb=2f0296582bf5d3f51db40d299f434fc8240ca6a5;p=fillmore diff --git a/src/marina/marina/track.c b/src/marina/marina/track.c new file mode 100644 index 0000000..5ac6967 --- /dev/null +++ b/src/marina/marina/track.c @@ -0,0 +1,2950 @@ +/* track.c generated by valac, the Vala compiler + * generated from track.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 +#include +#include +#include +#include +#include +#include +#include +#include + + +#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; +typedef struct _ModelTrackPrivate ModelTrackPrivate; + +#define MODEL_TYPE_MEDIA_TYPE (model_media_type_get_type ()) + +#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 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 _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL))) +#define _g_free0(var) (var = (g_free (var), NULL)) +typedef struct _ModelClipPrivate ModelClipPrivate; + +#define MODEL_TYPE_CLIP_FILE (model_clip_file_get_type ()) +#define MODEL_CLIP_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_FILE, ModelClipFile)) +#define MODEL_CLIP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_FILE, ModelClipFileClass)) +#define MODEL_IS_CLIP_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_FILE)) +#define MODEL_IS_CLIP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_FILE)) +#define MODEL_CLIP_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_FILE, ModelClipFileClass)) + +typedef struct _ModelClipFile ModelClipFile; +typedef struct _ModelClipFileClass ModelClipFileClass; + +#define MODEL_TYPE_GAP (model_gap_get_type ()) +#define MODEL_GAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_GAP, ModelGap)) +#define MODEL_GAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_GAP, ModelGapClass)) +#define MODEL_IS_GAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_GAP)) +#define MODEL_IS_GAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_GAP)) +#define MODEL_GAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_GAP, ModelGapClass)) + +typedef struct _ModelGap ModelGap; +typedef struct _ModelGapClass ModelGapClass; +#define _model_gap_unref0(var) ((var == NULL) ? NULL : (var = (model_gap_unref (var), NULL))) +typedef struct _ModelGapPrivate ModelGapPrivate; + +#define MODEL_TYPE_TEMPO_INFORMATION (model_tempo_information_get_type ()) +#define MODEL_TEMPO_INFORMATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TEMPO_INFORMATION, ModelTempoInformation)) +#define MODEL_IS_TEMPO_INFORMATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TEMPO_INFORMATION)) +#define MODEL_TEMPO_INFORMATION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MODEL_TYPE_TEMPO_INFORMATION, ModelTempoInformationIface)) + +typedef struct _ModelTempoInformation ModelTempoInformation; +typedef struct _ModelTempoInformationIface ModelTempoInformationIface; + +#define TYPE_FRACTION (fraction_get_type ()) +typedef struct _Fraction Fraction; +typedef struct _ModelProjectPrivate ModelProjectPrivate; + +#define TYPE_TIME_CODE (time_code_get_type ()) +typedef struct _TimeCode TimeCode; + +#define VIEW_TYPE_MEDIA_ENGINE (view_media_engine_get_type ()) +#define VIEW_MEDIA_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngine)) +#define VIEW_MEDIA_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngineClass)) +#define VIEW_IS_MEDIA_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_MEDIA_ENGINE)) +#define VIEW_IS_MEDIA_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_MEDIA_ENGINE)) +#define VIEW_MEDIA_ENGINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngineClass)) + +typedef struct _ViewMediaEngine ViewMediaEngine; +typedef struct _ViewMediaEngineClass ViewMediaEngineClass; + +#define MODEL_TYPE_PROJECT_LOADER (model_project_loader_get_type ()) +#define MODEL_PROJECT_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoader)) +#define MODEL_PROJECT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoaderClass)) +#define MODEL_IS_PROJECT_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_PROJECT_LOADER)) +#define MODEL_IS_PROJECT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_PROJECT_LOADER)) +#define MODEL_PROJECT_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoaderClass)) + +typedef struct _ModelProjectLoader ModelProjectLoader; +typedef struct _ModelProjectLoaderClass ModelProjectLoaderClass; + +#define MODEL_TYPE_UNDO_MANAGER (model_undo_manager_get_type ()) +#define MODEL_UNDO_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_UNDO_MANAGER, ModelUndoManager)) +#define MODEL_UNDO_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_UNDO_MANAGER, ModelUndoManagerClass)) +#define MODEL_IS_UNDO_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_UNDO_MANAGER)) +#define MODEL_IS_UNDO_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_UNDO_MANAGER)) +#define MODEL_UNDO_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_UNDO_MANAGER, ModelUndoManagerClass)) + +typedef struct _ModelUndoManager ModelUndoManager; +typedef struct _ModelUndoManagerClass ModelUndoManagerClass; + +#define MODEL_TYPE_LIBRARY_IMPORTER (model_library_importer_get_type ()) +#define MODEL_LIBRARY_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporter)) +#define MODEL_LIBRARY_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporterClass)) +#define MODEL_IS_LIBRARY_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_LIBRARY_IMPORTER)) +#define MODEL_IS_LIBRARY_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_LIBRARY_IMPORTER)) +#define MODEL_LIBRARY_IMPORTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporterClass)) + +typedef struct _ModelLibraryImporter ModelLibraryImporter; +typedef struct _ModelLibraryImporterClass ModelLibraryImporterClass; + +#define MODEL_TYPE_COMMAND (model_command_get_type ()) +#define MODEL_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_COMMAND, ModelCommand)) +#define MODEL_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_COMMAND, ModelCommandClass)) +#define MODEL_IS_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_COMMAND)) +#define MODEL_IS_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_COMMAND)) +#define MODEL_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_COMMAND, ModelCommandClass)) + +typedef struct _ModelCommand ModelCommand; +typedef struct _ModelCommandClass ModelCommandClass; + +#define MODEL_TYPE_CLIP_ADD_COMMAND (model_clip_add_command_get_type ()) +#define MODEL_CLIP_ADD_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_ADD_COMMAND, ModelClipAddCommand)) +#define MODEL_CLIP_ADD_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_ADD_COMMAND, ModelClipAddCommandClass)) +#define MODEL_IS_CLIP_ADD_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_ADD_COMMAND)) +#define MODEL_IS_CLIP_ADD_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_ADD_COMMAND)) +#define MODEL_CLIP_ADD_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_ADD_COMMAND, ModelClipAddCommandClass)) + +typedef struct _ModelClipAddCommand ModelClipAddCommand; +typedef struct _ModelClipAddCommandClass ModelClipAddCommandClass; +#define _model_command_unref0(var) ((var == NULL) ? NULL : (var = (model_command_unref (var), NULL))) + +#define LOGGING_TYPE_FACILITY (logging_facility_get_type ()) + +#define LOGGING_TYPE_LEVEL (logging_level_get_type ()) + +#define MODEL_CLIP_COMMAND_TYPE_ACTION (model_clip_command_action_get_type ()) + +#define MODEL_TYPE_CLIP_COMMAND (model_clip_command_get_type ()) +#define MODEL_CLIP_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_COMMAND, ModelClipCommand)) +#define MODEL_CLIP_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_COMMAND, ModelClipCommandClass)) +#define MODEL_IS_CLIP_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_COMMAND)) +#define MODEL_IS_CLIP_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_COMMAND)) +#define MODEL_CLIP_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_COMMAND, ModelClipCommandClass)) + +typedef struct _ModelClipCommand ModelClipCommand; +typedef struct _ModelClipCommandClass ModelClipCommandClass; + +#define MODEL_TYPE_CLIP_REVERT_COMMAND (model_clip_revert_command_get_type ()) +#define MODEL_CLIP_REVERT_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_REVERT_COMMAND, ModelClipRevertCommand)) +#define MODEL_CLIP_REVERT_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_REVERT_COMMAND, ModelClipRevertCommandClass)) +#define MODEL_IS_CLIP_REVERT_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_REVERT_COMMAND)) +#define MODEL_IS_CLIP_REVERT_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_REVERT_COMMAND)) +#define MODEL_CLIP_REVERT_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_REVERT_COMMAND, ModelClipRevertCommandClass)) + +typedef struct _ModelClipRevertCommand ModelClipRevertCommand; +typedef struct _ModelClipRevertCommandClass ModelClipRevertCommandClass; + +#define MODEL_CLIP_SPLIT_COMMAND_TYPE_ACTION (model_clip_split_command_action_get_type ()) + +#define MODEL_TYPE_CLIP_SPLIT_COMMAND (model_clip_split_command_get_type ()) +#define MODEL_CLIP_SPLIT_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_SPLIT_COMMAND, ModelClipSplitCommand)) +#define MODEL_CLIP_SPLIT_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_SPLIT_COMMAND, ModelClipSplitCommandClass)) +#define MODEL_IS_CLIP_SPLIT_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_SPLIT_COMMAND)) +#define MODEL_IS_CLIP_SPLIT_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_SPLIT_COMMAND)) +#define MODEL_CLIP_SPLIT_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_SPLIT_COMMAND, ModelClipSplitCommandClass)) + +typedef struct _ModelClipSplitCommand ModelClipSplitCommand; +typedef struct _ModelClipSplitCommandClass ModelClipSplitCommandClass; + +#define MODEL_TYPE_CLIP_TRIM_COMMAND (model_clip_trim_command_get_type ()) +#define MODEL_CLIP_TRIM_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_TRIM_COMMAND, ModelClipTrimCommand)) +#define MODEL_CLIP_TRIM_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_TRIM_COMMAND, ModelClipTrimCommandClass)) +#define MODEL_IS_CLIP_TRIM_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_TRIM_COMMAND)) +#define MODEL_IS_CLIP_TRIM_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_TRIM_COMMAND)) +#define MODEL_CLIP_TRIM_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_TRIM_COMMAND, ModelClipTrimCommandClass)) + +typedef struct _ModelClipTrimCommand ModelClipTrimCommand; +typedef struct _ModelClipTrimCommandClass ModelClipTrimCommandClass; + +#define MODEL_TYPE_AUDIO_TRACK (model_audio_track_get_type ()) +#define MODEL_AUDIO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_AUDIO_TRACK, ModelAudioTrack)) +#define MODEL_AUDIO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_AUDIO_TRACK, ModelAudioTrackClass)) +#define MODEL_IS_AUDIO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_AUDIO_TRACK)) +#define MODEL_IS_AUDIO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_AUDIO_TRACK)) +#define MODEL_AUDIO_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_AUDIO_TRACK, ModelAudioTrackClass)) + +typedef struct _ModelAudioTrack ModelAudioTrack; +typedef struct _ModelAudioTrackClass ModelAudioTrackClass; +typedef struct _ModelAudioTrackPrivate ModelAudioTrackPrivate; + +#define MODEL_TYPE_PARAMETER (model_parameter_get_type ()) + +#define MODEL_TYPE_PARAMETER_COMMAND (model_parameter_command_get_type ()) +#define MODEL_PARAMETER_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_PARAMETER_COMMAND, ModelParameterCommand)) +#define MODEL_PARAMETER_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_PARAMETER_COMMAND, ModelParameterCommandClass)) +#define MODEL_IS_PARAMETER_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_PARAMETER_COMMAND)) +#define MODEL_IS_PARAMETER_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_PARAMETER_COMMAND)) +#define MODEL_PARAMETER_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_PARAMETER_COMMAND, ModelParameterCommandClass)) + +typedef struct _ModelParameterCommand ModelParameterCommand; +typedef struct _ModelParameterCommandClass ModelParameterCommandClass; + +typedef enum { + MODEL_MEDIA_TYPE_AUDIO, + MODEL_MEDIA_TYPE_VIDEO +} ModelMediaType; + +struct _ModelTrack { + GObject parent_instance; + ModelTrackPrivate * priv; + ModelProject* project; + GeeArrayList* clips; + char* display_name; +}; + +struct _ModelTrackClass { + GObjectClass parent_class; + char* (*name) (ModelTrack* self); + ModelMediaType (*media_type) (ModelTrack* self); + gboolean (*check) (ModelTrack* self, ModelClip* clip); + void (*on_clip_updated) (ModelTrack* self, ModelClip* clip); + void (*write_attributes) (ModelTrack* self, FILE* f); +}; + +struct _ModelTrackPrivate { + gboolean is_selected; +}; + +struct _ModelClip { + GObject parent_instance; + ModelClipPrivate * priv; + ModelClipFile* clipfile; + ModelMediaType type; + gboolean is_recording; + char* name; +}; + +struct _ModelClipClass { + GObjectClass parent_class; +}; + +struct _ModelGap { + GTypeInstance parent_instance; + volatile int ref_count; + ModelGapPrivate * priv; + gint64 start; + gint64 end; +}; + +struct _ModelGapClass { + GTypeClass parent_class; + void (*finalize) (ModelGap *self); +}; + +struct _Fraction { + gint numerator; + gint denominator; +}; + +struct _ModelTempoInformationIface { + GTypeInterface parent_iface; + void (*get_time_signature) (ModelTempoInformation* self, Fraction* result); + gint (*get_bpm) (ModelTempoInformation* self); +}; + +struct _TimeCode { + gint hour; + gint minute; + gint second; + gint frame; + gboolean drop_code; +}; + +struct _ModelProject { + GObject parent_instance; + ModelProjectPrivate * priv; + GeeArrayList* tracks; + GeeArrayList* inactive_tracks; + GeeArrayList* clipfiles; + ViewMediaEngine* media_engine; + char* project_file; + ModelProjectLoader* loader; + ModelUndoManager* undo_manager; + ModelLibraryImporter* importer; + Fraction default_framerate; + gboolean click_during_play; + gboolean click_during_record; + double click_volume; + gboolean library_visible; + gint library_width; + gboolean snap_to_clip; +}; + +struct _ModelProjectClass { + GObjectClass parent_class; + void (*get_clip_time) (ModelProject* self, ModelClipFile* f, TimeCode* result); + char* (*get_project_file) (ModelProject* self); + void (*do_append) (ModelProject* self, ModelTrack* track, ModelClipFile* clipfile, const char* name, gint64 insert_time); + void (*add_track) (ModelProject* self, ModelTrack* track); + void (*insert_track) (ModelProject* self, gint index, ModelTrack* track); + void (*load) (ModelProject* self, const char* fname); + void (*save) (ModelProject* self, const char* filename); + char* (*get_app_name) (ModelProject* self); + void (*load_complete) (ModelProject* self); +}; + +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; + +typedef enum { + MODEL_CLIP_COMMAND_ACTION_APPEND, + MODEL_CLIP_COMMAND_ACTION_DELETE +} ModelClipCommandAction; + +typedef enum { + MODEL_CLIP_SPLIT_COMMAND_ACTION_SPLIT, + MODEL_CLIP_SPLIT_COMMAND_ACTION_JOIN +} ModelClipSplitCommandAction; + +struct _ModelAudioTrack { + ModelTrack parent_instance; + ModelAudioTrackPrivate * priv; +}; + +struct _ModelAudioTrackClass { + ModelTrackClass parent_class; +}; + +struct _ModelAudioTrackPrivate { + double pan; + double volume; + gint default_num_channels; +}; + +typedef enum { + MODEL_PARAMETER_PAN, + MODEL_PARAMETER_VOLUME +} ModelParameter; + + +static gpointer model_track_parent_class = NULL; +static gpointer model_audio_track_parent_class = NULL; + +GType model_track_get_type (void); +GType model_media_type_get_type (void); +GType model_clip_get_type (void); +GType model_project_get_type (void); +#define MODEL_TRACK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_TRACK, ModelTrackPrivate)) +enum { + MODEL_TRACK_DUMMY_PROPERTY +}; +ModelTrack* model_track_construct (GType object_type, ModelProject* project, const char* display_name); +char* model_track_name (ModelTrack* self); +static char* model_track_real_name (ModelTrack* self); +ModelMediaType model_track_media_type (ModelTrack* self); +static ModelMediaType model_track_real_media_type (ModelTrack* self); +void model_track_hide (ModelTrack* self); +GType model_clip_file_get_type (void); +gboolean model_track_contains_clipfile (ModelTrack* self, ModelClipFile* f); +gboolean model_track_check (ModelTrack* self, ModelClip* clip); +static gboolean model_track_real_check (ModelTrack* self, ModelClip* clip); +gint64 model_clip_get_start (ModelClip* self); +gint64 model_clip_get_duration (ModelClip* self); +gint64 model_track_get_time_from_pos (ModelTrack* self, ModelClip* clip, gboolean after); +gint64 model_clip_get_end (ModelClip* self); +static gint model_track_get_clip_from_time (ModelTrack* self, gint64 time); +gint64 model_clip_snap (ModelClip* self, ModelClip* other, gint64 pad); +gint64 model_track_snap_clip (ModelTrack* self, ModelClip* c, gint64 span); +gboolean model_clip_snap_coord (ModelClip* self, gint64* s, gint64 span); +gboolean model_track_snap_coord (ModelTrack* self, gint64* coord, gint64 span); +gboolean model_track_clip_is_near (ModelTrack* self, ModelClip* clip, gint64 range, gint64* adjustment); +static gint model_track_get_insert_index (ModelTrack* self, gint64 time); +ModelGap* model_gap_new (gint64 start, gint64 end); +ModelGap* model_gap_construct (GType object_type, gint64 start, gint64 end); +gpointer model_gap_ref (gpointer instance); +void model_gap_unref (gpointer instance); +GParamSpec* model_param_spec_gap (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags); +void model_value_set_gap (GValue* value, gpointer v_object); +void model_value_take_gap (GValue* value, gpointer v_object); +gpointer model_value_get_gap (const GValue* value); +GType model_gap_get_type (void); +ModelGap* model_track_find_first_gap (ModelTrack* self, gint64 start); +static gint model_track_get_gap_index (ModelTrack* self, gint64 time); +void model_track_find_containing_gap (ModelTrack* self, gint64 time, ModelGap** g); +gboolean model_clip_overlap_pos (ModelClip* self, gint64 start, gint64 length); +ModelClip* model_track_find_overlapping_clip (ModelTrack* self, gint64 start, gint64 length); +ModelClip* model_track_find_nearest_clip_edge (ModelTrack* self, gint64 time, gboolean* after); +gint64 model_clip_get_media_start (ModelClip* self); +ModelClip* model_clip_new (ModelClipFile* clipfile, ModelMediaType t, const char* name, gint64 start, gint64 media_start, gint64 duration, gboolean is_recording); +ModelClip* model_clip_construct (GType object_type, ModelClipFile* clipfile, ModelMediaType t, const char* name, gint64 start, gint64 media_start, gint64 duration, gboolean is_recording); +void model_track_append_at_time (ModelTrack* self, ModelClip* c, gint64 time, gboolean select); +void model_track_trim (ModelTrack* self, ModelClip* clip, gint64 delta, GdkWindowEdge edge); +GType fraction_get_type (void); +Fraction* fraction_dup (const Fraction* self); +void fraction_free (Fraction* self); +GType model_tempo_information_get_type (void); +GType time_code_get_type (void); +TimeCode* time_code_dup (const TimeCode* self); +void time_code_free (TimeCode* self); +GType view_media_engine_get_type (void); +GType model_project_loader_get_type (void); +gpointer model_undo_manager_ref (gpointer instance); +void model_undo_manager_unref (gpointer instance); +GParamSpec* model_param_spec_undo_manager (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags); +void model_value_set_undo_manager (GValue* value, gpointer v_object); +void model_value_take_undo_manager (GValue* value, gpointer v_object); +gpointer model_value_get_undo_manager (const GValue* value); +GType model_undo_manager_get_type (void); +GType model_library_importer_get_type (void); +gboolean model_undo_manager_get_in_undo (ModelUndoManager* self); +void model_track_delete_clip (ModelTrack* self, ModelClip* clip); +static void model_track_do_clip_overwrite (ModelTrack* self, ModelClip* c); +ModelClipAddCommand* model_clip_add_command_new (ModelTrack* track, ModelClip* clip, gint64 original_time, gint64 new_start); +ModelClipAddCommand* model_clip_add_command_construct (GType object_type, ModelTrack* track, ModelClip* clip, gint64 original_time, gint64 new_start); +gpointer model_command_ref (gpointer instance); +void model_command_unref (gpointer instance); +GParamSpec* model_param_spec_command (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags); +void model_value_set_command (GValue* value, gpointer v_object); +void model_value_take_command (GValue* value, gpointer v_object); +gpointer model_value_get_command (const GValue* value); +GType model_command_get_type (void); +GType model_clip_add_command_get_type (void); +void model_project_do_command (ModelProject* self, ModelCommand* the_command); +void model_track_move (ModelTrack* self, ModelClip* c, gint64 pos, gint64 original_time); +void model_clip_set_start (ModelClip* self, gint64 value); +static void model_track_insert_clip_into_array (ModelTrack* self, ModelClip* c, gint pos); +void model_project_reseek (ModelProject* self); +void _model_track_move (ModelTrack* self, ModelClip* c, gint64 pos); +void model_track_add (ModelTrack* self, ModelClip* c, gint64 pos, gboolean select); +GType logging_facility_get_type (void); +GType logging_level_get_type (void); +void logging_emit (GObject* object, LoggingFacility facility, LoggingLevel level, const char* message); +void model_track_on_clip_updated (ModelTrack* self, ModelClip* clip); +static void model_track_real_on_clip_updated (ModelTrack* self, ModelClip* clip); +void model_track_do_clip_paste (ModelTrack* self, ModelClip* clip, gint64 position); +ModelClip* model_track_get_clip (ModelTrack* self, gint i); +gint model_track_get_clip_index (ModelTrack* self, ModelClip* c); +ModelClip* model_track_get_clip_by_position (ModelTrack* self, gint64 pos); +gint64 model_track_get_length (ModelTrack* self); +void _model_track_append_at_time (ModelTrack* self, ModelClip* c, gint64 time, gboolean select); +GType model_clip_command_action_get_type (void); +ModelClipCommand* model_clip_command_new (ModelClipCommandAction action, ModelTrack* track, ModelClip* clip, gint64 time, gboolean select); +ModelClipCommand* model_clip_command_construct (GType object_type, ModelClipCommandAction action, ModelTrack* track, ModelClip* clip, gint64 time, gboolean select); +GType model_clip_command_get_type (void); +void _model_track_delete_clip (ModelTrack* self, ModelClip* clip); +void model_track_delete_gap (ModelTrack* self, ModelGap* g); +void model_track_remove_clip_from_array (ModelTrack* self, ModelClip* pos); +static void _model_track_on_clip_updated_model_clip_updated (ModelClip* _sender, ModelClip* clip, gpointer self); +void view_media_engine_go (ViewMediaEngine* self, gint64 pos); +void model_track_delete_all_clips (ModelTrack* self); +ModelClipRevertCommand* model_clip_revert_command_new (ModelTrack* track, ModelClip* clip); +ModelClipRevertCommand* model_clip_revert_command_construct (GType object_type, ModelTrack* track, ModelClip* clip); +GType model_clip_revert_command_get_type (void); +void model_track_revert_to_original (ModelTrack* self, ModelClip* clip); +void model_clip_set_media_start_duration (ModelClip* self, gint64 media_start, gint64 duration); +gint64 model_clip_file_get_length (ModelClipFile* self); +void _model_track_revert_to_original (ModelTrack* self, ModelClip* c); +gboolean model_track_are_contiguous_clips (ModelTrack* self, gint64 position); +GType model_clip_split_command_action_get_type (void); +ModelClipSplitCommand* model_clip_split_command_new (ModelClipSplitCommandAction action, ModelTrack* track, gint64 time); +ModelClipSplitCommand* model_clip_split_command_construct (GType object_type, ModelClipSplitCommandAction action, ModelTrack* track, gint64 time); +GType model_clip_split_command_get_type (void); +void model_track_split_at (ModelTrack* self, gint64 position); +void model_clip_set_duration (ModelClip* self, gint64 value); +void _model_track_split_at (ModelTrack* self, gint64 position); +void model_track_join (ModelTrack* self, gint64 position); +void _model_track_join (ModelTrack* self, gint64 position); +ModelClipTrimCommand* model_clip_trim_command_new (ModelTrack* track, ModelClip* clip, gint64 delta, GdkWindowEdge edge); +ModelClipTrimCommand* model_clip_trim_command_construct (GType object_type, ModelTrack* track, ModelClip* clip, gint64 delta, GdkWindowEdge edge); +GType model_clip_trim_command_get_type (void); +void model_clip_trim (ModelClip* self, gint64 delta, GdkWindowEdge edge); +void _model_track_trim (ModelTrack* self, ModelClip* clip, gint64 delta, GdkWindowEdge edge); +gint64 model_track_previous_edit (ModelTrack* self, gint64 pos); +gint64 model_track_next_edit (ModelTrack* self, gint64 pos); +char* model_track_get_display_name (ModelTrack* self); +void model_track_write_attributes (ModelTrack* self, FILE* f); +static void model_track_real_write_attributes (ModelTrack* self, FILE* f); +void model_clip_save (ModelClip* self, FILE* f, gint id); +gint model_project_get_clipfile_index (ModelProject* self, ModelClipFile* find); +void model_track_save (ModelTrack* self, FILE* f); +void model_track_set_display_name (ModelTrack* self, const char* new_display_name); +void model_track_set_selected (ModelTrack* self, gboolean is_selected); +gboolean model_track_get_is_selected (ModelTrack* self); +static void model_track_finalize (GObject* obj); +GType model_audio_track_get_type (void); +#define MODEL_AUDIO_TRACK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_AUDIO_TRACK, ModelAudioTrackPrivate)) +enum { + MODEL_AUDIO_TRACK_DUMMY_PROPERTY +}; +#define MODEL_AUDIO_TRACK_INVALID_CHANNEL_COUNT (-1) +void model_audio_track_set_default_num_channels (ModelAudioTrack* self, gint num); +void _model_audio_track_set_pan (ModelAudioTrack* self, double new_value); +void _model_audio_track_set_volume (ModelAudioTrack* self, double new_volume); +ModelAudioTrack* model_audio_track_new (ModelProject* project, const char* display_name); +ModelAudioTrack* model_audio_track_construct (GType object_type, ModelProject* project, const char* display_name); +static char* model_audio_track_real_name (ModelTrack* base); +static ModelMediaType model_audio_track_real_media_type (ModelTrack* base); +double model_audio_track_get_volume (ModelAudioTrack* self); +double model_audio_track_get_pan (ModelAudioTrack* self); +gboolean model_audio_track_get_num_channels (ModelAudioTrack* self, gint* num); +static void model_audio_track_real_write_attributes (ModelTrack* base, FILE* f); +gboolean float_within (double f, double epsilon); +GType model_parameter_get_type (void); +ModelParameterCommand* model_parameter_command_new (ModelAudioTrack* target, ModelParameter parameter, double new_value, double old_value); +ModelParameterCommand* model_parameter_command_construct (GType object_type, ModelAudioTrack* target, ModelParameter parameter, double new_value, double old_value); +GType model_parameter_command_get_type (void); +void model_audio_track_set_pan (ModelAudioTrack* self, double new_value); +void model_audio_track_set_volume (ModelAudioTrack* self, double new_volume); +gboolean model_clip_file_is_online (ModelClipFile* self); +gboolean model_clip_file_get_num_channels (ModelClipFile* self, gint* channels); +static gboolean model_audio_track_real_check (ModelTrack* base, ModelClip* clip); +void model_audio_track_on_level_changed (ModelAudioTrack* self, double level_left, double level_right); +static void model_audio_track_real_on_clip_updated (ModelTrack* base, ModelClip* clip); +static void model_audio_track_finalize (GObject* obj); +static int _vala_strcmp0 (const char * str1, const char * str2); + + +static void g_cclosure_user_marshal_VOID__OBJECT_BOOLEAN (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data); +static void g_cclosure_user_marshal_VOID__STRING_STRING (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data); +static void g_cclosure_user_marshal_VOID__ENUM_DOUBLE (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data); +static void g_cclosure_user_marshal_VOID__DOUBLE_DOUBLE (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data); + +#line 26 "track.vala" +ModelTrack* model_track_construct (GType object_type, ModelProject* project, const char* display_name) { +#line 564 "track.c" + ModelTrack * self; + char* _tmp0_; +#line 26 "track.vala" + g_return_val_if_fail (MODEL_IS_PROJECT (project), NULL); +#line 26 "track.vala" + g_return_val_if_fail (display_name != NULL, NULL); +#line 26 "track.vala" + self = (ModelTrack*) g_object_new (object_type, NULL); +#line 27 "track.vala" + self->project = project; +#line 28 "track.vala" + self->display_name = (_tmp0_ = g_strdup (display_name), _g_free0 (self->display_name), _tmp0_); +#line 577 "track.c" + return self; +} + + +#line 31 "track.vala" +static char* model_track_real_name (ModelTrack* self) { +#line 584 "track.c" + g_return_val_if_fail (MODEL_IS_TRACK (self), NULL); + g_critical ("Type `%s' does not implement abstract method `model_track_name'", g_type_name (G_TYPE_FROM_INSTANCE (self))); + return NULL; +} + + +#line 31 "track.vala" +char* model_track_name (ModelTrack* self) { +#line 31 "track.vala" + return MODEL_TRACK_GET_CLASS (self)->name (self); +#line 595 "track.c" +} + + +#line 32 "track.vala" +static ModelMediaType model_track_real_media_type (ModelTrack* self) { +#line 601 "track.c" + g_return_val_if_fail (MODEL_IS_TRACK (self), 0); + g_critical ("Type `%s' does not implement abstract method `model_track_media_type'", g_type_name (G_TYPE_FROM_INSTANCE (self))); + return 0; +} + + +#line 32 "track.vala" +ModelMediaType model_track_media_type (ModelTrack* self) { +#line 32 "track.vala" + return MODEL_TRACK_GET_CLASS (self)->media_type (self); +#line 612 "track.c" +} + + +#line 34 "track.vala" +void model_track_hide (ModelTrack* self) { +#line 34 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 35 "track.vala" + g_signal_emit_by_name (self, "track-hidden", self); +#line 622 "track.c" +} + + +#line 38 "track.vala" +gboolean model_track_contains_clipfile (ModelTrack* self, ModelClipFile* f) { +#line 628 "track.c" + gboolean result = FALSE; +#line 38 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), FALSE); +#line 38 "track.vala" + g_return_val_if_fail (MODEL_IS_CLIP_FILE (f), FALSE); +#line 634 "track.c" + { + GeeIterator* _c_it; + _c_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->clips)); +#line 39 "track.vala" + while (TRUE) { +#line 640 "track.c" + ModelClip* c; +#line 39 "track.vala" + if (!gee_iterator_next (_c_it)) { +#line 39 "track.vala" + break; +#line 646 "track.c" + } +#line 39 "track.vala" + c = (ModelClip*) gee_iterator_get (_c_it); +#line 40 "track.vala" + if (c->clipfile == f) { +#line 652 "track.c" + result = TRUE; + _g_object_unref0 (c); + _g_object_unref0 (_c_it); +#line 41 "track.vala" + return result; +#line 658 "track.c" + } + _g_object_unref0 (c); + } + _g_object_unref0 (_c_it); + } + result = FALSE; +#line 43 "track.vala" + return result; +#line 667 "track.c" +} + + +#line 46 "track.vala" +static gboolean model_track_real_check (ModelTrack* self, ModelClip* clip) { +#line 673 "track.c" + g_return_val_if_fail (MODEL_IS_TRACK (self), FALSE); + g_critical ("Type `%s' does not implement abstract method `model_track_check'", g_type_name (G_TYPE_FROM_INSTANCE (self))); + return FALSE; +} + + +#line 46 "track.vala" +gboolean model_track_check (ModelTrack* self, ModelClip* clip) { +#line 46 "track.vala" + return MODEL_TRACK_GET_CLASS (self)->check (self, clip); +#line 684 "track.c" +} + + +#line 48 "track.vala" +gint64 model_track_get_time_from_pos (ModelTrack* self, ModelClip* clip, gboolean after) { +#line 690 "track.c" + gint64 result = 0LL; +#line 48 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), 0LL); +#line 48 "track.vala" + g_return_val_if_fail (MODEL_IS_CLIP (clip), 0LL); +#line 49 "track.vala" + if (after) { +#line 698 "track.c" + result = model_clip_get_start (clip) + model_clip_get_duration (clip); +#line 50 "track.vala" + return result; +#line 702 "track.c" + } else { + result = model_clip_get_start (clip); +#line 52 "track.vala" + return result; +#line 707 "track.c" + } +} + + +#line 55 "track.vala" +static gint model_track_get_clip_from_time (ModelTrack* self, gint64 time) { +#line 714 "track.c" + gint result = 0; +#line 55 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), 0); +#line 718 "track.c" + { + gint i; +#line 56 "track.vala" + i = 0; +#line 723 "track.c" + { + gboolean _tmp0_; +#line 56 "track.vala" + _tmp0_ = TRUE; +#line 56 "track.vala" + while (TRUE) { +#line 730 "track.c" + gboolean _tmp1_ = FALSE; + ModelClip* _tmp2_; + gboolean _tmp3_; +#line 56 "track.vala" + if (!_tmp0_) { +#line 56 "track.vala" + i++; +#line 738 "track.c" + } +#line 56 "track.vala" + _tmp0_ = FALSE; +#line 56 "track.vala" + if (!(i < gee_collection_get_size (GEE_COLLECTION (self->clips)))) { +#line 56 "track.vala" + break; +#line 746 "track.c" + } +#line 57 "track.vala" + if ((_tmp3_ = time >= model_clip_get_start (_tmp2_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i)), _g_object_unref0 (_tmp2_), _tmp3_)) { +#line 750 "track.c" + ModelClip* _tmp4_; +#line 58 "track.vala" + _tmp1_ = time < model_clip_get_end (_tmp4_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i)); +#line 754 "track.c" + _g_object_unref0 (_tmp4_); + } else { +#line 57 "track.vala" + _tmp1_ = FALSE; +#line 759 "track.c" + } +#line 57 "track.vala" + if (_tmp1_) { +#line 763 "track.c" + result = i; +#line 59 "track.vala" + return result; +#line 767 "track.c" + } + } + } + } + result = -1; +#line 61 "track.vala" + return result; +#line 775 "track.c" +} + + +#line 64 "track.vala" +gint64 model_track_snap_clip (ModelTrack* self, ModelClip* c, gint64 span) { +#line 781 "track.c" + gint64 result = 0LL; +#line 64 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), 0LL); +#line 64 "track.vala" + g_return_val_if_fail (MODEL_IS_CLIP (c), 0LL); +#line 787 "track.c" + { + GeeIterator* _cl_it; + _cl_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->clips)); +#line 65 "track.vala" + while (TRUE) { +#line 793 "track.c" + ModelClip* cl; + gint64 new_start; +#line 65 "track.vala" + if (!gee_iterator_next (_cl_it)) { +#line 65 "track.vala" + break; +#line 800 "track.c" + } +#line 65 "track.vala" + cl = (ModelClip*) gee_iterator_get (_cl_it); +#line 66 "track.vala" + new_start = model_clip_snap (c, cl, span); +#line 67 "track.vala" + if (new_start != model_clip_get_start (c)) { +#line 808 "track.c" + result = new_start; + _g_object_unref0 (cl); + _g_object_unref0 (_cl_it); +#line 68 "track.vala" + return result; +#line 814 "track.c" + } + _g_object_unref0 (cl); + } + _g_object_unref0 (_cl_it); + } + result = model_clip_get_start (c); +#line 71 "track.vala" + return result; +#line 823 "track.c" +} + + +#line 74 "track.vala" +gboolean model_track_snap_coord (ModelTrack* self, gint64* coord, gint64 span) { +#line 829 "track.c" + gboolean result = FALSE; +#line 74 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), FALSE); +#line 833 "track.c" + { + GeeIterator* _c_it; + _c_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->clips)); +#line 75 "track.vala" + while (TRUE) { +#line 839 "track.c" + ModelClip* c; +#line 75 "track.vala" + if (!gee_iterator_next (_c_it)) { +#line 75 "track.vala" + break; +#line 845 "track.c" + } +#line 75 "track.vala" + c = (ModelClip*) gee_iterator_get (_c_it); +#line 76 "track.vala" + if (model_clip_snap_coord (c, coord, span)) { +#line 851 "track.c" + result = TRUE; + _g_object_unref0 (c); + _g_object_unref0 (_c_it); +#line 77 "track.vala" + return result; +#line 857 "track.c" + } + _g_object_unref0 (c); + } + _g_object_unref0 (_c_it); + } + result = FALSE; +#line 79 "track.vala" + return result; +#line 866 "track.c" +} + + +#line 82 "track.vala" +gboolean model_track_clip_is_near (ModelTrack* self, ModelClip* clip, gint64 range, gint64* adjustment) { +#line 872 "track.c" + gboolean result = FALSE; +#line 82 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), FALSE); +#line 82 "track.vala" + g_return_val_if_fail (MODEL_IS_CLIP (clip), FALSE); +#line 878 "track.c" + { + GeeIterator* _potential_clip_it; + _potential_clip_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->clips)); +#line 83 "track.vala" + while (TRUE) { +#line 884 "track.c" + ModelClip* potential_clip; +#line 83 "track.vala" + if (!gee_iterator_next (_potential_clip_it)) { +#line 83 "track.vala" + break; +#line 890 "track.c" + } +#line 83 "track.vala" + potential_clip = (ModelClip*) gee_iterator_get (_potential_clip_it); +#line 84 "track.vala" + if (potential_clip != clip) { +#line 896 "track.c" + gint64 difference; +#line 85 "track.vala" + difference = model_clip_get_start (clip) - model_clip_get_end (potential_clip); +#line 86 "track.vala" + if (llabs (difference) < range) { +#line 87 "track.vala" + *adjustment = -difference; +#line 904 "track.c" + result = TRUE; + _g_object_unref0 (potential_clip); + _g_object_unref0 (_potential_clip_it); +#line 88 "track.vala" + return result; +#line 910 "track.c" + } +#line 91 "track.vala" + difference = model_clip_get_start (potential_clip) - model_clip_get_end (clip); +#line 92 "track.vala" + if (llabs (difference) < range) { +#line 93 "track.vala" + *adjustment = difference; +#line 918 "track.c" + result = TRUE; + _g_object_unref0 (potential_clip); + _g_object_unref0 (_potential_clip_it); +#line 94 "track.vala" + return result; +#line 924 "track.c" + } + } + _g_object_unref0 (potential_clip); + } + _g_object_unref0 (_potential_clip_it); + } + result = FALSE; +#line 98 "track.vala" + return result; +#line 934 "track.c" +} + + +#line 101 "track.vala" +static gint model_track_get_insert_index (ModelTrack* self, gint64 time) { +#line 940 "track.c" + gint result = 0; + gint end_ret; +#line 101 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), 0); +#line 102 "track.vala" + end_ret = 0; +#line 947 "track.c" + { + gint i; +#line 103 "track.vala" + i = 0; +#line 952 "track.c" + { + gboolean _tmp0_; +#line 103 "track.vala" + _tmp0_ = TRUE; +#line 103 "track.vala" + while (TRUE) { +#line 959 "track.c" + ModelClip* c; +#line 103 "track.vala" + if (!_tmp0_) { +#line 103 "track.vala" + i++; +#line 965 "track.c" + } +#line 103 "track.vala" + _tmp0_ = FALSE; +#line 103 "track.vala" + if (!(i < gee_collection_get_size (GEE_COLLECTION (self->clips)))) { +#line 103 "track.vala" + break; +#line 973 "track.c" + } + c = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i); +#line 106 "track.vala" + if (time >= model_clip_get_start (c)) { +#line 107 "track.vala" + if (time < (model_clip_get_start (c) + (model_clip_get_duration (c) / 2))) { +#line 980 "track.c" + result = i; + _g_object_unref0 (c); +#line 108 "track.vala" + return result; +#line 985 "track.c" + } else { +#line 109 "track.vala" + if (time < (model_clip_get_start (c) + model_clip_get_duration (c))) { +#line 989 "track.c" + result = i + 1; + _g_object_unref0 (c); +#line 110 "track.vala" + return result; +#line 994 "track.c" + } else { +#line 112 "track.vala" + end_ret++; +#line 998 "track.c" + } + } + } + _g_object_unref0 (c); + } + } + } + result = end_ret; +#line 115 "track.vala" + return result; +#line 1009 "track.c" +} + + +#line 119 "track.vala" +ModelGap* model_track_find_first_gap (ModelTrack* self, gint64 start) { +#line 1015 "track.c" + ModelGap* result = NULL; + gint64 new_start; + gint64 new_end; +#line 119 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), NULL); +#line 120 "track.vala" + new_start = (gint64) 0; +#line 121 "track.vala" + new_end = G_MAXINT64; +#line 1025 "track.c" + { + GeeIterator* _c_it; + _c_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->clips)); +#line 123 "track.vala" + while (TRUE) { +#line 1031 "track.c" + ModelClip* c; + gboolean _tmp0_ = FALSE; +#line 123 "track.vala" + if (!gee_iterator_next (_c_it)) { +#line 123 "track.vala" + break; +#line 1038 "track.c" + } +#line 123 "track.vala" + c = (ModelClip*) gee_iterator_get (_c_it); +#line 124 "track.vala" + if (model_clip_get_start (c) > new_start) { +#line 125 "track.vala" + _tmp0_ = model_clip_get_start (c) > start; +#line 1046 "track.c" + } else { +#line 124 "track.vala" + _tmp0_ = FALSE; +#line 1050 "track.c" + } +#line 124 "track.vala" + if (_tmp0_) { +#line 126 "track.vala" + new_end = model_clip_get_start (c); +#line 1056 "track.c" + _g_object_unref0 (c); +#line 127 "track.vala" + break; +#line 1060 "track.c" + } +#line 129 "track.vala" + new_start = model_clip_get_end (c); +#line 1064 "track.c" + _g_object_unref0 (c); + } + _g_object_unref0 (_c_it); + } + result = model_gap_new (new_start, new_end); +#line 131 "track.vala" + return result; +#line 1072 "track.c" +} + + +#line 135 "track.vala" +static gint model_track_get_gap_index (ModelTrack* self, gint64 time) { +#line 1078 "track.c" + gint result = 0; + gint i; +#line 135 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), 0); +#line 136 "track.vala" + i = 0; +#line 137 "track.vala" + while (TRUE) { +#line 1087 "track.c" + ModelClip* _tmp0_; + gboolean _tmp1_; +#line 137 "track.vala" + if (!(i < gee_collection_get_size (GEE_COLLECTION (self->clips)))) { +#line 137 "track.vala" + break; +#line 1094 "track.c" + } +#line 138 "track.vala" + if ((_tmp1_ = time <= model_clip_get_start (_tmp0_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i)), _g_object_unref0 (_tmp0_), _tmp1_)) { +#line 139 "track.vala" + break; +#line 1100 "track.c" + } +#line 140 "track.vala" + i++; +#line 1104 "track.c" + } + result = i; +#line 142 "track.vala" + return result; +#line 1109 "track.c" +} + + +#line 147 "track.vala" +void model_track_find_containing_gap (ModelTrack* self, gint64 time, ModelGap** g) { +#line 1115 "track.c" + ModelGap* _tmp0_; + gint index; +#line 147 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 1120 "track.c" + if (g != NULL) { + *g = NULL; + } +#line 148 "track.vala" + *g = (_tmp0_ = model_gap_new ((gint64) 0, (gint64) 0), _model_gap_unref0 (*g), _tmp0_); +#line 150 "track.vala" + index = model_track_get_gap_index (self, time); +#line 151 "track.vala" + if (index < gee_collection_get_size (GEE_COLLECTION (self->clips))) { +#line 1130 "track.c" + gint64 _tmp1_ = 0LL; + ModelClip* _tmp3_; +#line 152 "track.vala" + if (index > 0) { +#line 1135 "track.c" + ModelClip* _tmp2_; +#line 152 "track.vala" + _tmp1_ = model_clip_get_end (_tmp2_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), index - 1)); +#line 1139 "track.c" + _g_object_unref0 (_tmp2_); + } else { +#line 152 "track.vala" + _tmp1_ = (gint64) 0; +#line 1144 "track.c" + } +#line 152 "track.vala" + (*g)->start = _tmp1_; +#line 153 "track.vala" + (*g)->end = model_clip_get_start (_tmp3_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), index)); +#line 1150 "track.c" + _g_object_unref0 (_tmp3_); + } +} + + +#line 157 "track.vala" +ModelClip* model_track_find_overlapping_clip (ModelTrack* self, gint64 start, gint64 length) { +#line 1158 "track.c" + ModelClip* result = NULL; +#line 157 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), NULL); +#line 1162 "track.c" + { + gint i; +#line 158 "track.vala" + i = 0; +#line 1167 "track.c" + { + gboolean _tmp0_; +#line 158 "track.vala" + _tmp0_ = TRUE; +#line 158 "track.vala" + while (TRUE) { +#line 1174 "track.c" + ModelClip* c; +#line 158 "track.vala" + if (!_tmp0_) { +#line 158 "track.vala" + i++; +#line 1180 "track.c" + } +#line 158 "track.vala" + _tmp0_ = FALSE; +#line 158 "track.vala" + if (!(i < gee_collection_get_size (GEE_COLLECTION (self->clips)))) { +#line 158 "track.vala" + break; +#line 1188 "track.c" + } + c = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i); +#line 160 "track.vala" + if (model_clip_overlap_pos (c, start, length)) { +#line 1193 "track.c" + result = c; +#line 161 "track.vala" + return result; +#line 1197 "track.c" + } + _g_object_unref0 (c); + } + } + } + result = NULL; +#line 163 "track.vala" + return result; +#line 1206 "track.c" +} + + +#line 166 "track.vala" +ModelClip* model_track_find_nearest_clip_edge (ModelTrack* self, gint64 time, gboolean* after) { +#line 1212 "track.c" + ModelClip* result = NULL; + gint limit; + ModelClip* _tmp0_; + gint64 _tmp1_; + gint64 prev_time; +#line 166 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), NULL); +#line 167 "track.vala" + limit = gee_collection_get_size (GEE_COLLECTION (self->clips)) * 2; +#line 168 "track.vala" + prev_time = (_tmp1_ = model_clip_get_start (_tmp0_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), 0)), _g_object_unref0 (_tmp0_), _tmp1_); +#line 1224 "track.c" + { + gint i; +#line 170 "track.vala" + i = 1; +#line 1229 "track.c" + { + gboolean _tmp2_; +#line 170 "track.vala" + _tmp2_ = TRUE; +#line 170 "track.vala" + while (TRUE) { +#line 1236 "track.c" + ModelClip* c; + gint64 t = 0LL; +#line 170 "track.vala" + if (!_tmp2_) { +#line 170 "track.vala" + i++; +#line 1243 "track.c" + } +#line 170 "track.vala" + _tmp2_ = FALSE; +#line 170 "track.vala" + if (!(i < limit)) { +#line 170 "track.vala" + break; +#line 1251 "track.c" + } + c = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i / 2); +#line 174 "track.vala" + if ((i % 2) == 0) { +#line 175 "track.vala" + t = model_clip_get_start (c); +#line 1258 "track.c" + } else { +#line 177 "track.vala" + t = model_clip_get_end (c); +#line 1262 "track.c" + } +#line 179 "track.vala" + if (t > time) { +#line 180 "track.vala" + if ((t - time) < (time - prev_time)) { +#line 181 "track.vala" + *after = (i % 2) != 0; +#line 1270 "track.c" + result = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i / 2); + _g_object_unref0 (c); +#line 182 "track.vala" + return result; +#line 1275 "track.c" + } else { +#line 184 "track.vala" + *after = (i % 2) == 0; +#line 1279 "track.c" + result = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), (i - 1) / 2); + _g_object_unref0 (c); +#line 185 "track.vala" + return result; +#line 1284 "track.c" + } + } +#line 188 "track.vala" + prev_time = t; +#line 1289 "track.c" + _g_object_unref0 (c); + } + } + } +#line 191 "track.vala" + *after = TRUE; +#line 1296 "track.c" + result = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), gee_collection_get_size (GEE_COLLECTION (self->clips)) - 1); +#line 192 "track.vala" + return result; +#line 1300 "track.c" +} + + +#line 195 "track.vala" +static void model_track_do_clip_overwrite (ModelTrack* self, ModelClip* c) { +#line 1306 "track.c" + gint start_index; + gint end_index; + gboolean _tmp11_ = FALSE; + gint i; +#line 195 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 195 "track.vala" + g_return_if_fail (MODEL_IS_CLIP (c)); +#line 196 "track.vala" + start_index = model_track_get_clip_from_time (self, model_clip_get_start (c)); +#line 197 "track.vala" + end_index = model_track_get_clip_from_time (self, model_clip_get_end (c)); +#line 199 "track.vala" + if (end_index >= 0) { +#line 1321 "track.c" + ModelClip* _tmp0_; + gint64 _tmp1_; + gint64 diff; +#line 200 "track.vala" + diff = (_tmp1_ = model_clip_get_end (c) - model_clip_get_start (_tmp0_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), end_index)), _g_object_unref0 (_tmp0_), _tmp1_); +#line 201 "track.vala" + if (end_index == start_index) { +#line 1329 "track.c" + ModelClip* _tmp2_; + gboolean _tmp3_; +#line 202 "track.vala" + if ((_tmp3_ = c == (_tmp2_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), end_index)), _g_object_unref0 (_tmp2_), _tmp3_)) { +#line 203 "track.vala" + return; +#line 1336 "track.c" + } +#line 206 "track.vala" + if (diff > 0) { +#line 1340 "track.c" + ModelClip* _tmp8_; + ModelClip* _tmp7_; + ModelClip* _tmp6_; + ModelClip* _tmp5_; + ModelClip* _tmp4_; + ModelClip* _tmp9_; + ModelClip* cl; +#line 207 "track.vala" + cl = (_tmp9_ = model_clip_new ((_tmp4_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), end_index))->clipfile, (_tmp5_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), end_index))->type, (_tmp6_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), end_index))->name, model_clip_get_end (c), model_clip_get_media_start (_tmp7_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), end_index)) + diff, model_clip_get_duration (_tmp8_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), end_index)) - diff, FALSE), _g_object_unref0 (_tmp8_), _g_object_unref0 (_tmp7_), _g_object_unref0 (_tmp6_), _g_object_unref0 (_tmp5_), _g_object_unref0 (_tmp4_), _tmp9_); +#line 211 "track.vala" + model_track_append_at_time (self, cl, model_clip_get_start (cl), FALSE); +#line 1352 "track.c" + _g_object_unref0 (cl); + } + } else { + ModelClip* _tmp10_; +#line 214 "track.vala" + model_track_trim (self, _tmp10_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), end_index), diff, GDK_WINDOW_EDGE_WEST); +#line 1359 "track.c" + _g_object_unref0 (_tmp10_); + } + } +#line 217 "track.vala" + if (start_index >= 0) { +#line 1365 "track.c" + ModelClip* _tmp12_; +#line 217 "track.vala" + _tmp11_ = (_tmp12_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), start_index)) != c; +#line 1369 "track.c" + _g_object_unref0 (_tmp12_); + } else { +#line 217 "track.vala" + _tmp11_ = FALSE; +#line 1374 "track.c" + } +#line 217 "track.vala" + if (_tmp11_) { +#line 1378 "track.c" + ModelClip* _tmp13_; + gint64 _tmp14_; + gint64 delta; + ModelClip* _tmp15_; +#line 218 "track.vala" + delta = (_tmp14_ = model_clip_get_end (_tmp13_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), start_index)) - model_clip_get_start (c), _g_object_unref0 (_tmp13_), _tmp14_); +#line 219 "track.vala" + model_track_trim (self, _tmp15_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), start_index), -delta, GDK_WINDOW_EDGE_EAST); +#line 1387 "track.c" + _g_object_unref0 (_tmp15_); + } +#line 222 "track.vala" + i = 0; +#line 226 "track.vala" + if (!model_undo_manager_get_in_undo (self->project->undo_manager)) { +#line 227 "track.vala" + while (TRUE) { +#line 1396 "track.c" + gboolean _tmp16_ = FALSE; + gboolean _tmp17_ = FALSE; + ModelClip* _tmp18_; + gboolean _tmp19_; +#line 227 "track.vala" + if (!(i < gee_collection_get_size (GEE_COLLECTION (self->clips)))) { +#line 227 "track.vala" + break; +#line 1405 "track.c" + } +#line 228 "track.vala" + if ((_tmp19_ = (_tmp18_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i)) != c, _g_object_unref0 (_tmp18_), _tmp19_)) { +#line 1409 "track.c" + ModelClip* _tmp20_; +#line 229 "track.vala" + _tmp17_ = model_clip_get_start (_tmp20_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i)) >= model_clip_get_start (c); +#line 1413 "track.c" + _g_object_unref0 (_tmp20_); + } else { +#line 228 "track.vala" + _tmp17_ = FALSE; +#line 1418 "track.c" + } +#line 228 "track.vala" + if (_tmp17_) { +#line 1422 "track.c" + ModelClip* _tmp21_; +#line 230 "track.vala" + _tmp16_ = model_clip_get_end (_tmp21_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i)) <= model_clip_get_end (c); +#line 1426 "track.c" + _g_object_unref0 (_tmp21_); + } else { +#line 228 "track.vala" + _tmp16_ = FALSE; +#line 1431 "track.c" + } +#line 228 "track.vala" + if (_tmp16_) { +#line 1435 "track.c" + ModelClip* _tmp22_; +#line 231 "track.vala" + model_track_delete_clip (self, _tmp22_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i)); +#line 1439 "track.c" + _g_object_unref0 (_tmp22_); + } else { +#line 234 "track.vala" + i++; +#line 1444 "track.c" + } + } + } +} + + +#line 239 "track.vala" +void model_track_move (ModelTrack* self, ModelClip* c, gint64 pos, gint64 original_time) { +#line 1453 "track.c" + ModelCommand* command; +#line 239 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 239 "track.vala" + g_return_if_fail (MODEL_IS_CLIP (c)); +#line 240 "track.vala" + command = MODEL_COMMAND (model_clip_add_command_new (self, c, original_time, pos)); +#line 241 "track.vala" + model_project_do_command (self->project, command); +#line 1463 "track.c" + _model_command_unref0 (command); +} + + +#line 244 "track.vala" +void _model_track_move (ModelTrack* self, ModelClip* c, gint64 pos) { +#line 244 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 244 "track.vala" + g_return_if_fail (MODEL_IS_CLIP (c)); +#line 245 "track.vala" + if (pos < 0) { +#line 246 "track.vala" + pos = (gint64) 0; +#line 1478 "track.c" + } +#line 248 "track.vala" + model_clip_set_start (c, pos); +#line 249 "track.vala" + model_track_do_clip_overwrite (self, c); +#line 251 "track.vala" + model_track_insert_clip_into_array (self, c, model_track_get_insert_index (self, model_clip_get_start (c))); +#line 252 "track.vala" + model_project_reseek (self->project); +#line 1488 "track.c" +} + + +#line 255 "track.vala" +void model_track_add (ModelTrack* self, ModelClip* c, gint64 pos, gboolean select) { +#line 255 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 255 "track.vala" + g_return_if_fail (MODEL_IS_CLIP (c)); +#line 256 "track.vala" + if (!model_track_check (self, c)) { +#line 257 "track.vala" + return; +#line 1502 "track.c" + } +#line 259 "track.vala" + _model_track_move (self, c, pos); +#line 260 "track.vala" + g_signal_emit_by_name (self, "clip-added", c, select); +#line 1508 "track.c" +} + + +#line 263 "track.vala" +static void model_track_real_on_clip_updated (ModelTrack* self, ModelClip* clip) { +#line 263 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 263 "track.vala" + g_return_if_fail (MODEL_IS_CLIP (clip)); +#line 264 "track.vala" + logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_updated"); +#line 1520 "track.c" +} + + +#line 263 "track.vala" +void model_track_on_clip_updated (ModelTrack* self, ModelClip* clip) { +#line 263 "track.vala" + MODEL_TRACK_GET_CLASS (self)->on_clip_updated (self, clip); +#line 1528 "track.c" +} + + +#line 267 "track.vala" +void model_track_do_clip_paste (ModelTrack* self, ModelClip* clip, gint64 position) { +#line 267 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 267 "track.vala" + g_return_if_fail (MODEL_IS_CLIP (clip)); +#line 268 "track.vala" + model_track_append_at_time (self, clip, position, TRUE); +#line 1540 "track.c" +} + + +#line 271 "track.vala" +ModelClip* model_track_get_clip (ModelTrack* self, gint i) { +#line 1546 "track.c" + ModelClip* result = NULL; + gboolean _tmp0_ = FALSE; +#line 271 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), NULL); +#line 272 "track.vala" + if (i < 0) { +#line 272 "track.vala" + _tmp0_ = TRUE; +#line 1555 "track.c" + } else { +#line 272 "track.vala" + _tmp0_ = i >= gee_collection_get_size (GEE_COLLECTION (self->clips)); +#line 1559 "track.c" + } +#line 272 "track.vala" + if (_tmp0_) { +#line 273 "track.vala" + g_error ("track.vala:273: get_clip: Invalid index! %d (%d)", i, gee_collection_get_size (GEE_COLLECTION (self->clips))); +#line 1565 "track.c" + } + result = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i); +#line 274 "track.vala" + return result; +#line 1570 "track.c" +} + + +#line 277 "track.vala" +gint model_track_get_clip_index (ModelTrack* self, ModelClip* c) { +#line 1576 "track.c" + gint result = 0; +#line 277 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), 0); +#line 277 "track.vala" + g_return_val_if_fail (MODEL_IS_CLIP (c), 0); +#line 1582 "track.c" + { + gint i; +#line 278 "track.vala" + i = 0; +#line 1587 "track.c" + { + gboolean _tmp0_; +#line 278 "track.vala" + _tmp0_ = TRUE; +#line 278 "track.vala" + while (TRUE) { +#line 1594 "track.c" + ModelClip* _tmp1_; + gboolean _tmp2_; +#line 278 "track.vala" + if (!_tmp0_) { +#line 278 "track.vala" + i++; +#line 1601 "track.c" + } +#line 278 "track.vala" + _tmp0_ = FALSE; +#line 278 "track.vala" + if (!(i < gee_collection_get_size (GEE_COLLECTION (self->clips)))) { +#line 278 "track.vala" + break; +#line 1609 "track.c" + } +#line 279 "track.vala" + if ((_tmp2_ = (_tmp1_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i)) == c, _g_object_unref0 (_tmp1_), _tmp2_)) { +#line 1613 "track.c" + result = i; +#line 280 "track.vala" + return result; +#line 1617 "track.c" + } + } + } + } + result = -1; +#line 283 "track.vala" + return result; +#line 1625 "track.c" +} + + +#line 286 "track.vala" +ModelClip* model_track_get_clip_by_position (ModelTrack* self, gint64 pos) { +#line 1631 "track.c" + ModelClip* result = NULL; + gint length; +#line 286 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), NULL); +#line 287 "track.vala" + length = gee_collection_get_size (GEE_COLLECTION (self->clips)); +#line 1638 "track.c" + { + gint i; +#line 289 "track.vala" + i = length - 1; +#line 1643 "track.c" + { + gboolean _tmp0_; +#line 289 "track.vala" + _tmp0_ = TRUE; +#line 289 "track.vala" + while (TRUE) { +#line 1650 "track.c" + ModelClip* _tmp1_; + gboolean _tmp2_; +#line 289 "track.vala" + if (!_tmp0_) { +#line 289 "track.vala" + i--; +#line 1657 "track.c" + } +#line 289 "track.vala" + _tmp0_ = FALSE; +#line 289 "track.vala" + if (!(i >= 0)) { +#line 289 "track.vala" + break; +#line 1665 "track.c" + } +#line 290 "track.vala" + if ((_tmp2_ = model_clip_get_start (_tmp1_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i)) < pos, _g_object_unref0 (_tmp1_), _tmp2_)) { +#line 1669 "track.c" + ModelClip* _tmp3_; + ModelClip* _tmp4_; + gboolean _tmp5_; + _tmp3_ = NULL; +#line 291 "track.vala" + if ((_tmp5_ = pos >= model_clip_get_end (_tmp4_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i)), _g_object_unref0 (_tmp4_), _tmp5_)) { +#line 1676 "track.c" + ModelClip* _tmp6_; +#line 291 "track.vala" + _tmp3_ = (_tmp6_ = NULL, _g_object_unref0 (_tmp3_), _tmp6_); +#line 1680 "track.c" + } else { + ModelClip* _tmp7_; + _tmp3_ = (_tmp7_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i), _g_object_unref0 (_tmp3_), _tmp7_); + } + result = _tmp3_; +#line 291 "track.vala" + return result; +#line 1688 "track.c" + } + } + } + } + result = NULL; +#line 292 "track.vala" + return result; +#line 1696 "track.c" +} + + +#line 295 "track.vala" +gint64 model_track_get_length (ModelTrack* self) { +#line 1702 "track.c" + gint64 result = 0LL; + gint64 _tmp0_ = 0LL; +#line 295 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), 0LL); +#line 296 "track.vala" + if (gee_collection_get_size (GEE_COLLECTION (self->clips)) == 0) { +#line 296 "track.vala" + _tmp0_ = (gint64) 0; +#line 1711 "track.c" + } else { + ModelClip* _tmp2_; + ModelClip* _tmp1_; +#line 296 "track.vala" + _tmp0_ = model_clip_get_start (_tmp1_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), gee_collection_get_size (GEE_COLLECTION (self->clips)) - 1)) + model_clip_get_duration (_tmp2_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), gee_collection_get_size (GEE_COLLECTION (self->clips)) - 1)); +#line 1717 "track.c" + _g_object_unref0 (_tmp2_); + _g_object_unref0 (_tmp1_); + } + result = _tmp0_; +#line 296 "track.vala" + return result; +#line 1724 "track.c" +} + + +#line 299 "track.vala" +void _model_track_append_at_time (ModelTrack* self, ModelClip* c, gint64 time, gboolean select) { +#line 299 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 299 "track.vala" + g_return_if_fail (MODEL_IS_CLIP (c)); +#line 300 "track.vala" + model_track_add (self, c, time, select); +#line 1736 "track.c" +} + + +#line 303 "track.vala" +void model_track_append_at_time (ModelTrack* self, ModelClip* c, gint64 time, gboolean select) { +#line 1742 "track.c" + ModelCommand* command; +#line 303 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 303 "track.vala" + g_return_if_fail (MODEL_IS_CLIP (c)); +#line 304 "track.vala" + command = MODEL_COMMAND (model_clip_command_new (MODEL_CLIP_COMMAND_ACTION_APPEND, self, c, time, select)); +#line 305 "track.vala" + model_project_do_command (self->project, command); +#line 1752 "track.c" + _model_command_unref0 (command); +} + + +#line 308 "track.vala" +void model_track_delete_clip (ModelTrack* self, ModelClip* clip) { +#line 1759 "track.c" + ModelCommand* clip_command; +#line 308 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 308 "track.vala" + g_return_if_fail (MODEL_IS_CLIP (clip)); +#line 309 "track.vala" + clip_command = MODEL_COMMAND (model_clip_command_new (MODEL_CLIP_COMMAND_ACTION_DELETE, self, clip, model_clip_get_start (clip), FALSE)); +#line 311 "track.vala" + model_project_do_command (self->project, clip_command); +#line 1769 "track.c" + _model_command_unref0 (clip_command); +} + + +#line 314 "track.vala" +void _model_track_delete_clip (ModelTrack* self, ModelClip* clip) { +#line 1776 "track.c" + gint index; + ModelClip* _tmp0_; +#line 314 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 314 "track.vala" + g_return_if_fail (MODEL_IS_CLIP (clip)); +#line 315 "track.vala" + index = model_track_get_clip_index (self, clip); +#line 316 "track.vala" + g_assert (index != (-1)); +#line 317 "track.vala" + _tmp0_ = (ModelClip*) gee_abstract_list_remove_at (GEE_ABSTRACT_LIST (self->clips), index); +#line 1789 "track.c" + _g_object_unref0 (_tmp0_); +#line 319 "track.vala" + g_signal_emit_by_name (clip, "removed", clip); +#line 320 "track.vala" + g_signal_emit_by_name (self, "clip-removed", clip); +#line 1795 "track.c" +} + + +#line 323 "track.vala" +void model_track_delete_gap (ModelTrack* self, ModelGap* g) { +#line 323 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 323 "track.vala" + g_return_if_fail (MODEL_IS_GAP (g)); +#line 324 "track.vala" + model_project_reseek (self->project); +#line 1807 "track.c" +} + + +#line 327 "track.vala" +void model_track_remove_clip_from_array (ModelTrack* self, ModelClip* pos) { +#line 327 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 327 "track.vala" + g_return_if_fail (MODEL_IS_CLIP (pos)); +#line 328 "track.vala" + gee_abstract_collection_remove (GEE_ABSTRACT_COLLECTION (self->clips), pos); +#line 1819 "track.c" +} + + +#line 263 "track.vala" +static void _model_track_on_clip_updated_model_clip_updated (ModelClip* _sender, ModelClip* clip, gpointer self) { +#line 1825 "track.c" + model_track_on_clip_updated (self, clip); +} + + +#line 331 "track.vala" +static void model_track_insert_clip_into_array (ModelTrack* self, ModelClip* c, gint pos) { +#line 331 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 331 "track.vala" + g_return_if_fail (MODEL_IS_CLIP (c)); +#line 332 "track.vala" + g_signal_connect_object (c, "updated", (GCallback) _model_track_on_clip_updated_model_clip_updated, self, 0); +#line 333 "track.vala" + gee_abstract_list_insert (GEE_ABSTRACT_LIST (self->clips), pos, c); +#line 1840 "track.c" +} + + +#line 336 "track.vala" +void model_track_delete_all_clips (ModelTrack* self) { +#line 1846 "track.c" + guint size; +#line 336 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 337 "track.vala" + size = (guint) gee_collection_get_size (GEE_COLLECTION (self->clips)); +#line 1852 "track.c" + { + gint i; +#line 338 "track.vala" + i = 0; +#line 1857 "track.c" + { + gboolean _tmp0_; +#line 338 "track.vala" + _tmp0_ = TRUE; +#line 338 "track.vala" + while (TRUE) { +#line 1864 "track.c" + ModelClip* _tmp1_; +#line 338 "track.vala" + if (!_tmp0_) { +#line 338 "track.vala" + i++; +#line 1870 "track.c" + } +#line 338 "track.vala" + _tmp0_ = FALSE; +#line 338 "track.vala" + if (!(i < size)) { +#line 338 "track.vala" + break; +#line 1878 "track.c" + } +#line 339 "track.vala" + model_track_delete_clip (self, _tmp1_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), 0)); +#line 1882 "track.c" + _g_object_unref0 (_tmp1_); + } + } + } +#line 341 "track.vala" + view_media_engine_go (self->project->media_engine, (gint64) 0); +#line 1889 "track.c" +} + + +#line 344 "track.vala" +void model_track_revert_to_original (ModelTrack* self, ModelClip* clip) { +#line 1895 "track.c" + ModelCommand* command; +#line 344 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 344 "track.vala" + g_return_if_fail (MODEL_IS_CLIP (clip)); +#line 345 "track.vala" + command = MODEL_COMMAND (model_clip_revert_command_new (self, clip)); +#line 346 "track.vala" + model_project_do_command (self->project, command); +#line 1905 "track.c" + _model_command_unref0 (command); +} + + +#line 349 "track.vala" +void _model_track_revert_to_original (ModelTrack* self, ModelClip* c) { +#line 1912 "track.c" + gint index; +#line 349 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 349 "track.vala" + g_return_if_fail (MODEL_IS_CLIP (c)); +#line 350 "track.vala" + index = model_track_get_clip_index (self, c); +#line 351 "track.vala" + if (index == (-1)) { +#line 352 "track.vala" + g_error ("track.vala:352: revert_to_original: Clip not in track array!"); +#line 1924 "track.c" + } +#line 354 "track.vala" + model_clip_set_media_start_duration (c, (gint64) 0, model_clip_file_get_length (c->clipfile)); +#line 356 "track.vala" + view_media_engine_go (self->project->media_engine, model_clip_get_start (c)); +#line 1930 "track.c" +} + + +#line 359 "track.vala" +gboolean model_track_are_contiguous_clips (ModelTrack* self, gint64 position) { +#line 1936 "track.c" + gboolean result = FALSE; + ModelClip* right_clip; + ModelClip* left_clip; + gboolean _tmp0_ = FALSE; + gboolean _tmp1_ = FALSE; + gboolean _tmp2_ = FALSE; + gboolean _tmp3_ = FALSE; +#line 359 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), FALSE); +#line 360 "track.vala" + right_clip = model_track_get_clip_by_position (self, position + 1); +#line 361 "track.vala" + left_clip = model_track_get_clip_by_position (self, position - 1); +#line 363 "track.vala" + if (left_clip != NULL) { +#line 363 "track.vala" + _tmp3_ = right_clip != NULL; +#line 1954 "track.c" + } else { +#line 363 "track.vala" + _tmp3_ = FALSE; +#line 1958 "track.c" + } +#line 363 "track.vala" + if (_tmp3_) { +#line 364 "track.vala" + _tmp2_ = left_clip != right_clip; +#line 1964 "track.c" + } else { +#line 363 "track.vala" + _tmp2_ = FALSE; +#line 1968 "track.c" + } +#line 363 "track.vala" + if (_tmp2_) { +#line 365 "track.vala" + _tmp1_ = left_clip->clipfile == right_clip->clipfile; +#line 1974 "track.c" + } else { +#line 363 "track.vala" + _tmp1_ = FALSE; +#line 1978 "track.c" + } +#line 363 "track.vala" + if (_tmp1_) { +#line 366 "track.vala" + _tmp0_ = model_clip_get_end (left_clip) == model_clip_get_start (right_clip); +#line 1984 "track.c" + } else { +#line 363 "track.vala" + _tmp0_ = FALSE; +#line 1988 "track.c" + } + result = _tmp0_; + _g_object_unref0 (right_clip); + _g_object_unref0 (left_clip); +#line 363 "track.vala" + return result; +#line 1995 "track.c" +} + + +#line 369 "track.vala" +void model_track_split_at (ModelTrack* self, gint64 position) { +#line 2001 "track.c" + ModelCommand* command; +#line 369 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 370 "track.vala" + command = MODEL_COMMAND (model_clip_split_command_new (MODEL_CLIP_SPLIT_COMMAND_ACTION_SPLIT, self, position)); +#line 371 "track.vala" + model_project_do_command (self->project, command); +#line 2009 "track.c" + _model_command_unref0 (command); +} + + +#line 374 "track.vala" +void _model_track_split_at (ModelTrack* self, gint64 position) { +#line 2016 "track.c" + ModelClip* c; + ModelClip* cn; +#line 374 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 375 "track.vala" + c = model_track_get_clip_by_position (self, position); +#line 376 "track.vala" + if (c == NULL) { +#line 2025 "track.c" + _g_object_unref0 (c); +#line 377 "track.vala" + return; +#line 2029 "track.c" + } +#line 379 "track.vala" + cn = model_clip_new (c->clipfile, c->type, c->name, position, (position - model_clip_get_start (c)) + model_clip_get_media_start (c), (model_clip_get_start (c) + model_clip_get_duration (c)) - position, FALSE); +#line 383 "track.vala" + model_clip_set_duration (c, position - model_clip_get_start (c)); +#line 385 "track.vala" + model_track_add (self, cn, position, FALSE); +#line 2037 "track.c" + _g_object_unref0 (c); + _g_object_unref0 (cn); +} + + +#line 388 "track.vala" +void model_track_join (ModelTrack* self, gint64 position) { +#line 2045 "track.c" + ModelCommand* command; +#line 388 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 389 "track.vala" + command = MODEL_COMMAND (model_clip_split_command_new (MODEL_CLIP_SPLIT_COMMAND_ACTION_JOIN, self, position)); +#line 390 "track.vala" + model_project_do_command (self->project, command); +#line 2053 "track.c" + _model_command_unref0 (command); +} + + +#line 393 "track.vala" +void _model_track_join (ModelTrack* self, gint64 position) { +#line 393 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 394 "track.vala" + g_assert (model_track_are_contiguous_clips (self, position)); +#line 395 "track.vala" + if (model_track_are_contiguous_clips (self, position)) { +#line 2066 "track.c" + ModelClip* right_clip; + gint right_clip_index; + gint left_clip_index; + ModelClip* left_clip; +#line 396 "track.vala" + right_clip = model_track_get_clip_by_position (self, position + 1); +#line 397 "track.vala" + g_assert (right_clip != NULL); +#line 399 "track.vala" + right_clip_index = model_track_get_clip_index (self, right_clip); +#line 400 "track.vala" + g_assert (right_clip_index > 0); +#line 402 "track.vala" + left_clip_index = right_clip_index - 1; +#line 403 "track.vala" + left_clip = model_track_get_clip (self, left_clip_index); +#line 404 "track.vala" + g_assert (left_clip != NULL); +#line 405 "track.vala" + model_clip_set_duration (left_clip, model_clip_get_end (right_clip) - model_clip_get_start (left_clip)); +#line 406 "track.vala" + _model_track_delete_clip (self, right_clip); +#line 2089 "track.c" + _g_object_unref0 (right_clip); + _g_object_unref0 (left_clip); + } +} + + +#line 410 "track.vala" +void model_track_trim (ModelTrack* self, ModelClip* clip, gint64 delta, GdkWindowEdge edge) { +#line 2098 "track.c" + ModelCommand* command; +#line 410 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 410 "track.vala" + g_return_if_fail (MODEL_IS_CLIP (clip)); +#line 411 "track.vala" + command = MODEL_COMMAND (model_clip_trim_command_new (self, clip, delta, edge)); +#line 412 "track.vala" + model_project_do_command (self->project, command); +#line 2108 "track.c" + _model_command_unref0 (command); +} + + +#line 415 "track.vala" +void _model_track_trim (ModelTrack* self, ModelClip* clip, gint64 delta, GdkWindowEdge edge) { +#line 415 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 415 "track.vala" + g_return_if_fail (MODEL_IS_CLIP (clip)); +#line 416 "track.vala" + model_clip_trim (clip, delta, edge); +#line 417 "track.vala" + model_track_do_clip_overwrite (self, clip); +#line 2123 "track.c" +} + + +#line 420 "track.vala" +gint64 model_track_previous_edit (ModelTrack* self, gint64 pos) { +#line 2129 "track.c" + gint64 result = 0LL; +#line 420 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), 0LL); +#line 2133 "track.c" + { + gint i; +#line 421 "track.vala" + i = gee_collection_get_size (GEE_COLLECTION (self->clips)) - 1; +#line 2138 "track.c" + { + gboolean _tmp0_; +#line 421 "track.vala" + _tmp0_ = TRUE; +#line 421 "track.vala" + while (TRUE) { +#line 2145 "track.c" + ModelClip* c; +#line 421 "track.vala" + if (!_tmp0_) { +#line 421 "track.vala" + i = i - 1; +#line 2151 "track.c" + } +#line 421 "track.vala" + _tmp0_ = FALSE; +#line 421 "track.vala" + if (!(i >= 0)) { +#line 421 "track.vala" + break; +#line 2159 "track.c" + } + c = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i); +#line 423 "track.vala" + if (model_clip_get_end (c) < pos) { +#line 2164 "track.c" + result = model_clip_get_end (c); + _g_object_unref0 (c); +#line 424 "track.vala" + return result; +#line 2169 "track.c" + } +#line 425 "track.vala" + if (model_clip_get_start (c) < pos) { +#line 2173 "track.c" + result = model_clip_get_start (c); + _g_object_unref0 (c); +#line 426 "track.vala" + return result; +#line 2178 "track.c" + } + _g_object_unref0 (c); + } + } + } + result = (gint64) 0; +#line 428 "track.vala" + return result; +#line 2187 "track.c" +} + + +#line 431 "track.vala" +gint64 model_track_next_edit (ModelTrack* self, gint64 pos) { +#line 2193 "track.c" + gint64 result = 0LL; +#line 431 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), 0LL); +#line 2197 "track.c" + { + GeeIterator* _c_it; + _c_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->clips)); +#line 432 "track.vala" + while (TRUE) { +#line 2203 "track.c" + ModelClip* c; +#line 432 "track.vala" + if (!gee_iterator_next (_c_it)) { +#line 432 "track.vala" + break; +#line 2209 "track.c" + } +#line 432 "track.vala" + c = (ModelClip*) gee_iterator_get (_c_it); +#line 433 "track.vala" + if (model_clip_get_start (c) > pos) { +#line 2215 "track.c" + result = model_clip_get_start (c); + _g_object_unref0 (c); + _g_object_unref0 (_c_it); +#line 434 "track.vala" + return result; +#line 2221 "track.c" + } else { +#line 435 "track.vala" + if (model_clip_get_end (c) > pos) { +#line 2225 "track.c" + result = model_clip_get_end (c); + _g_object_unref0 (c); + _g_object_unref0 (_c_it); +#line 436 "track.vala" + return result; +#line 2231 "track.c" + } + } + _g_object_unref0 (c); + } + _g_object_unref0 (_c_it); + } + result = model_track_get_length (self); +#line 437 "track.vala" + return result; +#line 2241 "track.c" +} + + +#line 440 "track.vala" +static void model_track_real_write_attributes (ModelTrack* self, FILE* f) { +#line 2247 "track.c" + char* _tmp1_; + char* _tmp0_; +#line 440 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 440 "track.vala" + g_return_if_fail (f != NULL); +#line 441 "track.vala" + fprintf (f, "type=\"%s\" name=\"%s\" ", _tmp0_ = model_track_name (self), _tmp1_ = model_track_get_display_name (self)); +#line 2256 "track.c" + _g_free0 (_tmp1_); + _g_free0 (_tmp0_); +} + + +#line 440 "track.vala" +void model_track_write_attributes (ModelTrack* self, FILE* f) { +#line 440 "track.vala" + MODEL_TRACK_GET_CLASS (self)->write_attributes (self, f); +#line 2266 "track.c" +} + + +#line 444 "track.vala" +void model_track_save (ModelTrack* self, FILE* f) { +#line 444 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 444 "track.vala" + g_return_if_fail (f != NULL); +#line 445 "track.vala" + fprintf (f, " \n"); +#line 2282 "track.c" + { + gint i; +#line 448 "track.vala" + i = 0; +#line 2287 "track.c" + { + gboolean _tmp0_; +#line 448 "track.vala" + _tmp0_ = TRUE; +#line 448 "track.vala" + while (TRUE) { +#line 2294 "track.c" + ModelClip* _tmp2_; + ModelClip* _tmp1_; +#line 448 "track.vala" + if (!_tmp0_) { +#line 448 "track.vala" + i++; +#line 2301 "track.c" + } +#line 448 "track.vala" + _tmp0_ = FALSE; +#line 448 "track.vala" + if (!(i < gee_collection_get_size (GEE_COLLECTION (self->clips)))) { +#line 448 "track.vala" + break; +#line 2309 "track.c" + } +#line 449 "track.vala" + model_clip_save (_tmp1_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i), f, model_project_get_clipfile_index (self->project, (_tmp2_ = (ModelClip*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->clips), i))->clipfile)); +#line 2313 "track.c" + _g_object_unref0 (_tmp2_); + _g_object_unref0 (_tmp1_); + } + } + } +#line 450 "track.vala" + fputs (" \n", f); +#line 2321 "track.c" +} + + +#line 453 "track.vala" +char* model_track_get_display_name (ModelTrack* self) { +#line 2327 "track.c" + char* result = NULL; +#line 453 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), NULL); +#line 2331 "track.c" + result = g_strdup (self->display_name); +#line 454 "track.vala" + return result; +#line 2335 "track.c" +} + + +#line 457 "track.vala" +void model_track_set_display_name (ModelTrack* self, const char* new_display_name) { +#line 457 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 457 "track.vala" + g_return_if_fail (new_display_name != NULL); +#line 458 "track.vala" + if (_vala_strcmp0 (self->display_name, new_display_name) != 0) { +#line 2347 "track.c" + char* _tmp0_; +#line 459 "track.vala" + self->display_name = (_tmp0_ = g_strdup (new_display_name), _g_free0 (self->display_name), _tmp0_); +#line 460 "track.vala" + g_signal_emit_by_name (self, "track-renamed", self); +#line 2353 "track.c" + } +} + + +#line 464 "track.vala" +void model_track_set_selected (ModelTrack* self, gboolean is_selected) { +#line 464 "track.vala" + g_return_if_fail (MODEL_IS_TRACK (self)); +#line 465 "track.vala" + if (self->priv->is_selected != is_selected) { +#line 466 "track.vala" + self->priv->is_selected = is_selected; +#line 467 "track.vala" + g_signal_emit_by_name (self, "track-selection-changed", self); +#line 2368 "track.c" + } +} + + +#line 471 "track.vala" +gboolean model_track_get_is_selected (ModelTrack* self) { +#line 2375 "track.c" + gboolean result = FALSE; +#line 471 "track.vala" + g_return_val_if_fail (MODEL_IS_TRACK (self), FALSE); +#line 2379 "track.c" + result = self->priv->is_selected; +#line 472 "track.vala" + return result; +#line 2383 "track.c" +} + + +static void model_track_class_init (ModelTrackClass * klass) { + model_track_parent_class = g_type_class_peek_parent (klass); + g_type_class_add_private (klass, sizeof (ModelTrackPrivate)); + MODEL_TRACK_CLASS (klass)->name = model_track_real_name; + MODEL_TRACK_CLASS (klass)->media_type = model_track_real_media_type; + MODEL_TRACK_CLASS (klass)->check = model_track_real_check; + MODEL_TRACK_CLASS (klass)->on_clip_updated = model_track_real_on_clip_updated; + MODEL_TRACK_CLASS (klass)->write_attributes = model_track_real_write_attributes; + G_OBJECT_CLASS (klass)->finalize = model_track_finalize; + g_signal_new ("clip_added", MODEL_TYPE_TRACK, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_BOOLEAN, G_TYPE_NONE, 2, MODEL_TYPE_CLIP, G_TYPE_BOOLEAN); + g_signal_new ("clip_removed", MODEL_TYPE_TRACK, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, MODEL_TYPE_CLIP); + g_signal_new ("track_renamed", MODEL_TYPE_TRACK, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, MODEL_TYPE_TRACK); + g_signal_new ("track_selection_changed", MODEL_TYPE_TRACK, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, MODEL_TYPE_TRACK); + g_signal_new ("track_hidden", MODEL_TYPE_TRACK, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, MODEL_TYPE_TRACK); + g_signal_new ("track_removed", MODEL_TYPE_TRACK, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, MODEL_TYPE_TRACK); + g_signal_new ("error_occurred", MODEL_TYPE_TRACK, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__STRING_STRING, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING); +} + + +static void model_track_instance_init (ModelTrack * self) { + self->priv = MODEL_TRACK_GET_PRIVATE (self); + self->clips = gee_array_list_new (MODEL_TYPE_CLIP, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL); +} + + +static void model_track_finalize (GObject* obj) { + ModelTrack * self; + self = MODEL_TRACK (obj); + _g_object_unref0 (self->clips); + _g_free0 (self->display_name); + G_OBJECT_CLASS (model_track_parent_class)->finalize (obj); +} + + +GType model_track_get_type (void) { + static volatile gsize model_track_type_id__volatile = 0; + if (g_once_init_enter (&model_track_type_id__volatile)) { + static const GTypeInfo g_define_type_info = { sizeof (ModelTrackClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_track_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelTrack), 0, (GInstanceInitFunc) model_track_instance_init, NULL }; + GType model_track_type_id; + model_track_type_id = g_type_register_static (G_TYPE_OBJECT, "ModelTrack", &g_define_type_info, G_TYPE_FLAG_ABSTRACT); + g_once_init_leave (&model_track_type_id__volatile, model_track_type_id); + } + return model_track_type_id__volatile; +} + + +#line 487 "track.vala" +ModelAudioTrack* model_audio_track_construct (GType object_type, ModelProject* project, const char* display_name) { +#line 2435 "track.c" + ModelAudioTrack * self; +#line 487 "track.vala" + g_return_val_if_fail (MODEL_IS_PROJECT (project), NULL); +#line 487 "track.vala" + g_return_val_if_fail (display_name != NULL, NULL); +#line 488 "track.vala" + self = (ModelAudioTrack*) model_track_construct (object_type, project, display_name); +#line 490 "track.vala" + model_audio_track_set_default_num_channels (self, MODEL_AUDIO_TRACK_INVALID_CHANNEL_COUNT); +#line 491 "track.vala" + _model_audio_track_set_pan (self, (double) 0); +#line 492 "track.vala" + _model_audio_track_set_volume (self, 1.0); +#line 2449 "track.c" + return self; +} + + +#line 487 "track.vala" +ModelAudioTrack* model_audio_track_new (ModelProject* project, const char* display_name) { +#line 487 "track.vala" + return model_audio_track_construct (MODEL_TYPE_AUDIO_TRACK, project, display_name); +#line 2458 "track.c" +} + + +#line 495 "track.vala" +static char* model_audio_track_real_name (ModelTrack* base) { +#line 2464 "track.c" + ModelAudioTrack * self; + char* result = NULL; + self = MODEL_AUDIO_TRACK (base); + result = g_strdup ("audio"); +#line 495 "track.vala" + return result; +#line 2471 "track.c" +} + + +#line 497 "track.vala" +static ModelMediaType model_audio_track_real_media_type (ModelTrack* base) { +#line 2477 "track.c" + ModelAudioTrack * self; + ModelMediaType result = 0; + self = MODEL_AUDIO_TRACK (base); + result = MODEL_MEDIA_TYPE_AUDIO; +#line 498 "track.vala" + return result; +#line 2484 "track.c" +} + + +#line 501 "track.vala" +static void model_audio_track_real_write_attributes (ModelTrack* base, FILE* f) { +#line 2490 "track.c" + ModelAudioTrack * self; + gint channels = 0; + gboolean _tmp0_ = FALSE; + self = MODEL_AUDIO_TRACK (base); +#line 501 "track.vala" + g_return_if_fail (f != NULL); +#line 502 "track.vala" + MODEL_TRACK_CLASS (model_audio_track_parent_class)->write_attributes (MODEL_TRACK (self), f); +#line 503 "track.vala" + fprintf (f, "volume=\"%f\" panorama=\"%f\" ", model_audio_track_get_volume (self), model_audio_track_get_pan (self)); +#line 506 "track.vala" + if (model_audio_track_get_num_channels (self, &channels)) { +#line 507 "track.vala" + _tmp0_ = channels != MODEL_AUDIO_TRACK_INVALID_CHANNEL_COUNT; +#line 2505 "track.c" + } else { +#line 506 "track.vala" + _tmp0_ = FALSE; +#line 2509 "track.c" + } +#line 506 "track.vala" + if (_tmp0_) { +#line 508 "track.vala" + fprintf (f, "channels=\"%d\" ", channels); +#line 2515 "track.c" + } +} + + +#line 511 "track.vala" +void model_audio_track_set_pan (ModelAudioTrack* self, double new_value) { +#line 2522 "track.c" + double old_value; +#line 511 "track.vala" + g_return_if_fail (MODEL_IS_AUDIO_TRACK (self)); +#line 512 "track.vala" + old_value = model_audio_track_get_pan (self); +#line 513 "track.vala" + if (!float_within (new_value - old_value, 0.05)) { +#line 2530 "track.c" + ModelParameterCommand* parameter_command; +#line 515 "track.vala" + parameter_command = model_parameter_command_new (self, MODEL_PARAMETER_PAN, new_value, old_value); +#line 516 "track.vala" + model_project_do_command (MODEL_TRACK (self)->project, MODEL_COMMAND (parameter_command)); +#line 2536 "track.c" + _model_command_unref0 (parameter_command); + } +} + + +#line 520 "track.vala" +void _model_audio_track_set_pan (ModelAudioTrack* self, double new_value) { +#line 2544 "track.c" + double old_value; +#line 520 "track.vala" + g_return_if_fail (MODEL_IS_AUDIO_TRACK (self)); +#line 521 "track.vala" + g_assert ((new_value <= 1.0) && (new_value >= (-1.0))); +#line 522 "track.vala" + old_value = model_audio_track_get_pan (self); +#line 523 "track.vala" + if (!float_within (old_value - new_value, 0.05)) { +#line 524 "track.vala" + self->priv->pan = new_value; +#line 525 "track.vala" + g_signal_emit_by_name (self, "parameter-changed", MODEL_PARAMETER_PAN, new_value); +#line 2558 "track.c" + } +} + + +#line 529 "track.vala" +double model_audio_track_get_pan (ModelAudioTrack* self) { +#line 2565 "track.c" + double result = 0.0; +#line 529 "track.vala" + g_return_val_if_fail (MODEL_IS_AUDIO_TRACK (self), 0.0); +#line 2569 "track.c" + result = self->priv->pan; +#line 530 "track.vala" + return result; +#line 2573 "track.c" +} + + +#line 533 "track.vala" +void model_audio_track_set_volume (ModelAudioTrack* self, double new_volume) { +#line 2579 "track.c" + double old_volume; +#line 533 "track.vala" + g_return_if_fail (MODEL_IS_AUDIO_TRACK (self)); +#line 534 "track.vala" + old_volume = model_audio_track_get_volume (self); +#line 535 "track.vala" + if (!float_within (old_volume - new_volume, 0.005)) { +#line 2587 "track.c" + ModelParameterCommand* parameter_command; +#line 537 "track.vala" + parameter_command = model_parameter_command_new (self, MODEL_PARAMETER_VOLUME, new_volume, old_volume); +#line 538 "track.vala" + model_project_do_command (MODEL_TRACK (self)->project, MODEL_COMMAND (parameter_command)); +#line 2593 "track.c" + _model_command_unref0 (parameter_command); + } +} + + +#line 542 "track.vala" +void _model_audio_track_set_volume (ModelAudioTrack* self, double new_volume) { +#line 2601 "track.c" + double old_volume; +#line 542 "track.vala" + g_return_if_fail (MODEL_IS_AUDIO_TRACK (self)); +#line 543 "track.vala" + g_assert ((new_volume >= 0.0) && (new_volume <= 10.0)); +#line 544 "track.vala" + old_volume = model_audio_track_get_volume (self); +#line 545 "track.vala" + if (!float_within (old_volume - new_volume, 0.005)) { +#line 546 "track.vala" + self->priv->volume = new_volume; +#line 547 "track.vala" + g_signal_emit_by_name (self, "parameter-changed", MODEL_PARAMETER_VOLUME, new_volume); +#line 2615 "track.c" + } +} + + +#line 551 "track.vala" +double model_audio_track_get_volume (ModelAudioTrack* self) { +#line 2622 "track.c" + double result = 0.0; +#line 551 "track.vala" + g_return_val_if_fail (MODEL_IS_AUDIO_TRACK (self), 0.0); +#line 2626 "track.c" + result = self->priv->volume; +#line 552 "track.vala" + return result; +#line 2630 "track.c" +} + + +#line 555 "track.vala" +void model_audio_track_set_default_num_channels (ModelAudioTrack* self, gint num) { +#line 555 "track.vala" + g_return_if_fail (MODEL_IS_AUDIO_TRACK (self)); +#line 556 "track.vala" + self->priv->default_num_channels = num; +#line 2640 "track.c" +} + + +#line 559 "track.vala" +gboolean model_audio_track_get_num_channels (ModelAudioTrack* self, gint* num) { +#line 2646 "track.c" + gboolean result = FALSE; +#line 559 "track.vala" + g_return_val_if_fail (MODEL_IS_AUDIO_TRACK (self), FALSE); +#line 560 "track.vala" + if (gee_collection_get_size (GEE_COLLECTION (MODEL_TRACK (self)->clips)) == 0) { +#line 2652 "track.c" + result = FALSE; +#line 561 "track.vala" + return result; +#line 2656 "track.c" + } + { + GeeIterator* _c_it; + _c_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (MODEL_TRACK (self)->clips)); +#line 563 "track.vala" + while (TRUE) { +#line 2663 "track.c" + ModelClip* c; +#line 563 "track.vala" + if (!gee_iterator_next (_c_it)) { +#line 563 "track.vala" + break; +#line 2669 "track.c" + } +#line 563 "track.vala" + c = (ModelClip*) gee_iterator_get (_c_it); +#line 564 "track.vala" + if (model_clip_file_is_online (c->clipfile)) { +#line 2675 "track.c" + gboolean can; +#line 565 "track.vala" + can = model_clip_file_get_num_channels (c->clipfile, num); +#line 566 "track.vala" + g_assert (can); +#line 2681 "track.c" + result = can; + _g_object_unref0 (c); + _g_object_unref0 (_c_it); +#line 568 "track.vala" + return result; +#line 2687 "track.c" + } + _g_object_unref0 (c); + } + _g_object_unref0 (_c_it); + } +#line 572 "track.vala" + if (self->priv->default_num_channels == MODEL_AUDIO_TRACK_INVALID_CHANNEL_COUNT) { +#line 2695 "track.c" + result = FALSE; +#line 573 "track.vala" + return result; +#line 2699 "track.c" + } +#line 575 "track.vala" + *num = self->priv->default_num_channels; +#line 2703 "track.c" + result = TRUE; +#line 576 "track.vala" + return result; +#line 2707 "track.c" +} + + +#line 579 "track.vala" +static gboolean model_audio_track_real_check (ModelTrack* base, ModelClip* clip) { +#line 2713 "track.c" + ModelAudioTrack * self; + gboolean result = FALSE; + gboolean good; + gint number_of_channels = 0; + self = MODEL_AUDIO_TRACK (base); +#line 579 "track.vala" + g_return_val_if_fail (MODEL_IS_CLIP (clip), FALSE); +#line 580 "track.vala" + if (!model_clip_file_is_online (clip->clipfile)) { +#line 2723 "track.c" + result = TRUE; +#line 581 "track.vala" + return result; +#line 2727 "track.c" + } +#line 584 "track.vala" + if (gee_collection_get_size (GEE_COLLECTION (MODEL_TRACK (self)->clips)) == 0) { +#line 2731 "track.c" + gint number_of_channels; +#line 585 "track.vala" + number_of_channels = 0; +#line 586 "track.vala" + if (model_clip_file_get_num_channels (clip->clipfile, &number_of_channels)) { +#line 587 "track.vala" + g_signal_emit_by_name (self, "channel-count-changed", number_of_channels); +#line 2739 "track.c" + } + result = TRUE; +#line 589 "track.vala" + return result; +#line 2744 "track.c" + } +#line 592 "track.vala" + good = FALSE; +#line 594 "track.vala" + if (model_clip_file_get_num_channels (clip->clipfile, &number_of_channels)) { +#line 2750 "track.c" + gint track_channel_count = 0; +#line 596 "track.vala" + if (model_audio_track_get_num_channels (self, &track_channel_count)) { +#line 597 "track.vala" + good = track_channel_count == number_of_channels; +#line 2756 "track.c" + } + } +#line 601 "track.vala" + if (!good) { +#line 2761 "track.c" + const char* _tmp0_; + char* sub_error; + _tmp0_ = NULL; +#line 602 "track.vala" + if (number_of_channels == 1) { +#line 603 "track.vala" + _tmp0_ = "Mono clips cannot go on stereo tracks."; +#line 2769 "track.c" + } else { +#line 604 "track.vala" + _tmp0_ = "Stereo clips cannot go on mono tracks."; +#line 2773 "track.c" + } +#line 602 "track.vala" + sub_error = g_strdup (_tmp0_); +#line 605 "track.vala" + g_signal_emit_by_name (MODEL_TRACK (self), "error-occurred", "Cannot add clip to track", sub_error); +#line 2779 "track.c" + _g_free0 (sub_error); + } + result = good; +#line 607 "track.vala" + return result; +#line 2785 "track.c" +} + + +#line 610 "track.vala" +void model_audio_track_on_level_changed (ModelAudioTrack* self, double level_left, double level_right) { +#line 610 "track.vala" + g_return_if_fail (MODEL_IS_AUDIO_TRACK (self)); +#line 611 "track.vala" + logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_level_changed"); +#line 612 "track.vala" + g_signal_emit_by_name (self, "level-changed", level_left, level_right); +#line 2797 "track.c" +} + + +#line 615 "track.vala" +static void model_audio_track_real_on_clip_updated (ModelTrack* base, ModelClip* clip) { +#line 2803 "track.c" + ModelAudioTrack * self; + self = MODEL_AUDIO_TRACK (base); +#line 615 "track.vala" + g_return_if_fail (MODEL_IS_CLIP (clip)); +#line 616 "track.vala" + if (model_clip_file_is_online (clip->clipfile)) { +#line 2810 "track.c" + gint number_of_channels; +#line 617 "track.vala" + number_of_channels = 0; +#line 618 "track.vala" + if (model_audio_track_get_num_channels (self, &number_of_channels)) { +#line 619 "track.vala" + g_signal_emit_by_name (self, "channel-count-changed", number_of_channels); +#line 2818 "track.c" + } + } +} + + +static void model_audio_track_class_init (ModelAudioTrackClass * klass) { + model_audio_track_parent_class = g_type_class_peek_parent (klass); + g_type_class_add_private (klass, sizeof (ModelAudioTrackPrivate)); + MODEL_TRACK_CLASS (klass)->name = model_audio_track_real_name; + MODEL_TRACK_CLASS (klass)->media_type = model_audio_track_real_media_type; + MODEL_TRACK_CLASS (klass)->write_attributes = model_audio_track_real_write_attributes; + MODEL_TRACK_CLASS (klass)->check = model_audio_track_real_check; + MODEL_TRACK_CLASS (klass)->on_clip_updated = model_audio_track_real_on_clip_updated; + G_OBJECT_CLASS (klass)->finalize = model_audio_track_finalize; + g_signal_new ("parameter_changed", MODEL_TYPE_AUDIO_TRACK, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__ENUM_DOUBLE, G_TYPE_NONE, 2, MODEL_TYPE_PARAMETER, G_TYPE_DOUBLE); + g_signal_new ("level_changed", MODEL_TYPE_AUDIO_TRACK, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__DOUBLE_DOUBLE, G_TYPE_NONE, 2, G_TYPE_DOUBLE, G_TYPE_DOUBLE); + g_signal_new ("channel_count_changed", MODEL_TYPE_AUDIO_TRACK, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); +} + + +static void model_audio_track_instance_init (ModelAudioTrack * self) { + self->priv = MODEL_AUDIO_TRACK_GET_PRIVATE (self); +} + + +static void model_audio_track_finalize (GObject* obj) { + ModelAudioTrack * self; + self = MODEL_AUDIO_TRACK (obj); + G_OBJECT_CLASS (model_audio_track_parent_class)->finalize (obj); +} + + +GType model_audio_track_get_type (void) { + static volatile gsize model_audio_track_type_id__volatile = 0; + if (g_once_init_enter (&model_audio_track_type_id__volatile)) { + static const GTypeInfo g_define_type_info = { sizeof (ModelAudioTrackClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_audio_track_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelAudioTrack), 0, (GInstanceInitFunc) model_audio_track_instance_init, NULL }; + GType model_audio_track_type_id; + model_audio_track_type_id = g_type_register_static (MODEL_TYPE_TRACK, "ModelAudioTrack", &g_define_type_info, 0); + g_once_init_leave (&model_audio_track_type_id__volatile, model_audio_track_type_id); + } + return model_audio_track_type_id__volatile; +} + + +static int _vala_strcmp0 (const char * str1, const char * str2) { + if (str1 == NULL) { + return -(str1 != str2); + } + if (str2 == NULL) { + return str1 != str2; + } + return strcmp (str1, str2); +} + + + +static void g_cclosure_user_marshal_VOID__OBJECT_BOOLEAN (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) { + typedef void (*GMarshalFunc_VOID__OBJECT_BOOLEAN) (gpointer data1, gpointer arg_1, gboolean arg_2, gpointer data2); + register GMarshalFunc_VOID__OBJECT_BOOLEAN callback; + register GCClosure * cc; + register gpointer data1, data2; + cc = (GCClosure *) closure; + g_return_if_fail (n_param_values == 3); + if (G_CCLOSURE_SWAP_DATA (closure)) { + data1 = closure->data; + data2 = param_values->data[0].v_pointer; + } else { + data1 = param_values->data[0].v_pointer; + data2 = closure->data; + } + callback = (GMarshalFunc_VOID__OBJECT_BOOLEAN) (marshal_data ? marshal_data : cc->callback); + callback (data1, g_value_get_object (param_values + 1), g_value_get_boolean (param_values + 2), data2); +} + + +static void g_cclosure_user_marshal_VOID__STRING_STRING (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) { + typedef void (*GMarshalFunc_VOID__STRING_STRING) (gpointer data1, const char* arg_1, const char* arg_2, gpointer data2); + register GMarshalFunc_VOID__STRING_STRING callback; + register GCClosure * cc; + register gpointer data1, data2; + cc = (GCClosure *) closure; + g_return_if_fail (n_param_values == 3); + if (G_CCLOSURE_SWAP_DATA (closure)) { + data1 = closure->data; + data2 = param_values->data[0].v_pointer; + } else { + data1 = param_values->data[0].v_pointer; + data2 = closure->data; + } + callback = (GMarshalFunc_VOID__STRING_STRING) (marshal_data ? marshal_data : cc->callback); + callback (data1, g_value_get_string (param_values + 1), g_value_get_string (param_values + 2), data2); +} + + +static void g_cclosure_user_marshal_VOID__ENUM_DOUBLE (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) { + typedef void (*GMarshalFunc_VOID__ENUM_DOUBLE) (gpointer data1, gint arg_1, double arg_2, gpointer data2); + register GMarshalFunc_VOID__ENUM_DOUBLE callback; + register GCClosure * cc; + register gpointer data1, data2; + cc = (GCClosure *) closure; + g_return_if_fail (n_param_values == 3); + if (G_CCLOSURE_SWAP_DATA (closure)) { + data1 = closure->data; + data2 = param_values->data[0].v_pointer; + } else { + data1 = param_values->data[0].v_pointer; + data2 = closure->data; + } + callback = (GMarshalFunc_VOID__ENUM_DOUBLE) (marshal_data ? marshal_data : cc->callback); + callback (data1, g_value_get_enum (param_values + 1), g_value_get_double (param_values + 2), data2); +} + + +static void g_cclosure_user_marshal_VOID__DOUBLE_DOUBLE (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) { + typedef void (*GMarshalFunc_VOID__DOUBLE_DOUBLE) (gpointer data1, double arg_1, double arg_2, gpointer data2); + register GMarshalFunc_VOID__DOUBLE_DOUBLE callback; + register GCClosure * cc; + register gpointer data1, data2; + cc = (GCClosure *) closure; + g_return_if_fail (n_param_values == 3); + if (G_CCLOSURE_SWAP_DATA (closure)) { + data1 = closure->data; + data2 = param_values->data[0].v_pointer; + } else { + data1 = param_values->data[0].v_pointer; + data2 = closure->data; + } + callback = (GMarshalFunc_VOID__DOUBLE_DOUBLE) (marshal_data ? marshal_data : cc->callback); + callback (data1, g_value_get_double (param_values + 1), g_value_get_double (param_values + 2), data2); +} + + +