summaryrefslogtreecommitdiff
path: root/src/plugins/properties/bacon-video-widget-properties.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/properties/bacon-video-widget-properties.c')
-rw-r--r--src/plugins/properties/bacon-video-widget-properties.c355
1 files changed, 273 insertions, 82 deletions
diff --git a/src/plugins/properties/bacon-video-widget-properties.c b/src/plugins/properties/bacon-video-widget-properties.c
index 779ef25b3..53e15d2d7 100644
--- a/src/plugins/properties/bacon-video-widget-properties.c
+++ b/src/plugins/properties/bacon-video-widget-properties.c
@@ -29,108 +29,324 @@
#include "bacon-video-widget-properties.h"
-static void bacon_video_widget_properties_dispose (GObject *object);
+static void bacon_video_widget_properties_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void bacon_video_widget_properties_set_label (GtkLabel *label, const char *text);
struct _BaconVideoWidgetProperties {
- GtkBox parent;
- GtkBuilder *xml;
+ GtkDialog parent;
+
+ /* General */
+ GtkLabel *title;
+ GtkLabel *artist;
+ GtkLabel *album;
+ GtkLabel *year;
+ GtkLabel *duration;
+ GtkLabel *comment;
+ GtkLabel *container;
+
+ /* Video */
+ GtkWidget *video_vbox;
+ GtkWidget *video;
+
+ GtkLabel *dimensions;
+ GtkLabel *vcodec;
+ GtkLabel *framerate;
+ GtkLabel *video_bitrate;
+
+ /* Audio */
+ GtkWidget *audio;
+
+ GtkLabel *acodec;
+ GtkLabel *channels;
+ GtkLabel *samplerate;
+ GtkLabel *audio_bitrate;
+
int time;
};
-G_DEFINE_TYPE (BaconVideoWidgetProperties, bacon_video_widget_properties, GTK_TYPE_BOX)
+G_DEFINE_TYPE (BaconVideoWidgetProperties, bacon_video_widget_properties, GTK_TYPE_DIALOG)
+
+enum {
+ PROP_0,
+ PROP_TITLE,
+ PROP_ARITST,
+ PROP_ALBUM,
+ PROP_YEAR,
+ PROP_DURATION,
+ PROP_COMMENT,
+ PROP_CONTAINER,
+ PROP_DIMENSIONS,
+ PROP_VIDEO_CODEC,
+ PROP_VIDEO_FRAMERATE,
+ PROP_VIDEO_BITRATE,
+ PROP_AUDIO_CODEC,
+ PROP_AUDIO_CHANNELS,
+ PROP_AUDIO_SAMPLERATE,
+ PROP_AUDIO_BITRATE,
+ N_PROPS
+};
+
+static GParamSpec *properties [N_PROPS];
static void
bacon_video_widget_properties_class_init (BaconVideoWidgetPropertiesClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->set_property = bacon_video_widget_properties_set_property;
+
+ /* General */
+ properties[PROP_TITLE] = g_param_spec_string ("media-title",
+ "Title",
+ "",
+ NULL,
+ G_PARAM_WRITABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
+ properties[PROP_ARITST] = g_param_spec_string ("artist",
+ "Artist",
+ "",
+ NULL,
+ G_PARAM_WRITABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
+ properties[PROP_ALBUM] = g_param_spec_string ("album",
+ "Album",
+ "",
+ NULL,
+ G_PARAM_WRITABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
+ properties[PROP_YEAR] = g_param_spec_string ("year",
+ "Year",
+ "",
+ NULL,
+ G_PARAM_WRITABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
+ properties[PROP_DURATION] = g_param_spec_int ("duration",
+ "Duration",
+ "",
+ 0,
+ G_MAXINT,
+ 0,
+ G_PARAM_WRITABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
+ properties[PROP_COMMENT] = g_param_spec_string ("comment",
+ "Comment",
+ "",
+ NULL,
+ G_PARAM_WRITABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
+ properties[PROP_CONTAINER] = g_param_spec_string ("container",
+ "Container",
+ "",
+ NULL,
+ G_PARAM_WRITABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
- object_class->dispose = bacon_video_widget_properties_dispose;
-}
+ /* Video */
+ properties[PROP_DIMENSIONS] = g_param_spec_string ("dimensions",
+ "Dimensions",
+ "",
+ NULL,
+ G_PARAM_WRITABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
+ properties[PROP_VIDEO_CODEC] = g_param_spec_string ("video-codec",
+ "Video codec",
+ "",
+ NULL,
+ G_PARAM_WRITABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
+ properties[PROP_VIDEO_FRAMERATE] = g_param_spec_float ("framerate",
+ "Video frame rate",
+ "",
+ 0.f,
+ G_MAXFLOAT,
+ 0.f,
+ G_PARAM_WRITABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
+ properties[PROP_VIDEO_BITRATE] = g_param_spec_string ("video-bitrate",
+ "Video bit rate",
+ "",
+ NULL,
+ G_PARAM_WRITABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
-static void
-bacon_video_widget_properties_init (BaconVideoWidgetProperties *props)
-{
- gtk_orientable_set_orientation (GTK_ORIENTABLE (props), GTK_ORIENTATION_VERTICAL);
+ /* Audio */
+ properties[PROP_AUDIO_CODEC] = g_param_spec_string ("audio-codec",
+ "Audio bit rate",
+ "",
+ NULL,
+ G_PARAM_WRITABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
+ properties[PROP_AUDIO_CHANNELS] = g_param_spec_string ("channels",
+ "Audio channels",
+ "",
+ NULL,
+ G_PARAM_WRITABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
+ properties[PROP_AUDIO_SAMPLERATE] = g_param_spec_string ("samplerate",
+ "Audio sample rate",
+ "",
+ NULL,
+ G_PARAM_WRITABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
+ properties[PROP_AUDIO_BITRATE] = g_param_spec_string ("audio-bitrate",
+ "Audio bit rate",
+ "",
+ NULL,
+ G_PARAM_WRITABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
+
+ g_object_class_install_properties (object_class, N_PROPS, properties);
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/totem/properties/properties.ui");
+
+ /* General */
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, title);
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, artist);
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, album);
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, year);
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, duration);
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, comment);
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, container);
+
+ /* Video */
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, video_vbox);
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, video);
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, dimensions);
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, vcodec);
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, framerate);
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, video_bitrate);
+
+ /* Audio */
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, audio);
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, acodec);
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, channels);
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, samplerate);
+ gtk_widget_class_bind_template_child (widget_class, BaconVideoWidgetProperties, audio_bitrate);
}
static void
-bacon_video_widget_properties_dispose (GObject *object)
+bacon_video_widget_properties_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
BaconVideoWidgetProperties *props = BACON_VIDEO_WIDGET_PROPERTIES (object);
- g_clear_object (&props->xml);
-
- G_OBJECT_CLASS (bacon_video_widget_properties_parent_class)->dispose (object);
+ switch (prop_id)
+ {
+ case PROP_TITLE:
+ bacon_video_widget_properties_set_label (props->title, g_value_get_string (value));
+ break;
+ case PROP_ARITST:
+ bacon_video_widget_properties_set_label (props->artist, g_value_get_string (value));
+ break;
+ case PROP_ALBUM:
+ bacon_video_widget_properties_set_label (props->album, g_value_get_string (value));
+ break;
+ case PROP_YEAR:
+ bacon_video_widget_properties_set_label (props->year, g_value_get_string (value));
+ break;
+ case PROP_DURATION:
+ bacon_video_widget_properties_set_duration (props, g_value_get_int (value));
+ break;
+ case PROP_COMMENT:
+ bacon_video_widget_properties_set_label (props->comment, g_value_get_string (value));
+ break;
+ case PROP_CONTAINER:
+ bacon_video_widget_properties_set_label (props->container, g_value_get_string (value));
+ break;
+ case PROP_DIMENSIONS:
+ bacon_video_widget_properties_set_label (props->dimensions, g_value_get_string (value));
+ break;
+ case PROP_VIDEO_CODEC:
+ bacon_video_widget_properties_set_label (props->vcodec, g_value_get_string (value));
+ break;
+ case PROP_VIDEO_FRAMERATE:
+ bacon_video_widget_properties_set_framerate (props, g_value_get_float (value));
+ break;
+ case PROP_VIDEO_BITRATE:
+ bacon_video_widget_properties_set_label (props->video_bitrate, g_value_get_string (value));
+ break;
+ case PROP_AUDIO_CODEC:
+ bacon_video_widget_properties_set_label (props->acodec, g_value_get_string (value));
+ break;
+ case PROP_AUDIO_CHANNELS:
+ bacon_video_widget_properties_set_label (props->channels, g_value_get_string (value));
+ break;
+ case PROP_AUDIO_SAMPLERATE:
+ bacon_video_widget_properties_set_label (props->samplerate, g_value_get_string (value));
+ break;
+ case PROP_AUDIO_BITRATE:
+ bacon_video_widget_properties_set_label (props->audio_bitrate, g_value_get_string (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
}
-void
-bacon_video_widget_properties_set_label (BaconVideoWidgetProperties *props,
- const char *name,
- const char *text)
+static void
+bacon_video_widget_properties_set_label (GtkLabel *label,
+ const char *text)
{
- GtkLabel *item;
+ gtk_label_set_text (label, text);
- g_return_if_fail (props != NULL);
- g_return_if_fail (BACON_IS_VIDEO_WIDGET_PROPERTIES (props));
- g_return_if_fail (name != NULL);
+ gtk_widget_set_visible (GTK_WIDGET (label), text != NULL && *text != '\0');
+}
- item = GTK_LABEL (gtk_builder_get_object (props->xml, name));
- g_return_if_fail (item != NULL);
- gtk_label_set_text (item, text);
+static void
+bacon_video_widget_properties_init (BaconVideoWidgetProperties *props)
+{
+ gtk_widget_init_template (GTK_WIDGET (props));
- gtk_widget_set_visible (GTK_WIDGET (item), text != NULL && *text != '\0');
+ bacon_video_widget_properties_reset (props);
}
void
bacon_video_widget_properties_reset (BaconVideoWidgetProperties *props)
{
- GtkWidget *item;
-
g_return_if_fail (props != NULL);
g_return_if_fail (BACON_IS_VIDEO_WIDGET_PROPERTIES (props));
- item = GTK_WIDGET (gtk_builder_get_object (props->xml, "video_vbox"));
- gtk_widget_show (item);
- item = GTK_WIDGET (gtk_builder_get_object (props->xml, "video"));
- gtk_widget_set_sensitive (item, FALSE);
- item = GTK_WIDGET (gtk_builder_get_object (props->xml, "audio"));
- gtk_widget_set_sensitive (item, FALSE);
+ gtk_widget_show (props->video_vbox);
+ gtk_widget_set_sensitive (props->video, FALSE);
+ gtk_widget_set_sensitive (props->audio, FALSE);
/* Title */
- bacon_video_widget_properties_set_label (props, "title", NULL);
+ bacon_video_widget_properties_set_label (props->title, NULL);
/* Artist */
- bacon_video_widget_properties_set_label (props, "artist", NULL);
+ bacon_video_widget_properties_set_label (props->artist, NULL);
/* Album */
- bacon_video_widget_properties_set_label (props, "album", NULL);
+ bacon_video_widget_properties_set_label (props->album, NULL);
/* Year */
- bacon_video_widget_properties_set_label (props, "year", NULL);
+ bacon_video_widget_properties_set_label (props->year, NULL);
/* Duration */
bacon_video_widget_properties_set_duration (props, 0);
/* Comment */
- bacon_video_widget_properties_set_label (props, "comment", "");
+ bacon_video_widget_properties_set_label (props->comment, "");
/* Container */
- bacon_video_widget_properties_set_label (props, "container", NULL);
+ bacon_video_widget_properties_set_label (props->container, NULL);
/* Dimensions */
- bacon_video_widget_properties_set_label (props, "dimensions", C_("Dimensions", "N/A"));
+ bacon_video_widget_properties_set_label (props->dimensions, C_("Dimensions", "N/A"));
/* Video Codec */
- bacon_video_widget_properties_set_label (props, "vcodec", C_("Video codec", "N/A"));
+ bacon_video_widget_properties_set_label (props->vcodec, C_("Video codec", "N/A"));
/* Video Bitrate */
- bacon_video_widget_properties_set_label (props, "video_bitrate",
+ bacon_video_widget_properties_set_label (props->video_bitrate,
C_("Video bit rate", "N/A"));
/* Framerate */
- bacon_video_widget_properties_set_label (props, "framerate",
+ bacon_video_widget_properties_set_label (props->framerate,
C_("Frame rate", "N/A"));
/* Audio Bitrate */
- bacon_video_widget_properties_set_label (props, "audio_bitrate",
+ bacon_video_widget_properties_set_label (props->audio_bitrate,
C_("Audio bit rate", "N/A"));
/* Audio Codec */
- bacon_video_widget_properties_set_label (props, "acodec", C_("Audio codec", "N/A"));
+ bacon_video_widget_properties_set_label (props->acodec, C_("Audio codec", "N/A"));
/* Sample rate */
- bacon_video_widget_properties_set_label (props, "samplerate", _("0 Hz"));
+ bacon_video_widget_properties_set_label (props->samplerate, _("0 Hz"));
/* Channels */
- bacon_video_widget_properties_set_label (props, "channels", _("0 Channels"));
+ bacon_video_widget_properties_set_label (props->channels, _("0 Channels"));
}
static char *
@@ -204,7 +420,7 @@ bacon_video_widget_properties_set_duration (BaconVideoWidgetProperties *props,
return;
string = time_to_string_text (_time);
- bacon_video_widget_properties_set_label (props, "duration", string);
+ bacon_video_widget_properties_set_label (props->duration, string);
g_free (string);
props->time = _time;
@@ -215,20 +431,15 @@ bacon_video_widget_properties_set_has_type (BaconVideoWidgetProperties *props,
gboolean has_video,
gboolean has_audio)
{
- GtkWidget *item;
-
g_return_if_fail (props != NULL);
g_return_if_fail (BACON_IS_VIDEO_WIDGET_PROPERTIES (props));
/* Video */
- item = GTK_WIDGET (gtk_builder_get_object (props->xml, "video"));
- gtk_widget_set_sensitive (item, has_video);
- item = GTK_WIDGET (gtk_builder_get_object (props->xml, "video_vbox"));
- gtk_widget_set_visible (item, has_video);
+ gtk_widget_set_sensitive (props->video, has_video);
+ gtk_widget_set_visible (props->video_vbox, has_video);
/* Audio */
- item = GTK_WIDGET (gtk_builder_get_object (props->xml, "audio"));
- gtk_widget_set_sensitive (item, has_audio);
+ gtk_widget_set_sensitive (props->audio, has_audio);
}
void
@@ -254,35 +465,15 @@ bacon_video_widget_properties_set_framerate (BaconVideoWidgetProperties *props,
} else {
temp = g_strdup (C_("Frame rate", "N/A"));
}
- bacon_video_widget_properties_set_label (props, "framerate", temp);
+ bacon_video_widget_properties_set_label (props->framerate, temp);
g_free (temp);
}
GtkWidget*
-bacon_video_widget_properties_new (void)
+bacon_video_widget_properties_new (GtkWindow *transient_for)
{
- BaconVideoWidgetProperties *props;
- GtkBuilder *xml;
- GtkWidget *vbox;
-
- xml = gtk_builder_new ();
- gtk_builder_set_translation_domain (xml, GETTEXT_PACKAGE);
- if (gtk_builder_add_from_resource (xml, "/org/gnome/totem/properties/properties.ui", NULL) == 0) {
- g_object_unref (xml);
- return NULL;
- }
-
- props = BACON_VIDEO_WIDGET_PROPERTIES (g_object_new
- (BACON_TYPE_VIDEO_WIDGET_PROPERTIES, NULL));
-
- props->xml = xml;
- vbox = GTK_WIDGET (gtk_builder_get_object (props->xml, "sw_properties"));
- gtk_box_pack_start (GTK_BOX (props), vbox, TRUE, TRUE, 0);
-
- bacon_video_widget_properties_reset (props);
-
- gtk_widget_show (GTK_WIDGET (vbox));
-
- return GTK_WIDGET (props);
+ return g_object_new (BACON_TYPE_VIDEO_WIDGET_PROPERTIES,
+ "transient-for", transient_for,
+ NULL);
}