Initial commit
[fillmore] / src / marina / marina / command.c
diff --git a/src/marina/marina/command.c b/src/marina/marina/command.c
new file mode 100644 (file)
index 0000000..39837b2
--- /dev/null
@@ -0,0 +1,2462 @@
+/* command.c generated by valac, the Vala compiler
+ * generated from command.vala, do not modify */
+
+/* Copyright 2009 Yorba Foundation
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later).  See the COPYING file in this distribution. 
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <float.h>
+#include <math.h>
+#include <gdk/gdk.h>
+#include <gobject/gvaluecollector.h>
+
+
+#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;
+typedef struct _ModelCommandPrivate ModelCommandPrivate;
+typedef struct _ModelParamSpecCommand ModelParamSpecCommand;
+
+#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 struct _ModelParameterCommandPrivate ModelParameterCommandPrivate;
+
+#define MODEL_TYPE_TRACK (model_track_get_type ())
+#define MODEL_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TRACK, ModelTrack))
+#define MODEL_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_TRACK, ModelTrackClass))
+#define MODEL_IS_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TRACK))
+#define MODEL_IS_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_TRACK))
+#define MODEL_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_TRACK, ModelTrackClass))
+
+typedef struct _ModelTrack ModelTrack;
+typedef struct _ModelTrackClass ModelTrackClass;
+
+#define 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;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _model_command_unref0(var) ((var == NULL) ? NULL : (var = (model_command_unref (var), NULL)))
+
+#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;
+typedef struct _ModelClipCommandPrivate ModelClipCommandPrivate;
+
+#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_CLIP_COMMAND_TYPE_ACTION (model_clip_command_action_get_type ())
+
+#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;
+typedef struct _ModelClipAddCommandPrivate ModelClipAddCommandPrivate;
+
+#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;
+typedef struct _ModelClipSplitCommandPrivate ModelClipSplitCommandPrivate;
+
+#define MODEL_CLIP_SPLIT_COMMAND_TYPE_ACTION (model_clip_split_command_action_get_type ())
+
+#define MODEL_TYPE_CLIP_FILE_DELETE_COMMAND (model_clip_file_delete_command_get_type ())
+#define MODEL_CLIP_FILE_DELETE_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_FILE_DELETE_COMMAND, ModelClipFileDeleteCommand))
+#define MODEL_CLIP_FILE_DELETE_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_FILE_DELETE_COMMAND, ModelClipFileDeleteCommandClass))
+#define MODEL_IS_CLIP_FILE_DELETE_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_FILE_DELETE_COMMAND))
+#define MODEL_IS_CLIP_FILE_DELETE_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_FILE_DELETE_COMMAND))
+#define MODEL_CLIP_FILE_DELETE_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_FILE_DELETE_COMMAND, ModelClipFileDeleteCommandClass))
+
+typedef struct _ModelClipFileDeleteCommand ModelClipFileDeleteCommand;
+typedef struct _ModelClipFileDeleteCommandClass ModelClipFileDeleteCommandClass;
+typedef struct _ModelClipFileDeleteCommandPrivate ModelClipFileDeleteCommandPrivate;
+
+#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_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_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+
+#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;
+typedef struct _ModelClipTrimCommandPrivate ModelClipTrimCommandPrivate;
+
+#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;
+typedef struct _ModelClipRevertCommandPrivate ModelClipRevertCommandPrivate;
+
+#define MODEL_TYPE_TIME_SIGNATURE_COMMAND (model_time_signature_command_get_type ())
+#define MODEL_TIME_SIGNATURE_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TIME_SIGNATURE_COMMAND, ModelTimeSignatureCommand))
+#define MODEL_TIME_SIGNATURE_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_TIME_SIGNATURE_COMMAND, ModelTimeSignatureCommandClass))
+#define MODEL_IS_TIME_SIGNATURE_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TIME_SIGNATURE_COMMAND))
+#define MODEL_IS_TIME_SIGNATURE_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_TIME_SIGNATURE_COMMAND))
+#define MODEL_TIME_SIGNATURE_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_TIME_SIGNATURE_COMMAND, ModelTimeSignatureCommandClass))
+
+typedef struct _ModelTimeSignatureCommand ModelTimeSignatureCommand;
+typedef struct _ModelTimeSignatureCommandClass ModelTimeSignatureCommandClass;
+typedef struct _ModelTimeSignatureCommandPrivate ModelTimeSignatureCommandPrivate;
+
+#define TYPE_FRACTION (fraction_get_type ())
+typedef struct _Fraction Fraction;
+
+#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 MODEL_TYPE_BPM_COMMAND (model_bpm_command_get_type ())
+#define MODEL_BPM_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_BPM_COMMAND, ModelBpmCommand))
+#define MODEL_BPM_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_BPM_COMMAND, ModelBpmCommandClass))
+#define MODEL_IS_BPM_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_BPM_COMMAND))
+#define MODEL_IS_BPM_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_BPM_COMMAND))
+#define MODEL_BPM_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_BPM_COMMAND, ModelBpmCommandClass))
+
+typedef struct _ModelBpmCommand ModelBpmCommand;
+typedef struct _ModelBpmCommandClass ModelBpmCommandClass;
+typedef struct _ModelBpmCommandPrivate ModelBpmCommandPrivate;
+
+#define MODEL_TYPE_ADD_CLIP_COMMAND (model_add_clip_command_get_type ())
+#define MODEL_ADD_CLIP_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_ADD_CLIP_COMMAND, ModelAddClipCommand))
+#define MODEL_ADD_CLIP_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_ADD_CLIP_COMMAND, ModelAddClipCommandClass))
+#define MODEL_IS_ADD_CLIP_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_ADD_CLIP_COMMAND))
+#define MODEL_IS_ADD_CLIP_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_ADD_CLIP_COMMAND))
+#define MODEL_ADD_CLIP_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_ADD_CLIP_COMMAND, ModelAddClipCommandClass))
+
+typedef struct _ModelAddClipCommand ModelAddClipCommand;
+typedef struct _ModelAddClipCommandClass ModelAddClipCommandClass;
+typedef struct _ModelAddClipCommandPrivate ModelAddClipCommandPrivate;
+
+#define MODEL_TYPE_TRANSACTION_COMMAND (model_transaction_command_get_type ())
+#define MODEL_TRANSACTION_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TRANSACTION_COMMAND, ModelTransactionCommand))
+#define MODEL_TRANSACTION_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_TRANSACTION_COMMAND, ModelTransactionCommandClass))
+#define MODEL_IS_TRANSACTION_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TRANSACTION_COMMAND))
+#define MODEL_IS_TRANSACTION_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_TRANSACTION_COMMAND))
+#define MODEL_TRANSACTION_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_TRANSACTION_COMMAND, ModelTransactionCommandClass))
+
+typedef struct _ModelTransactionCommand ModelTransactionCommand;
+typedef struct _ModelTransactionCommandClass ModelTransactionCommandClass;
+typedef struct _ModelTransactionCommandPrivate ModelTransactionCommandPrivate;
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+struct _ModelCommand {
+       GTypeInstance parent_instance;
+       volatile int ref_count;
+       ModelCommandPrivate * priv;
+};
+
+struct _ModelCommandClass {
+       GTypeClass parent_class;
+       void (*finalize) (ModelCommand *self);
+       void (*apply) (ModelCommand* self);
+       void (*undo) (ModelCommand* self);
+       gboolean (*merge) (ModelCommand* self, ModelCommand* command);
+       char* (*description) (ModelCommand* self);
+};
+
+struct _ModelParamSpecCommand {
+       GParamSpec parent_instance;
+};
+
+typedef enum  {
+       MODEL_PARAMETER_PAN,
+       MODEL_PARAMETER_VOLUME
+} ModelParameter;
+
+struct _ModelParameterCommand {
+       ModelCommand parent_instance;
+       ModelParameterCommandPrivate * priv;
+};
+
+struct _ModelParameterCommandClass {
+       ModelCommandClass parent_class;
+};
+
+struct _ModelParameterCommandPrivate {
+       ModelAudioTrack* target;
+       ModelParameter parameter;
+       double delta;
+};
+
+struct _ModelClipCommand {
+       ModelCommand parent_instance;
+       ModelClipCommandPrivate * priv;
+};
+
+struct _ModelClipCommandClass {
+       ModelCommandClass parent_class;
+};
+
+typedef enum  {
+       MODEL_CLIP_COMMAND_ACTION_APPEND,
+       MODEL_CLIP_COMMAND_ACTION_DELETE
+} ModelClipCommandAction;
+
+struct _ModelClipCommandPrivate {
+       ModelTrack* track;
+       ModelClip* clip;
+       gint64 time;
+       ModelClipCommandAction action;
+       gint index;
+       gboolean select;
+};
+
+struct _ModelClipAddCommand {
+       ModelCommand parent_instance;
+       ModelClipAddCommandPrivate * priv;
+};
+
+struct _ModelClipAddCommandClass {
+       ModelCommandClass parent_class;
+};
+
+struct _ModelClipAddCommandPrivate {
+       ModelTrack* track;
+       ModelClip* clip;
+       gint64 delta;
+};
+
+struct _ModelClipSplitCommand {
+       ModelCommand parent_instance;
+       ModelClipSplitCommandPrivate * priv;
+};
+
+struct _ModelClipSplitCommandClass {
+       ModelCommandClass parent_class;
+};
+
+struct _ModelClipSplitCommandPrivate {
+       ModelTrack* track;
+       gint64 time;
+       gboolean do_split;
+};
+
+typedef enum  {
+       MODEL_CLIP_SPLIT_COMMAND_ACTION_SPLIT,
+       MODEL_CLIP_SPLIT_COMMAND_ACTION_JOIN
+} ModelClipSplitCommandAction;
+
+struct _ModelClipFileDeleteCommand {
+       ModelCommand parent_instance;
+       ModelClipFileDeleteCommandPrivate * priv;
+};
+
+struct _ModelClipFileDeleteCommandClass {
+       ModelCommandClass parent_class;
+};
+
+struct _ModelClipFileDeleteCommandPrivate {
+       ModelClipFile* clipfile;
+       ModelProject* project;
+};
+
+struct _ModelClipTrimCommand {
+       ModelCommand parent_instance;
+       ModelClipTrimCommandPrivate * priv;
+};
+
+struct _ModelClipTrimCommandClass {
+       ModelCommandClass parent_class;
+};
+
+struct _ModelClipTrimCommandPrivate {
+       ModelTrack* track;
+       ModelClip* clip;
+       gint64 delta;
+       GdkWindowEdge edge;
+};
+
+struct _ModelClipRevertCommand {
+       ModelCommand parent_instance;
+       ModelClipRevertCommandPrivate * priv;
+};
+
+struct _ModelClipRevertCommandClass {
+       ModelCommandClass parent_class;
+};
+
+struct _ModelClipRevertCommandPrivate {
+       ModelTrack* track;
+       ModelClip* clip;
+       gint64 left_delta;
+       gint64 right_delta;
+};
+
+struct _ModelTimeSignatureCommand {
+       ModelCommand parent_instance;
+       ModelTimeSignatureCommandPrivate * priv;
+};
+
+struct _ModelTimeSignatureCommandClass {
+       ModelCommandClass parent_class;
+};
+
+struct _Fraction {
+       gint numerator;
+       gint denominator;
+};
+
+struct _ModelTimeSignatureCommandPrivate {
+       Fraction new_time_signature;
+       Fraction old_time_signature;
+       ModelProject* project;
+};
+
+struct _ModelTempoInformationIface {
+       GTypeInterface parent_iface;
+       void (*get_time_signature) (ModelTempoInformation* self, Fraction* result);
+       gint (*get_bpm) (ModelTempoInformation* self);
+};
+
+struct _ModelBpmCommand {
+       ModelCommand parent_instance;
+       ModelBpmCommandPrivate * priv;
+};
+
+struct _ModelBpmCommandClass {
+       ModelCommandClass parent_class;
+};
+
+struct _ModelBpmCommandPrivate {
+       gint delta;
+       ModelProject* project;
+};
+
+struct _ModelAddClipCommand {
+       ModelCommand parent_instance;
+       ModelAddClipCommandPrivate * priv;
+};
+
+struct _ModelAddClipCommandClass {
+       ModelCommandClass parent_class;
+};
+
+struct _ModelAddClipCommandPrivate {
+       ModelClipFile* clip_file;
+       ModelProject* project;
+};
+
+struct _ModelTransactionCommand {
+       ModelCommand parent_instance;
+       ModelTransactionCommandPrivate * priv;
+};
+
+struct _ModelTransactionCommandClass {
+       ModelCommandClass parent_class;
+};
+
+struct _ModelTransactionCommandPrivate {
+       gboolean open;
+       char* transaction_description;
+};
+
+
+static gpointer model_command_parent_class = NULL;
+static gpointer model_parameter_command_parent_class = NULL;
+static gpointer model_clip_command_parent_class = NULL;
+static gpointer model_clip_add_command_parent_class = NULL;
+static gpointer model_clip_split_command_parent_class = NULL;
+static gpointer model_clip_file_delete_command_parent_class = NULL;
+static gpointer model_clip_trim_command_parent_class = NULL;
+static gpointer model_clip_revert_command_parent_class = NULL;
+static gpointer model_time_signature_command_parent_class = NULL;
+static gpointer model_bpm_command_parent_class = NULL;
+static gpointer model_add_clip_command_parent_class = NULL;
+static gpointer model_transaction_command_parent_class = NULL;
+
+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);
+enum  {
+       MODEL_COMMAND_DUMMY_PROPERTY
+};
+void model_command_apply (ModelCommand* self);
+static void model_command_real_apply (ModelCommand* self);
+void model_command_undo (ModelCommand* self);
+static void model_command_real_undo (ModelCommand* self);
+gboolean model_command_merge (ModelCommand* self, ModelCommand* command);
+static gboolean model_command_real_merge (ModelCommand* self, ModelCommand* command);
+char* model_command_description (ModelCommand* self);
+static char* model_command_real_description (ModelCommand* self);
+ModelCommand* model_command_construct (GType object_type);
+static void model_command_finalize (ModelCommand* obj);
+GType model_parameter_get_type (void);
+GType model_parameter_command_get_type (void);
+GType model_track_get_type (void);
+GType model_audio_track_get_type (void);
+#define MODEL_PARAMETER_COMMAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_PARAMETER_COMMAND, ModelParameterCommandPrivate))
+enum  {
+       MODEL_PARAMETER_COMMAND_DUMMY_PROPERTY
+};
+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);
+void _model_audio_track_set_pan (ModelAudioTrack* self, double new_value);
+double model_audio_track_get_pan (ModelAudioTrack* self);
+void _model_audio_track_set_volume (ModelAudioTrack* self, double new_volume);
+double model_audio_track_get_volume (ModelAudioTrack* self);
+static void model_parameter_command_change_parameter (ModelParameterCommand* self, double amount);
+static void model_parameter_command_real_apply (ModelCommand* base);
+static void model_parameter_command_real_undo (ModelCommand* base);
+static gboolean model_parameter_command_real_merge (ModelCommand* base, ModelCommand* command);
+static char* model_parameter_command_real_description (ModelCommand* base);
+static void model_parameter_command_finalize (ModelCommand* obj);
+GType model_clip_command_get_type (void);
+GType model_clip_get_type (void);
+GType model_clip_command_action_get_type (void);
+#define MODEL_CLIP_COMMAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_CLIP_COMMAND, ModelClipCommandPrivate))
+enum  {
+       MODEL_CLIP_COMMAND_DUMMY_PROPERTY
+};
+gint model_track_get_clip_index (ModelTrack* self, ModelClip* c);
+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);
+void _model_track_append_at_time (ModelTrack* self, ModelClip* c, gint64 time, gboolean select);
+void _model_track_delete_clip (ModelTrack* self, ModelClip* clip);
+static void model_clip_command_real_apply (ModelCommand* base);
+void model_track_add (ModelTrack* self, ModelClip* c, gint64 pos, gboolean select);
+static void model_clip_command_real_undo (ModelCommand* base);
+static gboolean model_clip_command_real_merge (ModelCommand* base, ModelCommand* command);
+static char* model_clip_command_real_description (ModelCommand* base);
+static void model_clip_command_finalize (ModelCommand* obj);
+GType model_clip_add_command_get_type (void);
+#define MODEL_CLIP_ADD_COMMAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_CLIP_ADD_COMMAND, ModelClipAddCommandPrivate))
+enum  {
+       MODEL_CLIP_ADD_COMMAND_DUMMY_PROPERTY
+};
+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);
+void _model_track_move (ModelTrack* self, ModelClip* c, gint64 pos);
+gint64 model_clip_get_start (ModelClip* self);
+static void model_clip_add_command_real_apply (ModelCommand* base);
+void model_track_remove_clip_from_array (ModelTrack* self, ModelClip* pos);
+static void model_clip_add_command_real_undo (ModelCommand* base);
+static gboolean model_clip_add_command_real_merge (ModelCommand* base, ModelCommand* command);
+static char* model_clip_add_command_real_description (ModelCommand* base);
+static void model_clip_add_command_finalize (ModelCommand* obj);
+GType model_clip_split_command_get_type (void);
+#define MODEL_CLIP_SPLIT_COMMAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_CLIP_SPLIT_COMMAND, ModelClipSplitCommandPrivate))
+enum  {
+       MODEL_CLIP_SPLIT_COMMAND_DUMMY_PROPERTY
+};
+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);
+void _model_track_split_at (ModelTrack* self, gint64 position);
+void _model_track_join (ModelTrack* self, gint64 position);
+static void model_clip_split_command_real_apply (ModelCommand* base);
+static void model_clip_split_command_real_undo (ModelCommand* base);
+static gboolean model_clip_split_command_real_merge (ModelCommand* base, ModelCommand* command);
+static char* model_clip_split_command_real_description (ModelCommand* base);
+static void model_clip_split_command_finalize (ModelCommand* obj);
+GType model_clip_file_delete_command_get_type (void);
+GType model_clip_file_get_type (void);
+GType model_project_get_type (void);
+#define MODEL_CLIP_FILE_DELETE_COMMAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_CLIP_FILE_DELETE_COMMAND, ModelClipFileDeleteCommandPrivate))
+enum  {
+       MODEL_CLIP_FILE_DELETE_COMMAND_DUMMY_PROPERTY
+};
+ModelClipFileDeleteCommand* model_clip_file_delete_command_new (ModelProject* p, ModelClipFile* cf);
+ModelClipFileDeleteCommand* model_clip_file_delete_command_construct (GType object_type, ModelProject* p, ModelClipFile* cf);
+void _model_project_remove_clipfile (ModelProject* self, ModelClipFile* cf);
+static void model_clip_file_delete_command_real_apply (ModelCommand* base);
+void _model_project_add_clipfile (ModelProject* self, ModelClipFile* clipfile, GError** error);
+static void model_clip_file_delete_command_real_undo (ModelCommand* base);
+static gboolean model_clip_file_delete_command_real_merge (ModelCommand* base, ModelCommand* command);
+static char* model_clip_file_delete_command_real_description (ModelCommand* base);
+static void model_clip_file_delete_command_finalize (ModelCommand* obj);
+GType model_clip_trim_command_get_type (void);
+#define MODEL_CLIP_TRIM_COMMAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_CLIP_TRIM_COMMAND, ModelClipTrimCommandPrivate))
+enum  {
+       MODEL_CLIP_TRIM_COMMAND_DUMMY_PROPERTY
+};
+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);
+void _model_track_trim (ModelTrack* self, ModelClip* clip, gint64 delta, GdkWindowEdge edge);
+static void model_clip_trim_command_real_apply (ModelCommand* base);
+static void model_clip_trim_command_real_undo (ModelCommand* base);
+static gboolean model_clip_trim_command_real_merge (ModelCommand* base, ModelCommand* command);
+static char* model_clip_trim_command_real_description (ModelCommand* base);
+static void model_clip_trim_command_finalize (ModelCommand* obj);
+GType model_clip_revert_command_get_type (void);
+#define MODEL_CLIP_REVERT_COMMAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_CLIP_REVERT_COMMAND, ModelClipRevertCommandPrivate))
+enum  {
+       MODEL_CLIP_REVERT_COMMAND_DUMMY_PROPERTY
+};
+ModelClipRevertCommand* model_clip_revert_command_new (ModelTrack* track, ModelClip* clip);
+ModelClipRevertCommand* model_clip_revert_command_construct (GType object_type, ModelTrack* track, ModelClip* clip);
+gint64 model_clip_get_end (ModelClip* self);
+gint64 model_clip_get_media_start (ModelClip* self);
+void _model_track_revert_to_original (ModelTrack* self, ModelClip* c);
+static void model_clip_revert_command_real_apply (ModelCommand* base);
+static void model_clip_revert_command_real_undo (ModelCommand* base);
+static gboolean model_clip_revert_command_real_merge (ModelCommand* base, ModelCommand* command);
+static char* model_clip_revert_command_real_description (ModelCommand* base);
+static void model_clip_revert_command_finalize (ModelCommand* obj);
+GType model_time_signature_command_get_type (void);
+GType fraction_get_type (void);
+Fraction* fraction_dup (const Fraction* self);
+void fraction_free (Fraction* self);
+#define MODEL_TIME_SIGNATURE_COMMAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_TIME_SIGNATURE_COMMAND, ModelTimeSignatureCommandPrivate))
+enum  {
+       MODEL_TIME_SIGNATURE_COMMAND_DUMMY_PROPERTY
+};
+GType model_tempo_information_get_type (void);
+void model_tempo_information_get_time_signature (ModelTempoInformation* self, Fraction* result);
+ModelTimeSignatureCommand* model_time_signature_command_new (ModelProject* project, Fraction* new_time_signature);
+ModelTimeSignatureCommand* model_time_signature_command_construct (GType object_type, ModelProject* project, Fraction* new_time_signature);
+void _model_project_set_time_signature (ModelProject* self, Fraction* time_signature);
+static void model_time_signature_command_real_apply (ModelCommand* base);
+static void model_time_signature_command_real_undo (ModelCommand* base);
+static gboolean model_time_signature_command_real_merge (ModelCommand* base, ModelCommand* command);
+static char* model_time_signature_command_real_description (ModelCommand* base);
+static void model_time_signature_command_finalize (ModelCommand* obj);
+GType model_bpm_command_get_type (void);
+#define MODEL_BPM_COMMAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_BPM_COMMAND, ModelBpmCommandPrivate))
+enum  {
+       MODEL_BPM_COMMAND_DUMMY_PROPERTY
+};
+gint model_tempo_information_get_bpm (ModelTempoInformation* self);
+ModelBpmCommand* model_bpm_command_new (ModelProject* project, gint new_bpm);
+ModelBpmCommand* model_bpm_command_construct (GType object_type, ModelProject* project, gint new_bpm);
+void _model_project_set_bpm (ModelProject* self, gint bpm);
+static void model_bpm_command_real_apply (ModelCommand* base);
+static void model_bpm_command_real_undo (ModelCommand* base);
+static gboolean model_bpm_command_real_merge (ModelCommand* base, ModelCommand* command);
+static char* model_bpm_command_real_description (ModelCommand* base);
+static void model_bpm_command_finalize (ModelCommand* obj);
+GType model_add_clip_command_get_type (void);
+#define MODEL_ADD_CLIP_COMMAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_ADD_CLIP_COMMAND, ModelAddClipCommandPrivate))
+enum  {
+       MODEL_ADD_CLIP_COMMAND_DUMMY_PROPERTY
+};
+ModelAddClipCommand* model_add_clip_command_new (ModelProject* project, ModelClipFile* clip_file);
+ModelAddClipCommand* model_add_clip_command_construct (GType object_type, ModelProject* project, ModelClipFile* clip_file);
+static void model_add_clip_command_real_apply (ModelCommand* base);
+static void model_add_clip_command_real_undo (ModelCommand* base);
+static gboolean model_add_clip_command_real_merge (ModelCommand* base, ModelCommand* command);
+static char* model_add_clip_command_real_description (ModelCommand* base);
+static void model_add_clip_command_finalize (ModelCommand* obj);
+GType model_transaction_command_get_type (void);
+#define MODEL_TRANSACTION_COMMAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_TRANSACTION_COMMAND, ModelTransactionCommandPrivate))
+enum  {
+       MODEL_TRANSACTION_COMMAND_DUMMY_PROPERTY
+};
+ModelTransactionCommand* model_transaction_command_new (gboolean open, const char* transaction_description);
+ModelTransactionCommand* model_transaction_command_construct (GType object_type, gboolean open, const char* transaction_description);
+gboolean model_transaction_command_in_transaction (ModelTransactionCommand* self);
+static void model_transaction_command_real_apply (ModelCommand* base);
+static void model_transaction_command_real_undo (ModelCommand* base);
+static gboolean model_transaction_command_real_merge (ModelCommand* base, ModelCommand* command);
+static char* model_transaction_command_real_description (ModelCommand* base);
+static void model_transaction_command_finalize (ModelCommand* obj);
+
+
+
+#line 9 "command.vala"
+static void model_command_real_apply (ModelCommand* self) {
+#line 644 "command.c"
+       g_return_if_fail (MODEL_IS_COMMAND (self));
+       g_critical ("Type `%s' does not implement abstract method `model_command_apply'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+       return;
+}
+
+
+#line 9 "command.vala"
+void model_command_apply (ModelCommand* self) {
+#line 9 "command.vala"
+       MODEL_COMMAND_GET_CLASS (self)->apply (self);
+#line 655 "command.c"
+}
+
+
+#line 10 "command.vala"
+static void model_command_real_undo (ModelCommand* self) {
+#line 661 "command.c"
+       g_return_if_fail (MODEL_IS_COMMAND (self));
+       g_critical ("Type `%s' does not implement abstract method `model_command_undo'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+       return;
+}
+
+
+#line 10 "command.vala"
+void model_command_undo (ModelCommand* self) {
+#line 10 "command.vala"
+       MODEL_COMMAND_GET_CLASS (self)->undo (self);
+#line 672 "command.c"
+}
+
+
+#line 11 "command.vala"
+static gboolean model_command_real_merge (ModelCommand* self, ModelCommand* command) {
+#line 678 "command.c"
+       g_return_val_if_fail (MODEL_IS_COMMAND (self), FALSE);
+       g_critical ("Type `%s' does not implement abstract method `model_command_merge'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+       return FALSE;
+}
+
+
+#line 11 "command.vala"
+gboolean model_command_merge (ModelCommand* self, ModelCommand* command) {
+#line 11 "command.vala"
+       return MODEL_COMMAND_GET_CLASS (self)->merge (self, command);
+#line 689 "command.c"
+}
+
+
+#line 12 "command.vala"
+static char* model_command_real_description (ModelCommand* self) {
+#line 695 "command.c"
+       g_return_val_if_fail (MODEL_IS_COMMAND (self), NULL);
+       g_critical ("Type `%s' does not implement abstract method `model_command_description'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+       return NULL;
+}
+
+
+#line 12 "command.vala"
+char* model_command_description (ModelCommand* self) {
+#line 12 "command.vala"
+       return MODEL_COMMAND_GET_CLASS (self)->description (self);
+#line 706 "command.c"
+}
+
+
+#line 8 "command.vala"
+ModelCommand* model_command_construct (GType object_type) {
+#line 712 "command.c"
+       ModelCommand* self;
+       self = (ModelCommand*) g_type_create_instance (object_type);
+       return self;
+}
+
+
+static void model_value_command_init (GValue* value) {
+       value->data[0].v_pointer = NULL;
+}
+
+
+static void model_value_command_free_value (GValue* value) {
+       if (value->data[0].v_pointer) {
+               model_command_unref (value->data[0].v_pointer);
+       }
+}
+
+
+static void model_value_command_copy_value (const GValue* src_value, GValue* dest_value) {
+       if (src_value->data[0].v_pointer) {
+               dest_value->data[0].v_pointer = model_command_ref (src_value->data[0].v_pointer);
+       } else {
+               dest_value->data[0].v_pointer = NULL;
+       }
+}
+
+
+static gpointer model_value_command_peek_pointer (const GValue* value) {
+       return value->data[0].v_pointer;
+}
+
+
+static gchar* model_value_command_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+       if (collect_values[0].v_pointer) {
+               ModelCommand* object;
+               object = collect_values[0].v_pointer;
+               if (object->parent_instance.g_class == NULL) {
+                       return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+               } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+                       return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+               }
+               value->data[0].v_pointer = model_command_ref (object);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       return NULL;
+}
+
+
+static gchar* model_value_command_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+       ModelCommand** object_p;
+       object_p = collect_values[0].v_pointer;
+       if (!object_p) {
+               return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+       }
+       if (!value->data[0].v_pointer) {
+               *object_p = NULL;
+       } else if (collect_flags && G_VALUE_NOCOPY_CONTENTS) {
+               *object_p = value->data[0].v_pointer;
+       } else {
+               *object_p = model_command_ref (value->data[0].v_pointer);
+       }
+       return NULL;
+}
+
+
+GParamSpec* model_param_spec_command (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+       ModelParamSpecCommand* spec;
+       g_return_val_if_fail (g_type_is_a (object_type, MODEL_TYPE_COMMAND), NULL);
+       spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+       G_PARAM_SPEC (spec)->value_type = object_type;
+       return G_PARAM_SPEC (spec);
+}
+
+
+gpointer model_value_get_command (const GValue* value) {
+       g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_COMMAND), NULL);
+       return value->data[0].v_pointer;
+}
+
+
+void model_value_set_command (GValue* value, gpointer v_object) {
+       ModelCommand* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_COMMAND));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, MODEL_TYPE_COMMAND));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+               value->data[0].v_pointer = v_object;
+               model_command_ref (value->data[0].v_pointer);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               model_command_unref (old);
+       }
+}
+
+
+void model_value_take_command (GValue* value, gpointer v_object) {
+       ModelCommand* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_COMMAND));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, MODEL_TYPE_COMMAND));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+               value->data[0].v_pointer = v_object;
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               model_command_unref (old);
+       }
+}
+
+
+static void model_command_class_init (ModelCommandClass * klass) {
+       model_command_parent_class = g_type_class_peek_parent (klass);
+       MODEL_COMMAND_CLASS (klass)->finalize = model_command_finalize;
+       MODEL_COMMAND_CLASS (klass)->apply = model_command_real_apply;
+       MODEL_COMMAND_CLASS (klass)->undo = model_command_real_undo;
+       MODEL_COMMAND_CLASS (klass)->merge = model_command_real_merge;
+       MODEL_COMMAND_CLASS (klass)->description = model_command_real_description;
+}
+
+
+static void model_command_instance_init (ModelCommand * self) {
+       self->ref_count = 1;
+}
+
+
+static void model_command_finalize (ModelCommand* obj) {
+       ModelCommand * self;
+       self = MODEL_COMMAND (obj);
+}
+
+
+GType model_command_get_type (void) {
+       static volatile gsize model_command_type_id__volatile = 0;
+       if (g_once_init_enter (&model_command_type_id__volatile)) {
+               static const GTypeValueTable g_define_type_value_table = { model_value_command_init, model_value_command_free_value, model_value_command_copy_value, model_value_command_peek_pointer, "p", model_value_command_collect_value, "p", model_value_command_lcopy_value };
+               static const GTypeInfo g_define_type_info = { sizeof (ModelCommandClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_command_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelCommand), 0, (GInstanceInitFunc) model_command_instance_init, &g_define_type_value_table };
+               static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+               GType model_command_type_id;
+               model_command_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ModelCommand", &g_define_type_info, &g_define_type_fundamental_info, G_TYPE_FLAG_ABSTRACT);
+               g_once_init_leave (&model_command_type_id__volatile, model_command_type_id);
+       }
+       return model_command_type_id__volatile;
+}
+
+
+gpointer model_command_ref (gpointer instance) {
+       ModelCommand* self;
+       self = instance;
+       g_atomic_int_inc (&self->ref_count);
+       return instance;
+}
+
+
+void model_command_unref (gpointer instance) {
+       ModelCommand* self;
+       self = instance;
+       if (g_atomic_int_dec_and_test (&self->ref_count)) {
+               MODEL_COMMAND_GET_CLASS (self)->finalize (self);
+               g_type_free_instance ((GTypeInstance *) self);
+       }
+}
+
+
+GType model_parameter_get_type (void) {
+       static volatile gsize model_parameter_type_id__volatile = 0;
+       if (g_once_init_enter (&model_parameter_type_id__volatile)) {
+               static const GEnumValue values[] = {{MODEL_PARAMETER_PAN, "MODEL_PARAMETER_PAN", "pan"}, {MODEL_PARAMETER_VOLUME, "MODEL_PARAMETER_VOLUME", "volume"}, {0, NULL, NULL}};
+               GType model_parameter_type_id;
+               model_parameter_type_id = g_enum_register_static ("ModelParameter", values);
+               g_once_init_leave (&model_parameter_type_id__volatile, model_parameter_type_id);
+       }
+       return model_parameter_type_id__volatile;
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+#line 22 "command.vala"
+ModelParameterCommand* model_parameter_command_construct (GType object_type, ModelAudioTrack* target, ModelParameter parameter, double new_value, double old_value) {
+#line 901 "command.c"
+       ModelParameterCommand* self;
+       ModelAudioTrack* _tmp0_;
+#line 22 "command.vala"
+       g_return_val_if_fail (MODEL_IS_AUDIO_TRACK (target), NULL);
+#line 22 "command.vala"
+       self = (ModelParameterCommand*) model_command_construct (object_type);
+#line 24 "command.vala"
+       self->priv->target = (_tmp0_ = _g_object_ref0 (target), _g_object_unref0 (self->priv->target), _tmp0_);
+#line 25 "command.vala"
+       self->priv->parameter = parameter;
+#line 26 "command.vala"
+       self->priv->delta = new_value - old_value;
+#line 914 "command.c"
+       return self;
+}
+
+
+#line 22 "command.vala"
+ModelParameterCommand* model_parameter_command_new (ModelAudioTrack* target, ModelParameter parameter, double new_value, double old_value) {
+#line 22 "command.vala"
+       return model_parameter_command_construct (MODEL_TYPE_PARAMETER_COMMAND, target, parameter, new_value, old_value);
+#line 923 "command.c"
+}
+
+
+#line 29 "command.vala"
+static void model_parameter_command_change_parameter (ModelParameterCommand* self, double amount) {
+#line 29 "command.vala"
+       g_return_if_fail (MODEL_IS_PARAMETER_COMMAND (self));
+#line 30 "command.vala"
+       switch (self->priv->parameter) {
+#line 933 "command.c"
+               case MODEL_PARAMETER_PAN:
+               {
+#line 32 "command.vala"
+                       _model_audio_track_set_pan (self->priv->target, model_audio_track_get_pan (self->priv->target) + amount);
+#line 33 "command.vala"
+                       break;
+#line 940 "command.c"
+               }
+               case MODEL_PARAMETER_VOLUME:
+               {
+#line 35 "command.vala"
+                       _model_audio_track_set_volume (self->priv->target, model_audio_track_get_volume (self->priv->target) + amount);
+#line 36 "command.vala"
+                       break;
+#line 948 "command.c"
+               }
+       }
+}
+
+
+#line 40 "command.vala"
+static void model_parameter_command_real_apply (ModelCommand* base) {
+#line 956 "command.c"
+       ModelParameterCommand * self;
+       self = MODEL_PARAMETER_COMMAND (base);
+#line 41 "command.vala"
+       model_parameter_command_change_parameter (self, self->priv->delta);
+#line 961 "command.c"
+}
+
+
+#line 44 "command.vala"
+static void model_parameter_command_real_undo (ModelCommand* base) {
+#line 967 "command.c"
+       ModelParameterCommand * self;
+       self = MODEL_PARAMETER_COMMAND (base);
+#line 45 "command.vala"
+       model_parameter_command_change_parameter (self, -self->priv->delta);
+#line 972 "command.c"
+}
+
+
+static gpointer _model_command_ref0 (gpointer self) {
+       return self ? model_command_ref (self) : NULL;
+}
+
+
+#line 48 "command.vala"
+static gboolean model_parameter_command_real_merge (ModelCommand* base, ModelCommand* command) {
+#line 983 "command.c"
+       ModelParameterCommand * self;
+       gboolean result = FALSE;
+       ModelCommand* _tmp0_;
+       ModelParameterCommand* parameter_command;
+       gboolean _tmp1_ = FALSE;
+       self = MODEL_PARAMETER_COMMAND (base);
+#line 48 "command.vala"
+       g_return_val_if_fail (MODEL_IS_COMMAND (command), FALSE);
+#line 49 "command.vala"
+       parameter_command = _model_command_ref0 ((_tmp0_ = command, MODEL_IS_PARAMETER_COMMAND (_tmp0_) ? ((ModelParameterCommand*) _tmp0_) : NULL));
+#line 50 "command.vala"
+       if (parameter_command != NULL) {
+#line 50 "command.vala"
+               _tmp1_ = parameter_command->priv->parameter == self->priv->parameter;
+#line 998 "command.c"
+       } else {
+#line 50 "command.vala"
+               _tmp1_ = FALSE;
+#line 1002 "command.c"
+       }
+#line 50 "command.vala"
+       if (_tmp1_) {
+#line 51 "command.vala"
+               self->priv->delta = self->priv->delta + parameter_command->priv->delta;
+#line 1008 "command.c"
+               result = TRUE;
+               _model_command_unref0 (parameter_command);
+#line 52 "command.vala"
+               return result;
+#line 1013 "command.c"
+       }
+       result = FALSE;
+       _model_command_unref0 (parameter_command);
+#line 54 "command.vala"
+       return result;
+#line 1019 "command.c"
+}
+
+
+#line 57 "command.vala"
+static char* model_parameter_command_real_description (ModelCommand* base) {
+#line 1025 "command.c"
+       ModelParameterCommand * self;
+       char* result = NULL;
+       self = MODEL_PARAMETER_COMMAND (base);
+#line 58 "command.vala"
+       switch (self->priv->parameter) {
+#line 1031 "command.c"
+               case MODEL_PARAMETER_PAN:
+               {
+                       result = g_strdup ("Adjust Pan");
+#line 60 "command.vala"
+                       return result;
+#line 1037 "command.c"
+               }
+               case MODEL_PARAMETER_VOLUME:
+               {
+                       result = g_strdup ("Adjust Level");
+#line 62 "command.vala"
+                       return result;
+#line 1044 "command.c"
+               }
+               default:
+               {
+#line 64 "command.vala"
+                       g_assert (FALSE);
+#line 1050 "command.c"
+                       result = g_strdup ("");
+#line 65 "command.vala"
+                       return result;
+#line 1054 "command.c"
+               }
+       }
+}
+
+
+static void model_parameter_command_class_init (ModelParameterCommandClass * klass) {
+       model_parameter_command_parent_class = g_type_class_peek_parent (klass);
+       MODEL_COMMAND_CLASS (klass)->finalize = model_parameter_command_finalize;
+       g_type_class_add_private (klass, sizeof (ModelParameterCommandPrivate));
+       MODEL_COMMAND_CLASS (klass)->apply = model_parameter_command_real_apply;
+       MODEL_COMMAND_CLASS (klass)->undo = model_parameter_command_real_undo;
+       MODEL_COMMAND_CLASS (klass)->merge = model_parameter_command_real_merge;
+       MODEL_COMMAND_CLASS (klass)->description = model_parameter_command_real_description;
+}
+
+
+static void model_parameter_command_instance_init (ModelParameterCommand * self) {
+       self->priv = MODEL_PARAMETER_COMMAND_GET_PRIVATE (self);
+}
+
+
+static void model_parameter_command_finalize (ModelCommand* obj) {
+       ModelParameterCommand * self;
+       self = MODEL_PARAMETER_COMMAND (obj);
+       _g_object_unref0 (self->priv->target);
+       MODEL_COMMAND_CLASS (model_parameter_command_parent_class)->finalize (obj);
+}
+
+
+GType model_parameter_command_get_type (void) {
+       static volatile gsize model_parameter_command_type_id__volatile = 0;
+       if (g_once_init_enter (&model_parameter_command_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelParameterCommandClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_parameter_command_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelParameterCommand), 0, (GInstanceInitFunc) model_parameter_command_instance_init, NULL };
+               GType model_parameter_command_type_id;
+               model_parameter_command_type_id = g_type_register_static (MODEL_TYPE_COMMAND, "ModelParameterCommand", &g_define_type_info, 0);
+               g_once_init_leave (&model_parameter_command_type_id__volatile, model_parameter_command_type_id);
+       }
+       return model_parameter_command_type_id__volatile;
+}
+
+
+GType model_clip_command_action_get_type (void) {
+       static volatile gsize model_clip_command_action_type_id__volatile = 0;
+       if (g_once_init_enter (&model_clip_command_action_type_id__volatile)) {
+               static const GEnumValue values[] = {{MODEL_CLIP_COMMAND_ACTION_APPEND, "MODEL_CLIP_COMMAND_ACTION_APPEND", "append"}, {MODEL_CLIP_COMMAND_ACTION_DELETE, "MODEL_CLIP_COMMAND_ACTION_DELETE", "delete"}, {0, NULL, NULL}};
+               GType model_clip_command_action_type_id;
+               model_clip_command_action_type_id = g_enum_register_static ("ModelClipCommandAction", values);
+               g_once_init_leave (&model_clip_command_action_type_id__volatile, model_clip_command_action_type_id);
+       }
+       return model_clip_command_action_type_id__volatile;
+}
+
+
+#line 79 "command.vala"
+ModelClipCommand* model_clip_command_construct (GType object_type, ModelClipCommandAction action, ModelTrack* track, ModelClip* clip, gint64 time, gboolean select) {
+#line 1110 "command.c"
+       ModelClipCommand* self;
+       ModelTrack* _tmp0_;
+       ModelClip* _tmp1_;
+#line 79 "command.vala"
+       g_return_val_if_fail (MODEL_IS_TRACK (track), NULL);
+#line 79 "command.vala"
+       g_return_val_if_fail (MODEL_IS_CLIP (clip), NULL);
+#line 79 "command.vala"
+       self = (ModelClipCommand*) model_command_construct (object_type);
+#line 80 "command.vala"
+       self->priv->track = (_tmp0_ = _g_object_ref0 (track), _g_object_unref0 (self->priv->track), _tmp0_);
+#line 81 "command.vala"
+       self->priv->clip = (_tmp1_ = _g_object_ref0 (clip), _g_object_unref0 (self->priv->clip), _tmp1_);
+#line 82 "command.vala"
+       self->priv->time = time;
+#line 83 "command.vala"
+       self->priv->action = action;
+#line 84 "command.vala"
+       self->priv->select = select;
+#line 85 "command.vala"
+       self->priv->index = model_track_get_clip_index (track, clip);
+#line 1132 "command.c"
+       return self;
+}
+
+
+#line 79 "command.vala"
+ModelClipCommand* model_clip_command_new (ModelClipCommandAction action, ModelTrack* track, ModelClip* clip, gint64 time, gboolean select) {
+#line 79 "command.vala"
+       return model_clip_command_construct (MODEL_TYPE_CLIP_COMMAND, action, track, clip, time, select);
+#line 1141 "command.c"
+}
+
+
+#line 88 "command.vala"
+static void model_clip_command_real_apply (ModelCommand* base) {
+#line 1147 "command.c"
+       ModelClipCommand * self;
+       self = MODEL_CLIP_COMMAND (base);
+#line 89 "command.vala"
+       switch (self->priv->action) {
+#line 1152 "command.c"
+               case MODEL_CLIP_COMMAND_ACTION_APPEND:
+               {
+#line 91 "command.vala"
+                       _model_track_append_at_time (self->priv->track, self->priv->clip, self->priv->time, self->priv->select);
+#line 92 "command.vala"
+                       break;
+#line 1159 "command.c"
+               }
+               case MODEL_CLIP_COMMAND_ACTION_DELETE:
+               {
+#line 94 "command.vala"
+                       _model_track_delete_clip (self->priv->track, self->priv->clip);
+#line 95 "command.vala"
+                       break;
+#line 1167 "command.c"
+               }
+               default:
+               {
+#line 97 "command.vala"
+                       g_assert (FALSE);
+#line 98 "command.vala"
+                       break;
+#line 1175 "command.c"
+               }
+       }
+}
+
+
+#line 102 "command.vala"
+static void model_clip_command_real_undo (ModelCommand* base) {
+#line 1183 "command.c"
+       ModelClipCommand * self;
+       self = MODEL_CLIP_COMMAND (base);
+#line 103 "command.vala"
+       switch (self->priv->action) {
+#line 1188 "command.c"
+               case MODEL_CLIP_COMMAND_ACTION_APPEND:
+               {
+#line 105 "command.vala"
+                       _model_track_delete_clip (self->priv->track, self->priv->clip);
+#line 106 "command.vala"
+                       break;
+#line 1195 "command.c"
+               }
+               case MODEL_CLIP_COMMAND_ACTION_DELETE:
+               {
+#line 108 "command.vala"
+                       model_track_add (self->priv->track, self->priv->clip, self->priv->time, FALSE);
+#line 109 "command.vala"
+                       break;
+#line 1203 "command.c"
+               }
+               default:
+               {
+#line 111 "command.vala"
+                       g_assert (FALSE);
+#line 112 "command.vala"
+                       break;
+#line 1211 "command.c"
+               }
+       }
+}
+
+
+#line 116 "command.vala"
+static gboolean model_clip_command_real_merge (ModelCommand* base, ModelCommand* command) {
+#line 1219 "command.c"
+       ModelClipCommand * self;
+       gboolean result = FALSE;
+       self = MODEL_CLIP_COMMAND (base);
+#line 116 "command.vala"
+       g_return_val_if_fail (MODEL_IS_COMMAND (command), FALSE);
+#line 1225 "command.c"
+       result = FALSE;
+#line 117 "command.vala"
+       return result;
+#line 1229 "command.c"
+}
+
+
+#line 120 "command.vala"
+static char* model_clip_command_real_description (ModelCommand* base) {
+#line 1235 "command.c"
+       ModelClipCommand * self;
+       char* result = NULL;
+       self = MODEL_CLIP_COMMAND (base);
+#line 121 "command.vala"
+       switch (self->priv->action) {
+#line 1241 "command.c"
+               case MODEL_CLIP_COMMAND_ACTION_APPEND:
+               {
+                       result = g_strdup ("Create Clip");
+#line 123 "command.vala"
+                       return result;
+#line 1247 "command.c"
+               }
+               case MODEL_CLIP_COMMAND_ACTION_DELETE:
+               {
+                       result = g_strdup ("Delete Clip");
+#line 125 "command.vala"
+                       return result;
+#line 1254 "command.c"
+               }
+               default:
+               {
+#line 127 "command.vala"
+                       g_assert (FALSE);
+#line 1260 "command.c"
+                       result = g_strdup ("");
+#line 128 "command.vala"
+                       return result;
+#line 1264 "command.c"
+               }
+       }
+}
+
+
+static void model_clip_command_class_init (ModelClipCommandClass * klass) {
+       model_clip_command_parent_class = g_type_class_peek_parent (klass);
+       MODEL_COMMAND_CLASS (klass)->finalize = model_clip_command_finalize;
+       g_type_class_add_private (klass, sizeof (ModelClipCommandPrivate));
+       MODEL_COMMAND_CLASS (klass)->apply = model_clip_command_real_apply;
+       MODEL_COMMAND_CLASS (klass)->undo = model_clip_command_real_undo;
+       MODEL_COMMAND_CLASS (klass)->merge = model_clip_command_real_merge;
+       MODEL_COMMAND_CLASS (klass)->description = model_clip_command_real_description;
+}
+
+
+static void model_clip_command_instance_init (ModelClipCommand * self) {
+       self->priv = MODEL_CLIP_COMMAND_GET_PRIVATE (self);
+}
+
+
+static void model_clip_command_finalize (ModelCommand* obj) {
+       ModelClipCommand * self;
+       self = MODEL_CLIP_COMMAND (obj);
+       _g_object_unref0 (self->priv->track);
+       _g_object_unref0 (self->priv->clip);
+       MODEL_COMMAND_CLASS (model_clip_command_parent_class)->finalize (obj);
+}
+
+
+GType model_clip_command_get_type (void) {
+       static volatile gsize model_clip_command_type_id__volatile = 0;
+       if (g_once_init_enter (&model_clip_command_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelClipCommandClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_clip_command_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelClipCommand), 0, (GInstanceInitFunc) model_clip_command_instance_init, NULL };
+               GType model_clip_command_type_id;
+               model_clip_command_type_id = g_type_register_static (MODEL_TYPE_COMMAND, "ModelClipCommand", &g_define_type_info, 0);
+               g_once_init_leave (&model_clip_command_type_id__volatile, model_clip_command_type_id);
+       }
+       return model_clip_command_type_id__volatile;
+}
+
+
+#line 138 "command.vala"
+ModelClipAddCommand* model_clip_add_command_construct (GType object_type, ModelTrack* track, ModelClip* clip, gint64 original_time, gint64 new_start) {
+#line 1309 "command.c"
+       ModelClipAddCommand* self;
+       ModelTrack* _tmp0_;
+       ModelClip* _tmp1_;
+#line 138 "command.vala"
+       g_return_val_if_fail (MODEL_IS_TRACK (track), NULL);
+#line 138 "command.vala"
+       g_return_val_if_fail (MODEL_IS_CLIP (clip), NULL);
+#line 138 "command.vala"
+       self = (ModelClipAddCommand*) model_command_construct (object_type);
+#line 140 "command.vala"
+       self->priv->track = (_tmp0_ = _g_object_ref0 (track), _g_object_unref0 (self->priv->track), _tmp0_);
+#line 141 "command.vala"
+       self->priv->clip = (_tmp1_ = _g_object_ref0 (clip), _g_object_unref0 (self->priv->clip), _tmp1_);
+#line 142 "command.vala"
+       self->priv->delta = new_start - original_time;
+#line 1325 "command.c"
+       return self;
+}
+
+
+#line 138 "command.vala"
+ModelClipAddCommand* model_clip_add_command_new (ModelTrack* track, ModelClip* clip, gint64 original_time, gint64 new_start) {
+#line 138 "command.vala"
+       return model_clip_add_command_construct (MODEL_TYPE_CLIP_ADD_COMMAND, track, clip, original_time, new_start);
+#line 1334 "command.c"
+}
+
+
+#line 145 "command.vala"
+static void model_clip_add_command_real_apply (ModelCommand* base) {
+#line 1340 "command.c"
+       ModelClipAddCommand * self;
+       self = MODEL_CLIP_ADD_COMMAND (base);
+#line 146 "command.vala"
+       _model_track_move (self->priv->track, self->priv->clip, model_clip_get_start (self->priv->clip));
+#line 1345 "command.c"
+}
+
+
+#line 149 "command.vala"
+static void model_clip_add_command_real_undo (ModelCommand* base) {
+#line 1351 "command.c"
+       ModelClipAddCommand * self;
+       self = MODEL_CLIP_ADD_COMMAND (base);
+#line 150 "command.vala"
+       model_track_remove_clip_from_array (self->priv->track, self->priv->clip);
+#line 151 "command.vala"
+       _model_track_move (self->priv->track, self->priv->clip, model_clip_get_start (self->priv->clip) - self->priv->delta);
+#line 1358 "command.c"
+}
+
+
+#line 154 "command.vala"
+static gboolean model_clip_add_command_real_merge (ModelCommand* base, ModelCommand* command) {
+#line 1364 "command.c"
+       ModelClipAddCommand * self;
+       gboolean result = FALSE;
+       self = MODEL_CLIP_ADD_COMMAND (base);
+#line 154 "command.vala"
+       g_return_val_if_fail (MODEL_IS_COMMAND (command), FALSE);
+#line 1370 "command.c"
+       result = FALSE;
+#line 155 "command.vala"
+       return result;
+#line 1374 "command.c"
+}
+
+
+#line 158 "command.vala"
+static char* model_clip_add_command_real_description (ModelCommand* base) {
+#line 1380 "command.c"
+       ModelClipAddCommand * self;
+       char* result = NULL;
+       self = MODEL_CLIP_ADD_COMMAND (base);
+       result = g_strdup ("Move Clip");
+#line 159 "command.vala"
+       return result;
+#line 1387 "command.c"
+}
+
+
+static void model_clip_add_command_class_init (ModelClipAddCommandClass * klass) {
+       model_clip_add_command_parent_class = g_type_class_peek_parent (klass);
+       MODEL_COMMAND_CLASS (klass)->finalize = model_clip_add_command_finalize;
+       g_type_class_add_private (klass, sizeof (ModelClipAddCommandPrivate));
+       MODEL_COMMAND_CLASS (klass)->apply = model_clip_add_command_real_apply;
+       MODEL_COMMAND_CLASS (klass)->undo = model_clip_add_command_real_undo;
+       MODEL_COMMAND_CLASS (klass)->merge = model_clip_add_command_real_merge;
+       MODEL_COMMAND_CLASS (klass)->description = model_clip_add_command_real_description;
+}
+
+
+static void model_clip_add_command_instance_init (ModelClipAddCommand * self) {
+       self->priv = MODEL_CLIP_ADD_COMMAND_GET_PRIVATE (self);
+}
+
+
+static void model_clip_add_command_finalize (ModelCommand* obj) {
+       ModelClipAddCommand * self;
+       self = MODEL_CLIP_ADD_COMMAND (obj);
+       _g_object_unref0 (self->priv->track);
+       _g_object_unref0 (self->priv->clip);
+       MODEL_COMMAND_CLASS (model_clip_add_command_parent_class)->finalize (obj);
+}
+
+
+GType model_clip_add_command_get_type (void) {
+       static volatile gsize model_clip_add_command_type_id__volatile = 0;
+       if (g_once_init_enter (&model_clip_add_command_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelClipAddCommandClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_clip_add_command_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelClipAddCommand), 0, (GInstanceInitFunc) model_clip_add_command_instance_init, NULL };
+               GType model_clip_add_command_type_id;
+               model_clip_add_command_type_id = g_type_register_static (MODEL_TYPE_COMMAND, "ModelClipAddCommand", &g_define_type_info, 0);
+               g_once_init_leave (&model_clip_add_command_type_id__volatile, model_clip_add_command_type_id);
+       }
+       return model_clip_add_command_type_id__volatile;
+}
+
+
+GType model_clip_split_command_action_get_type (void) {
+       static volatile gsize model_clip_split_command_action_type_id__volatile = 0;
+       if (g_once_init_enter (&model_clip_split_command_action_type_id__volatile)) {
+               static const GEnumValue values[] = {{MODEL_CLIP_SPLIT_COMMAND_ACTION_SPLIT, "MODEL_CLIP_SPLIT_COMMAND_ACTION_SPLIT", "split"}, {MODEL_CLIP_SPLIT_COMMAND_ACTION_JOIN, "MODEL_CLIP_SPLIT_COMMAND_ACTION_JOIN", "join"}, {0, NULL, NULL}};
+               GType model_clip_split_command_action_type_id;
+               model_clip_split_command_action_type_id = g_enum_register_static ("ModelClipSplitCommandAction", values);
+               g_once_init_leave (&model_clip_split_command_action_type_id__volatile, model_clip_split_command_action_type_id);
+       }
+       return model_clip_split_command_action_type_id__volatile;
+}
+
+
+#line 170 "command.vala"
+ModelClipSplitCommand* model_clip_split_command_construct (GType object_type, ModelClipSplitCommandAction action, ModelTrack* track, gint64 time) {
+#line 1442 "command.c"
+       ModelClipSplitCommand* self;
+       ModelTrack* _tmp0_;
+#line 170 "command.vala"
+       g_return_val_if_fail (MODEL_IS_TRACK (track), NULL);
+#line 170 "command.vala"
+       self = (ModelClipSplitCommand*) model_command_construct (object_type);
+#line 171 "command.vala"
+       self->priv->track = (_tmp0_ = _g_object_ref0 (track), _g_object_unref0 (self->priv->track), _tmp0_);
+#line 172 "command.vala"
+       self->priv->time = time;
+#line 173 "command.vala"
+       self->priv->do_split = action == MODEL_CLIP_SPLIT_COMMAND_ACTION_SPLIT;
+#line 1455 "command.c"
+       return self;
+}
+
+
+#line 170 "command.vala"
+ModelClipSplitCommand* model_clip_split_command_new (ModelClipSplitCommandAction action, ModelTrack* track, gint64 time) {
+#line 170 "command.vala"
+       return model_clip_split_command_construct (MODEL_TYPE_CLIP_SPLIT_COMMAND, action, track, time);
+#line 1464 "command.c"
+}
+
+
+#line 176 "command.vala"
+static void model_clip_split_command_real_apply (ModelCommand* base) {
+#line 1470 "command.c"
+       ModelClipSplitCommand * self;
+       self = MODEL_CLIP_SPLIT_COMMAND (base);
+#line 177 "command.vala"
+       if (self->priv->do_split) {
+#line 178 "command.vala"
+               _model_track_split_at (self->priv->track, self->priv->time);
+#line 1477 "command.c"
+       } else {
+#line 180 "command.vala"
+               _model_track_join (self->priv->track, self->priv->time);
+#line 1481 "command.c"
+       }
+}
+
+
+#line 184 "command.vala"
+static void model_clip_split_command_real_undo (ModelCommand* base) {
+#line 1488 "command.c"
+       ModelClipSplitCommand * self;
+       self = MODEL_CLIP_SPLIT_COMMAND (base);
+#line 185 "command.vala"
+       if (self->priv->do_split) {
+#line 186 "command.vala"
+               _model_track_join (self->priv->track, self->priv->time);
+#line 1495 "command.c"
+       } else {
+#line 188 "command.vala"
+               _model_track_split_at (self->priv->track, self->priv->time);
+#line 1499 "command.c"
+       }
+}
+
+
+#line 192 "command.vala"
+static gboolean model_clip_split_command_real_merge (ModelCommand* base, ModelCommand* command) {
+#line 1506 "command.c"
+       ModelClipSplitCommand * self;
+       gboolean result = FALSE;
+       self = MODEL_CLIP_SPLIT_COMMAND (base);
+#line 192 "command.vala"
+       g_return_val_if_fail (MODEL_IS_COMMAND (command), FALSE);
+#line 1512 "command.c"
+       result = FALSE;
+#line 193 "command.vala"
+       return result;
+#line 1516 "command.c"
+}
+
+
+#line 196 "command.vala"
+static char* model_clip_split_command_real_description (ModelCommand* base) {
+#line 1522 "command.c"
+       ModelClipSplitCommand * self;
+       char* result = NULL;
+       self = MODEL_CLIP_SPLIT_COMMAND (base);
+#line 197 "command.vala"
+       if (self->priv->do_split) {
+#line 1528 "command.c"
+               result = g_strdup ("Split Clip");
+#line 198 "command.vala"
+               return result;
+#line 1532 "command.c"
+       } else {
+               result = g_strdup ("Join Clip");
+#line 200 "command.vala"
+               return result;
+#line 1537 "command.c"
+       }
+}
+
+
+static void model_clip_split_command_class_init (ModelClipSplitCommandClass * klass) {
+       model_clip_split_command_parent_class = g_type_class_peek_parent (klass);
+       MODEL_COMMAND_CLASS (klass)->finalize = model_clip_split_command_finalize;
+       g_type_class_add_private (klass, sizeof (ModelClipSplitCommandPrivate));
+       MODEL_COMMAND_CLASS (klass)->apply = model_clip_split_command_real_apply;
+       MODEL_COMMAND_CLASS (klass)->undo = model_clip_split_command_real_undo;
+       MODEL_COMMAND_CLASS (klass)->merge = model_clip_split_command_real_merge;
+       MODEL_COMMAND_CLASS (klass)->description = model_clip_split_command_real_description;
+}
+
+
+static void model_clip_split_command_instance_init (ModelClipSplitCommand * self) {
+       self->priv = MODEL_CLIP_SPLIT_COMMAND_GET_PRIVATE (self);
+}
+
+
+static void model_clip_split_command_finalize (ModelCommand* obj) {
+       ModelClipSplitCommand * self;
+       self = MODEL_CLIP_SPLIT_COMMAND (obj);
+       _g_object_unref0 (self->priv->track);
+       MODEL_COMMAND_CLASS (model_clip_split_command_parent_class)->finalize (obj);
+}
+
+
+GType model_clip_split_command_get_type (void) {
+       static volatile gsize model_clip_split_command_type_id__volatile = 0;
+       if (g_once_init_enter (&model_clip_split_command_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelClipSplitCommandClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_clip_split_command_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelClipSplitCommand), 0, (GInstanceInitFunc) model_clip_split_command_instance_init, NULL };
+               GType model_clip_split_command_type_id;
+               model_clip_split_command_type_id = g_type_register_static (MODEL_TYPE_COMMAND, "ModelClipSplitCommand", &g_define_type_info, 0);
+               g_once_init_leave (&model_clip_split_command_type_id__volatile, model_clip_split_command_type_id);
+       }
+       return model_clip_split_command_type_id__volatile;
+}
+
+
+#line 209 "command.vala"
+ModelClipFileDeleteCommand* model_clip_file_delete_command_construct (GType object_type, ModelProject* p, ModelClipFile* cf) {
+#line 1580 "command.c"
+       ModelClipFileDeleteCommand* self;
+       ModelClipFile* _tmp0_;
+       ModelProject* _tmp1_;
+#line 209 "command.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (p), NULL);
+#line 209 "command.vala"
+       g_return_val_if_fail (MODEL_IS_CLIP_FILE (cf), NULL);
+#line 209 "command.vala"
+       self = (ModelClipFileDeleteCommand*) model_command_construct (object_type);
+#line 210 "command.vala"
+       self->priv->clipfile = (_tmp0_ = _g_object_ref0 (cf), _g_object_unref0 (self->priv->clipfile), _tmp0_);
+#line 211 "command.vala"
+       self->priv->project = (_tmp1_ = _g_object_ref0 (p), _g_object_unref0 (self->priv->project), _tmp1_);
+#line 1594 "command.c"
+       return self;
+}
+
+
+#line 209 "command.vala"
+ModelClipFileDeleteCommand* model_clip_file_delete_command_new (ModelProject* p, ModelClipFile* cf) {
+#line 209 "command.vala"
+       return model_clip_file_delete_command_construct (MODEL_TYPE_CLIP_FILE_DELETE_COMMAND, p, cf);
+#line 1603 "command.c"
+}
+
+
+#line 214 "command.vala"
+static void model_clip_file_delete_command_real_apply (ModelCommand* base) {
+#line 1609 "command.c"
+       ModelClipFileDeleteCommand * self;
+       self = MODEL_CLIP_FILE_DELETE_COMMAND (base);
+#line 215 "command.vala"
+       _model_project_remove_clipfile (self->priv->project, self->priv->clipfile);
+#line 1614 "command.c"
+}
+
+
+#line 218 "command.vala"
+static void model_clip_file_delete_command_real_undo (ModelCommand* base) {
+#line 1620 "command.c"
+       ModelClipFileDeleteCommand * self;
+       GError * _inner_error_;
+       self = MODEL_CLIP_FILE_DELETE_COMMAND (base);
+       _inner_error_ = NULL;
+       {
+#line 220 "command.vala"
+               _model_project_add_clipfile (self->priv->project, self->priv->clipfile, &_inner_error_);
+#line 1628 "command.c"
+               if (_inner_error_ != NULL) {
+                       goto __catch5_g_error;
+               }
+       }
+       goto __finally5;
+       __catch5_g_error:
+       {
+               GError * e;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               {
+#line 222 "command.vala"
+                       g_signal_emit_by_name (self->priv->project, "error-occurred", "Could not add clipfile.", e->message);
+#line 1642 "command.c"
+                       _g_error_free0 (e);
+               }
+       }
+       __finally5:
+       if (_inner_error_ != NULL) {
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return;
+       }
+}
+
+
+#line 226 "command.vala"
+static gboolean model_clip_file_delete_command_real_merge (ModelCommand* base, ModelCommand* command) {
+#line 1657 "command.c"
+       ModelClipFileDeleteCommand * self;
+       gboolean result = FALSE;
+       self = MODEL_CLIP_FILE_DELETE_COMMAND (base);
+#line 226 "command.vala"
+       g_return_val_if_fail (MODEL_IS_COMMAND (command), FALSE);
+#line 1663 "command.c"
+       result = FALSE;
+#line 227 "command.vala"
+       return result;
+#line 1667 "command.c"
+}
+
+
+#line 230 "command.vala"
+static char* model_clip_file_delete_command_real_description (ModelCommand* base) {
+#line 1673 "command.c"
+       ModelClipFileDeleteCommand * self;
+       char* result = NULL;
+       self = MODEL_CLIP_FILE_DELETE_COMMAND (base);
+       result = g_strdup ("Delete from Library");
+#line 231 "command.vala"
+       return result;
+#line 1680 "command.c"
+}
+
+
+static void model_clip_file_delete_command_class_init (ModelClipFileDeleteCommandClass * klass) {
+       model_clip_file_delete_command_parent_class = g_type_class_peek_parent (klass);
+       MODEL_COMMAND_CLASS (klass)->finalize = model_clip_file_delete_command_finalize;
+       g_type_class_add_private (klass, sizeof (ModelClipFileDeleteCommandPrivate));
+       MODEL_COMMAND_CLASS (klass)->apply = model_clip_file_delete_command_real_apply;
+       MODEL_COMMAND_CLASS (klass)->undo = model_clip_file_delete_command_real_undo;
+       MODEL_COMMAND_CLASS (klass)->merge = model_clip_file_delete_command_real_merge;
+       MODEL_COMMAND_CLASS (klass)->description = model_clip_file_delete_command_real_description;
+}
+
+
+static void model_clip_file_delete_command_instance_init (ModelClipFileDeleteCommand * self) {
+       self->priv = MODEL_CLIP_FILE_DELETE_COMMAND_GET_PRIVATE (self);
+}
+
+
+static void model_clip_file_delete_command_finalize (ModelCommand* obj) {
+       ModelClipFileDeleteCommand * self;
+       self = MODEL_CLIP_FILE_DELETE_COMMAND (obj);
+       _g_object_unref0 (self->priv->clipfile);
+       _g_object_unref0 (self->priv->project);
+       MODEL_COMMAND_CLASS (model_clip_file_delete_command_parent_class)->finalize (obj);
+}
+
+
+GType model_clip_file_delete_command_get_type (void) {
+       static volatile gsize model_clip_file_delete_command_type_id__volatile = 0;
+       if (g_once_init_enter (&model_clip_file_delete_command_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelClipFileDeleteCommandClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_clip_file_delete_command_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelClipFileDeleteCommand), 0, (GInstanceInitFunc) model_clip_file_delete_command_instance_init, NULL };
+               GType model_clip_file_delete_command_type_id;
+               model_clip_file_delete_command_type_id = g_type_register_static (MODEL_TYPE_COMMAND, "ModelClipFileDeleteCommand", &g_define_type_info, 0);
+               g_once_init_leave (&model_clip_file_delete_command_type_id__volatile, model_clip_file_delete_command_type_id);
+       }
+       return model_clip_file_delete_command_type_id__volatile;
+}
+
+
+#line 241 "command.vala"
+ModelClipTrimCommand* model_clip_trim_command_construct (GType object_type, ModelTrack* track, ModelClip* clip, gint64 delta, GdkWindowEdge edge) {
+#line 1723 "command.c"
+       ModelClipTrimCommand* self;
+       ModelTrack* _tmp0_;
+       ModelClip* _tmp1_;
+#line 241 "command.vala"
+       g_return_val_if_fail (MODEL_IS_TRACK (track), NULL);
+#line 241 "command.vala"
+       g_return_val_if_fail (MODEL_IS_CLIP (clip), NULL);
+#line 241 "command.vala"
+       self = (ModelClipTrimCommand*) model_command_construct (object_type);
+#line 242 "command.vala"
+       self->priv->track = (_tmp0_ = _g_object_ref0 (track), _g_object_unref0 (self->priv->track), _tmp0_);
+#line 243 "command.vala"
+       self->priv->clip = (_tmp1_ = _g_object_ref0 (clip), _g_object_unref0 (self->priv->clip), _tmp1_);
+#line 244 "command.vala"
+       self->priv->delta = delta;
+#line 245 "command.vala"
+       self->priv->edge = edge;
+#line 1741 "command.c"
+       return self;
+}
+
+
+#line 241 "command.vala"
+ModelClipTrimCommand* model_clip_trim_command_new (ModelTrack* track, ModelClip* clip, gint64 delta, GdkWindowEdge edge) {
+#line 241 "command.vala"
+       return model_clip_trim_command_construct (MODEL_TYPE_CLIP_TRIM_COMMAND, track, clip, delta, edge);
+#line 1750 "command.c"
+}
+
+
+#line 248 "command.vala"
+static void model_clip_trim_command_real_apply (ModelCommand* base) {
+#line 1756 "command.c"
+       ModelClipTrimCommand * self;
+       self = MODEL_CLIP_TRIM_COMMAND (base);
+#line 249 "command.vala"
+       _model_track_trim (self->priv->track, self->priv->clip, self->priv->delta, self->priv->edge);
+#line 1761 "command.c"
+}
+
+
+#line 252 "command.vala"
+static void model_clip_trim_command_real_undo (ModelCommand* base) {
+#line 1767 "command.c"
+       ModelClipTrimCommand * self;
+       self = MODEL_CLIP_TRIM_COMMAND (base);
+#line 253 "command.vala"
+       _model_track_trim (self->priv->track, self->priv->clip, -self->priv->delta, self->priv->edge);
+#line 1772 "command.c"
+}
+
+
+#line 256 "command.vala"
+static gboolean model_clip_trim_command_real_merge (ModelCommand* base, ModelCommand* command) {
+#line 1778 "command.c"
+       ModelClipTrimCommand * self;
+       gboolean result = FALSE;
+       self = MODEL_CLIP_TRIM_COMMAND (base);
+#line 256 "command.vala"
+       g_return_val_if_fail (MODEL_IS_COMMAND (command), FALSE);
+#line 1784 "command.c"
+       result = FALSE;
+#line 257 "command.vala"
+       return result;
+#line 1788 "command.c"
+}
+
+
+#line 260 "command.vala"
+static char* model_clip_trim_command_real_description (ModelCommand* base) {
+#line 1794 "command.c"
+       ModelClipTrimCommand * self;
+       char* result = NULL;
+       self = MODEL_CLIP_TRIM_COMMAND (base);
+       result = g_strdup ("Trim To Playhead");
+#line 261 "command.vala"
+       return result;
+#line 1801 "command.c"
+}
+
+
+static void model_clip_trim_command_class_init (ModelClipTrimCommandClass * klass) {
+       model_clip_trim_command_parent_class = g_type_class_peek_parent (klass);
+       MODEL_COMMAND_CLASS (klass)->finalize = model_clip_trim_command_finalize;
+       g_type_class_add_private (klass, sizeof (ModelClipTrimCommandPrivate));
+       MODEL_COMMAND_CLASS (klass)->apply = model_clip_trim_command_real_apply;
+       MODEL_COMMAND_CLASS (klass)->undo = model_clip_trim_command_real_undo;
+       MODEL_COMMAND_CLASS (klass)->merge = model_clip_trim_command_real_merge;
+       MODEL_COMMAND_CLASS (klass)->description = model_clip_trim_command_real_description;
+}
+
+
+static void model_clip_trim_command_instance_init (ModelClipTrimCommand * self) {
+       self->priv = MODEL_CLIP_TRIM_COMMAND_GET_PRIVATE (self);
+}
+
+
+static void model_clip_trim_command_finalize (ModelCommand* obj) {
+       ModelClipTrimCommand * self;
+       self = MODEL_CLIP_TRIM_COMMAND (obj);
+       _g_object_unref0 (self->priv->track);
+       _g_object_unref0 (self->priv->clip);
+       MODEL_COMMAND_CLASS (model_clip_trim_command_parent_class)->finalize (obj);
+}
+
+
+GType model_clip_trim_command_get_type (void) {
+       static volatile gsize model_clip_trim_command_type_id__volatile = 0;
+       if (g_once_init_enter (&model_clip_trim_command_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelClipTrimCommandClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_clip_trim_command_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelClipTrimCommand), 0, (GInstanceInitFunc) model_clip_trim_command_instance_init, NULL };
+               GType model_clip_trim_command_type_id;
+               model_clip_trim_command_type_id = g_type_register_static (MODEL_TYPE_COMMAND, "ModelClipTrimCommand", &g_define_type_info, 0);
+               g_once_init_leave (&model_clip_trim_command_type_id__volatile, model_clip_trim_command_type_id);
+       }
+       return model_clip_trim_command_type_id__volatile;
+}
+
+
+#line 271 "command.vala"
+ModelClipRevertCommand* model_clip_revert_command_construct (GType object_type, ModelTrack* track, ModelClip* clip) {
+#line 1844 "command.c"
+       ModelClipRevertCommand* self;
+       ModelTrack* _tmp0_;
+       ModelClip* _tmp1_;
+#line 271 "command.vala"
+       g_return_val_if_fail (MODEL_IS_TRACK (track), NULL);
+#line 271 "command.vala"
+       g_return_val_if_fail (MODEL_IS_CLIP (clip), NULL);
+#line 271 "command.vala"
+       self = (ModelClipRevertCommand*) model_command_construct (object_type);
+#line 272 "command.vala"
+       self->priv->track = (_tmp0_ = _g_object_ref0 (track), _g_object_unref0 (self->priv->track), _tmp0_);
+#line 273 "command.vala"
+       self->priv->clip = (_tmp1_ = _g_object_ref0 (clip), _g_object_unref0 (self->priv->clip), _tmp1_);
+#line 1858 "command.c"
+       return self;
+}
+
+
+#line 271 "command.vala"
+ModelClipRevertCommand* model_clip_revert_command_new (ModelTrack* track, ModelClip* clip) {
+#line 271 "command.vala"
+       return model_clip_revert_command_construct (MODEL_TYPE_CLIP_REVERT_COMMAND, track, clip);
+#line 1867 "command.c"
+}
+
+
+#line 276 "command.vala"
+static void model_clip_revert_command_real_apply (ModelCommand* base) {
+#line 1873 "command.c"
+       ModelClipRevertCommand * self;
+       self = MODEL_CLIP_REVERT_COMMAND (base);
+#line 277 "command.vala"
+       self->priv->right_delta = model_clip_get_end (self->priv->clip);
+#line 278 "command.vala"
+       self->priv->left_delta = model_clip_get_media_start (self->priv->clip);
+#line 279 "command.vala"
+       _model_track_revert_to_original (self->priv->track, self->priv->clip);
+#line 280 "command.vala"
+       self->priv->left_delta = self->priv->left_delta - model_clip_get_media_start (self->priv->clip);
+#line 281 "command.vala"
+       self->priv->right_delta = (model_clip_get_end (self->priv->clip) - self->priv->right_delta) - self->priv->left_delta;
+#line 1886 "command.c"
+}
+
+
+#line 284 "command.vala"
+static void model_clip_revert_command_real_undo (ModelCommand* base) {
+#line 1892 "command.c"
+       ModelClipRevertCommand * self;
+       self = MODEL_CLIP_REVERT_COMMAND (base);
+#line 285 "command.vala"
+       _model_track_trim (self->priv->track, self->priv->clip, -self->priv->left_delta, GDK_WINDOW_EDGE_WEST);
+#line 286 "command.vala"
+       _model_track_trim (self->priv->track, self->priv->clip, -self->priv->right_delta, GDK_WINDOW_EDGE_EAST);
+#line 1899 "command.c"
+}
+
+
+#line 289 "command.vala"
+static gboolean model_clip_revert_command_real_merge (ModelCommand* base, ModelCommand* command) {
+#line 1905 "command.c"
+       ModelClipRevertCommand * self;
+       gboolean result = FALSE;
+       self = MODEL_CLIP_REVERT_COMMAND (base);
+#line 289 "command.vala"
+       g_return_val_if_fail (MODEL_IS_COMMAND (command), FALSE);
+#line 1911 "command.c"
+       result = FALSE;
+#line 290 "command.vala"
+       return result;
+#line 1915 "command.c"
+}
+
+
+#line 293 "command.vala"
+static char* model_clip_revert_command_real_description (ModelCommand* base) {
+#line 1921 "command.c"
+       ModelClipRevertCommand * self;
+       char* result = NULL;
+       self = MODEL_CLIP_REVERT_COMMAND (base);
+       result = g_strdup ("Revert To Original");
+#line 294 "command.vala"
+       return result;
+#line 1928 "command.c"
+}
+
+
+static void model_clip_revert_command_class_init (ModelClipRevertCommandClass * klass) {
+       model_clip_revert_command_parent_class = g_type_class_peek_parent (klass);
+       MODEL_COMMAND_CLASS (klass)->finalize = model_clip_revert_command_finalize;
+       g_type_class_add_private (klass, sizeof (ModelClipRevertCommandPrivate));
+       MODEL_COMMAND_CLASS (klass)->apply = model_clip_revert_command_real_apply;
+       MODEL_COMMAND_CLASS (klass)->undo = model_clip_revert_command_real_undo;
+       MODEL_COMMAND_CLASS (klass)->merge = model_clip_revert_command_real_merge;
+       MODEL_COMMAND_CLASS (klass)->description = model_clip_revert_command_real_description;
+}
+
+
+static void model_clip_revert_command_instance_init (ModelClipRevertCommand * self) {
+       self->priv = MODEL_CLIP_REVERT_COMMAND_GET_PRIVATE (self);
+}
+
+
+static void model_clip_revert_command_finalize (ModelCommand* obj) {
+       ModelClipRevertCommand * self;
+       self = MODEL_CLIP_REVERT_COMMAND (obj);
+       _g_object_unref0 (self->priv->track);
+       _g_object_unref0 (self->priv->clip);
+       MODEL_COMMAND_CLASS (model_clip_revert_command_parent_class)->finalize (obj);
+}
+
+
+GType model_clip_revert_command_get_type (void) {
+       static volatile gsize model_clip_revert_command_type_id__volatile = 0;
+       if (g_once_init_enter (&model_clip_revert_command_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelClipRevertCommandClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_clip_revert_command_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelClipRevertCommand), 0, (GInstanceInitFunc) model_clip_revert_command_instance_init, NULL };
+               GType model_clip_revert_command_type_id;
+               model_clip_revert_command_type_id = g_type_register_static (MODEL_TYPE_COMMAND, "ModelClipRevertCommand", &g_define_type_info, 0);
+               g_once_init_leave (&model_clip_revert_command_type_id__volatile, model_clip_revert_command_type_id);
+       }
+       return model_clip_revert_command_type_id__volatile;
+}
+
+
+#line 303 "command.vala"
+ModelTimeSignatureCommand* model_time_signature_command_construct (GType object_type, ModelProject* project, Fraction* new_time_signature) {
+#line 1971 "command.c"
+       ModelTimeSignatureCommand* self;
+       ModelProject* _tmp0_;
+       Fraction _tmp1_ = {0};
+#line 303 "command.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (project), NULL);
+#line 303 "command.vala"
+       self = (ModelTimeSignatureCommand*) model_command_construct (object_type);
+#line 304 "command.vala"
+       self->priv->project = (_tmp0_ = _g_object_ref0 (project), _g_object_unref0 (self->priv->project), _tmp0_);
+#line 305 "command.vala"
+       self->priv->new_time_signature = *new_time_signature;
+#line 306 "command.vala"
+       self->priv->old_time_signature = (model_tempo_information_get_time_signature (MODEL_TEMPO_INFORMATION (project), &_tmp1_), _tmp1_);
+#line 1985 "command.c"
+       return self;
+}
+
+
+#line 303 "command.vala"
+ModelTimeSignatureCommand* model_time_signature_command_new (ModelProject* project, Fraction* new_time_signature) {
+#line 303 "command.vala"
+       return model_time_signature_command_construct (MODEL_TYPE_TIME_SIGNATURE_COMMAND, project, new_time_signature);
+#line 1994 "command.c"
+}
+
+
+#line 309 "command.vala"
+static void model_time_signature_command_real_apply (ModelCommand* base) {
+#line 2000 "command.c"
+       ModelTimeSignatureCommand * self;
+       self = MODEL_TIME_SIGNATURE_COMMAND (base);
+#line 310 "command.vala"
+       _model_project_set_time_signature (self->priv->project, &self->priv->new_time_signature);
+#line 2005 "command.c"
+}
+
+
+#line 313 "command.vala"
+static void model_time_signature_command_real_undo (ModelCommand* base) {
+#line 2011 "command.c"
+       ModelTimeSignatureCommand * self;
+       self = MODEL_TIME_SIGNATURE_COMMAND (base);
+#line 314 "command.vala"
+       _model_project_set_time_signature (self->priv->project, &self->priv->old_time_signature);
+#line 2016 "command.c"
+}
+
+
+#line 317 "command.vala"
+static gboolean model_time_signature_command_real_merge (ModelCommand* base, ModelCommand* command) {
+#line 2022 "command.c"
+       ModelTimeSignatureCommand * self;
+       gboolean result = FALSE;
+       self = MODEL_TIME_SIGNATURE_COMMAND (base);
+#line 317 "command.vala"
+       g_return_val_if_fail (MODEL_IS_COMMAND (command), FALSE);
+#line 2028 "command.c"
+       result = FALSE;
+#line 318 "command.vala"
+       return result;
+#line 2032 "command.c"
+}
+
+
+#line 321 "command.vala"
+static char* model_time_signature_command_real_description (ModelCommand* base) {
+#line 2038 "command.c"
+       ModelTimeSignatureCommand * self;
+       char* result = NULL;
+       self = MODEL_TIME_SIGNATURE_COMMAND (base);
+       result = g_strdup ("Set Time Signature");
+#line 322 "command.vala"
+       return result;
+#line 2045 "command.c"
+}
+
+
+static void model_time_signature_command_class_init (ModelTimeSignatureCommandClass * klass) {
+       model_time_signature_command_parent_class = g_type_class_peek_parent (klass);
+       MODEL_COMMAND_CLASS (klass)->finalize = model_time_signature_command_finalize;
+       g_type_class_add_private (klass, sizeof (ModelTimeSignatureCommandPrivate));
+       MODEL_COMMAND_CLASS (klass)->apply = model_time_signature_command_real_apply;
+       MODEL_COMMAND_CLASS (klass)->undo = model_time_signature_command_real_undo;
+       MODEL_COMMAND_CLASS (klass)->merge = model_time_signature_command_real_merge;
+       MODEL_COMMAND_CLASS (klass)->description = model_time_signature_command_real_description;
+}
+
+
+static void model_time_signature_command_instance_init (ModelTimeSignatureCommand * self) {
+       self->priv = MODEL_TIME_SIGNATURE_COMMAND_GET_PRIVATE (self);
+}
+
+
+static void model_time_signature_command_finalize (ModelCommand* obj) {
+       ModelTimeSignatureCommand * self;
+       self = MODEL_TIME_SIGNATURE_COMMAND (obj);
+       _g_object_unref0 (self->priv->project);
+       MODEL_COMMAND_CLASS (model_time_signature_command_parent_class)->finalize (obj);
+}
+
+
+GType model_time_signature_command_get_type (void) {
+       static volatile gsize model_time_signature_command_type_id__volatile = 0;
+       if (g_once_init_enter (&model_time_signature_command_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelTimeSignatureCommandClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_time_signature_command_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelTimeSignatureCommand), 0, (GInstanceInitFunc) model_time_signature_command_instance_init, NULL };
+               GType model_time_signature_command_type_id;
+               model_time_signature_command_type_id = g_type_register_static (MODEL_TYPE_COMMAND, "ModelTimeSignatureCommand", &g_define_type_info, 0);
+               g_once_init_leave (&model_time_signature_command_type_id__volatile, model_time_signature_command_type_id);
+       }
+       return model_time_signature_command_type_id__volatile;
+}
+
+
+#line 330 "command.vala"
+ModelBpmCommand* model_bpm_command_construct (GType object_type, ModelProject* project, gint new_bpm) {
+#line 2087 "command.c"
+       ModelBpmCommand* self;
+       ModelProject* _tmp0_;
+#line 330 "command.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (project), NULL);
+#line 330 "command.vala"
+       self = (ModelBpmCommand*) model_command_construct (object_type);
+#line 331 "command.vala"
+       self->priv->delta = new_bpm - model_tempo_information_get_bpm (MODEL_TEMPO_INFORMATION (project));
+#line 332 "command.vala"
+       self->priv->project = (_tmp0_ = _g_object_ref0 (project), _g_object_unref0 (self->priv->project), _tmp0_);
+#line 2098 "command.c"
+       return self;
+}
+
+
+#line 330 "command.vala"
+ModelBpmCommand* model_bpm_command_new (ModelProject* project, gint new_bpm) {
+#line 330 "command.vala"
+       return model_bpm_command_construct (MODEL_TYPE_BPM_COMMAND, project, new_bpm);
+#line 2107 "command.c"
+}
+
+
+#line 335 "command.vala"
+static void model_bpm_command_real_apply (ModelCommand* base) {
+#line 2113 "command.c"
+       ModelBpmCommand * self;
+       self = MODEL_BPM_COMMAND (base);
+#line 336 "command.vala"
+       _model_project_set_bpm (self->priv->project, model_tempo_information_get_bpm (MODEL_TEMPO_INFORMATION (self->priv->project)) + self->priv->delta);
+#line 2118 "command.c"
+}
+
+
+#line 339 "command.vala"
+static void model_bpm_command_real_undo (ModelCommand* base) {
+#line 2124 "command.c"
+       ModelBpmCommand * self;
+       self = MODEL_BPM_COMMAND (base);
+#line 340 "command.vala"
+       _model_project_set_bpm (self->priv->project, model_tempo_information_get_bpm (MODEL_TEMPO_INFORMATION (self->priv->project)) - self->priv->delta);
+#line 2129 "command.c"
+}
+
+
+#line 343 "command.vala"
+static gboolean model_bpm_command_real_merge (ModelCommand* base, ModelCommand* command) {
+#line 2135 "command.c"
+       ModelBpmCommand * self;
+       gboolean result = FALSE;
+       self = MODEL_BPM_COMMAND (base);
+#line 343 "command.vala"
+       g_return_val_if_fail (MODEL_IS_COMMAND (command), FALSE);
+#line 2141 "command.c"
+       result = FALSE;
+#line 344 "command.vala"
+       return result;
+#line 2145 "command.c"
+}
+
+
+#line 347 "command.vala"
+static char* model_bpm_command_real_description (ModelCommand* base) {
+#line 2151 "command.c"
+       ModelBpmCommand * self;
+       char* result = NULL;
+       self = MODEL_BPM_COMMAND (base);
+       result = g_strdup ("Set Tempo");
+#line 348 "command.vala"
+       return result;
+#line 2158 "command.c"
+}
+
+
+static void model_bpm_command_class_init (ModelBpmCommandClass * klass) {
+       model_bpm_command_parent_class = g_type_class_peek_parent (klass);
+       MODEL_COMMAND_CLASS (klass)->finalize = model_bpm_command_finalize;
+       g_type_class_add_private (klass, sizeof (ModelBpmCommandPrivate));
+       MODEL_COMMAND_CLASS (klass)->apply = model_bpm_command_real_apply;
+       MODEL_COMMAND_CLASS (klass)->undo = model_bpm_command_real_undo;
+       MODEL_COMMAND_CLASS (klass)->merge = model_bpm_command_real_merge;
+       MODEL_COMMAND_CLASS (klass)->description = model_bpm_command_real_description;
+}
+
+
+static void model_bpm_command_instance_init (ModelBpmCommand * self) {
+       self->priv = MODEL_BPM_COMMAND_GET_PRIVATE (self);
+}
+
+
+static void model_bpm_command_finalize (ModelCommand* obj) {
+       ModelBpmCommand * self;
+       self = MODEL_BPM_COMMAND (obj);
+       _g_object_unref0 (self->priv->project);
+       MODEL_COMMAND_CLASS (model_bpm_command_parent_class)->finalize (obj);
+}
+
+
+GType model_bpm_command_get_type (void) {
+       static volatile gsize model_bpm_command_type_id__volatile = 0;
+       if (g_once_init_enter (&model_bpm_command_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelBpmCommandClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_bpm_command_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelBpmCommand), 0, (GInstanceInitFunc) model_bpm_command_instance_init, NULL };
+               GType model_bpm_command_type_id;
+               model_bpm_command_type_id = g_type_register_static (MODEL_TYPE_COMMAND, "ModelBpmCommand", &g_define_type_info, 0);
+               g_once_init_leave (&model_bpm_command_type_id__volatile, model_bpm_command_type_id);
+       }
+       return model_bpm_command_type_id__volatile;
+}
+
+
+#line 356 "command.vala"
+ModelAddClipCommand* model_add_clip_command_construct (GType object_type, ModelProject* project, ModelClipFile* clip_file) {
+#line 2200 "command.c"
+       ModelAddClipCommand* self;
+       ModelProject* _tmp0_;
+       ModelClipFile* _tmp1_;
+#line 356 "command.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (project), NULL);
+#line 356 "command.vala"
+       g_return_val_if_fail (MODEL_IS_CLIP_FILE (clip_file), NULL);
+#line 356 "command.vala"
+       self = (ModelAddClipCommand*) model_command_construct (object_type);
+#line 357 "command.vala"
+       self->priv->project = (_tmp0_ = _g_object_ref0 (project), _g_object_unref0 (self->priv->project), _tmp0_);
+#line 358 "command.vala"
+       self->priv->clip_file = (_tmp1_ = _g_object_ref0 (clip_file), _g_object_unref0 (self->priv->clip_file), _tmp1_);
+#line 2214 "command.c"
+       return self;
+}
+
+
+#line 356 "command.vala"
+ModelAddClipCommand* model_add_clip_command_new (ModelProject* project, ModelClipFile* clip_file) {
+#line 356 "command.vala"
+       return model_add_clip_command_construct (MODEL_TYPE_ADD_CLIP_COMMAND, project, clip_file);
+#line 2223 "command.c"
+}
+
+
+#line 361 "command.vala"
+static void model_add_clip_command_real_apply (ModelCommand* base) {
+#line 2229 "command.c"
+       ModelAddClipCommand * self;
+       GError * _inner_error_;
+       self = MODEL_ADD_CLIP_COMMAND (base);
+       _inner_error_ = NULL;
+       {
+#line 363 "command.vala"
+               _model_project_add_clipfile (self->priv->project, self->priv->clip_file, &_inner_error_);
+#line 2237 "command.c"
+               if (_inner_error_ != NULL) {
+                       goto __catch6_g_error;
+               }
+       }
+       goto __finally6;
+       __catch6_g_error:
+       {
+               GError * _error_;
+               _error_ = _inner_error_;
+               _inner_error_ = NULL;
+               {
+#line 365 "command.vala"
+                       g_signal_emit_by_name (self->priv->project, "error-occurred", "Error importing", "An error occurred importing this file.");
+#line 2251 "command.c"
+                       _g_error_free0 (_error_);
+               }
+       }
+       __finally6:
+       if (_inner_error_ != NULL) {
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return;
+       }
+}
+
+
+#line 369 "command.vala"
+static void model_add_clip_command_real_undo (ModelCommand* base) {
+#line 2266 "command.c"
+       ModelAddClipCommand * self;
+       self = MODEL_ADD_CLIP_COMMAND (base);
+#line 370 "command.vala"
+       _model_project_remove_clipfile (self->priv->project, self->priv->clip_file);
+#line 2271 "command.c"
+}
+
+
+#line 373 "command.vala"
+static gboolean model_add_clip_command_real_merge (ModelCommand* base, ModelCommand* command) {
+#line 2277 "command.c"
+       ModelAddClipCommand * self;
+       gboolean result = FALSE;
+       self = MODEL_ADD_CLIP_COMMAND (base);
+#line 373 "command.vala"
+       g_return_val_if_fail (MODEL_IS_COMMAND (command), FALSE);
+#line 2283 "command.c"
+       result = FALSE;
+#line 374 "command.vala"
+       return result;
+#line 2287 "command.c"
+}
+
+
+#line 377 "command.vala"
+static char* model_add_clip_command_real_description (ModelCommand* base) {
+#line 2293 "command.c"
+       ModelAddClipCommand * self;
+       char* result = NULL;
+       self = MODEL_ADD_CLIP_COMMAND (base);
+       result = g_strdup ("Add Clip To Library");
+#line 378 "command.vala"
+       return result;
+#line 2300 "command.c"
+}
+
+
+static void model_add_clip_command_class_init (ModelAddClipCommandClass * klass) {
+       model_add_clip_command_parent_class = g_type_class_peek_parent (klass);
+       MODEL_COMMAND_CLASS (klass)->finalize = model_add_clip_command_finalize;
+       g_type_class_add_private (klass, sizeof (ModelAddClipCommandPrivate));
+       MODEL_COMMAND_CLASS (klass)->apply = model_add_clip_command_real_apply;
+       MODEL_COMMAND_CLASS (klass)->undo = model_add_clip_command_real_undo;
+       MODEL_COMMAND_CLASS (klass)->merge = model_add_clip_command_real_merge;
+       MODEL_COMMAND_CLASS (klass)->description = model_add_clip_command_real_description;
+}
+
+
+static void model_add_clip_command_instance_init (ModelAddClipCommand * self) {
+       self->priv = MODEL_ADD_CLIP_COMMAND_GET_PRIVATE (self);
+}
+
+
+static void model_add_clip_command_finalize (ModelCommand* obj) {
+       ModelAddClipCommand * self;
+       self = MODEL_ADD_CLIP_COMMAND (obj);
+       _g_object_unref0 (self->priv->clip_file);
+       _g_object_unref0 (self->priv->project);
+       MODEL_COMMAND_CLASS (model_add_clip_command_parent_class)->finalize (obj);
+}
+
+
+GType model_add_clip_command_get_type (void) {
+       static volatile gsize model_add_clip_command_type_id__volatile = 0;
+       if (g_once_init_enter (&model_add_clip_command_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelAddClipCommandClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_add_clip_command_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelAddClipCommand), 0, (GInstanceInitFunc) model_add_clip_command_instance_init, NULL };
+               GType model_add_clip_command_type_id;
+               model_add_clip_command_type_id = g_type_register_static (MODEL_TYPE_COMMAND, "ModelAddClipCommand", &g_define_type_info, 0);
+               g_once_init_leave (&model_add_clip_command_type_id__volatile, model_add_clip_command_type_id);
+       }
+       return model_add_clip_command_type_id__volatile;
+}
+
+
+#line 386 "command.vala"
+ModelTransactionCommand* model_transaction_command_construct (GType object_type, gboolean open, const char* transaction_description) {
+#line 2343 "command.c"
+       ModelTransactionCommand* self;
+       char* _tmp0_;
+#line 386 "command.vala"
+       g_return_val_if_fail (transaction_description != NULL, NULL);
+#line 386 "command.vala"
+       self = (ModelTransactionCommand*) model_command_construct (object_type);
+#line 387 "command.vala"
+       self->priv->open = open;
+#line 388 "command.vala"
+       self->priv->transaction_description = (_tmp0_ = g_strdup (transaction_description), _g_free0 (self->priv->transaction_description), _tmp0_);
+#line 2354 "command.c"
+       return self;
+}
+
+
+#line 386 "command.vala"
+ModelTransactionCommand* model_transaction_command_new (gboolean open, const char* transaction_description) {
+#line 386 "command.vala"
+       return model_transaction_command_construct (MODEL_TYPE_TRANSACTION_COMMAND, open, transaction_description);
+#line 2363 "command.c"
+}
+
+
+#line 391 "command.vala"
+gboolean model_transaction_command_in_transaction (ModelTransactionCommand* self) {
+#line 2369 "command.c"
+       gboolean result = FALSE;
+#line 391 "command.vala"
+       g_return_val_if_fail (MODEL_IS_TRANSACTION_COMMAND (self), FALSE);
+#line 2373 "command.c"
+       result = self->priv->open;
+#line 392 "command.vala"
+       return result;
+#line 2377 "command.c"
+}
+
+
+#line 395 "command.vala"
+static void model_transaction_command_real_apply (ModelCommand* base) {
+#line 2383 "command.c"
+       ModelTransactionCommand * self;
+       self = MODEL_TRANSACTION_COMMAND (base);
+}
+
+
+#line 398 "command.vala"
+static void model_transaction_command_real_undo (ModelCommand* base) {
+#line 2391 "command.c"
+       ModelTransactionCommand * self;
+       self = MODEL_TRANSACTION_COMMAND (base);
+}
+
+
+#line 401 "command.vala"
+static gboolean model_transaction_command_real_merge (ModelCommand* base, ModelCommand* command) {
+#line 2399 "command.c"
+       ModelTransactionCommand * self;
+       gboolean result = FALSE;
+       self = MODEL_TRANSACTION_COMMAND (base);
+#line 401 "command.vala"
+       g_return_val_if_fail (MODEL_IS_COMMAND (command), FALSE);
+#line 2405 "command.c"
+       result = FALSE;
+#line 402 "command.vala"
+       return result;
+#line 2409 "command.c"
+}
+
+
+#line 405 "command.vala"
+static char* model_transaction_command_real_description (ModelCommand* base) {
+#line 2415 "command.c"
+       ModelTransactionCommand * self;
+       char* result = NULL;
+       self = MODEL_TRANSACTION_COMMAND (base);
+       result = g_strdup (self->priv->transaction_description);
+#line 406 "command.vala"
+       return result;
+#line 2422 "command.c"
+}
+
+
+static void model_transaction_command_class_init (ModelTransactionCommandClass * klass) {
+       model_transaction_command_parent_class = g_type_class_peek_parent (klass);
+       MODEL_COMMAND_CLASS (klass)->finalize = model_transaction_command_finalize;
+       g_type_class_add_private (klass, sizeof (ModelTransactionCommandPrivate));
+       MODEL_COMMAND_CLASS (klass)->apply = model_transaction_command_real_apply;
+       MODEL_COMMAND_CLASS (klass)->undo = model_transaction_command_real_undo;
+       MODEL_COMMAND_CLASS (klass)->merge = model_transaction_command_real_merge;
+       MODEL_COMMAND_CLASS (klass)->description = model_transaction_command_real_description;
+}
+
+
+static void model_transaction_command_instance_init (ModelTransactionCommand * self) {
+       self->priv = MODEL_TRANSACTION_COMMAND_GET_PRIVATE (self);
+}
+
+
+static void model_transaction_command_finalize (ModelCommand* obj) {
+       ModelTransactionCommand * self;
+       self = MODEL_TRANSACTION_COMMAND (obj);
+       _g_free0 (self->priv->transaction_description);
+       MODEL_COMMAND_CLASS (model_transaction_command_parent_class)->finalize (obj);
+}
+
+
+GType model_transaction_command_get_type (void) {
+       static volatile gsize model_transaction_command_type_id__volatile = 0;
+       if (g_once_init_enter (&model_transaction_command_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelTransactionCommandClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_transaction_command_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelTransactionCommand), 0, (GInstanceInitFunc) model_transaction_command_instance_init, NULL };
+               GType model_transaction_command_type_id;
+               model_transaction_command_type_id = g_type_register_static (MODEL_TYPE_COMMAND, "ModelTransactionCommand", &g_define_type_info, 0);
+               g_once_init_leave (&model_transaction_command_type_id__volatile, model_transaction_command_type_id);
+       }
+       return model_transaction_command_type_id__volatile;
+}
+
+
+
+