From 3a864fc3748cbee26d8f1a24b19f0fc97cb773d6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sim=C3=B3n=20Pena?= Date: Sun, 16 May 2010 12:24:50 +0200 Subject: [PATCH] Movie Info: First GObject version A value object to store info about a movie is added, adding GObject support. Current data types aren't final, but just mere placeholders. --- src/mvs-movie-info.c | 341 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/mvs-movie-info.h | 71 +++++++++++ 2 files changed, 412 insertions(+) create mode 100644 src/mvs-movie-info.c create mode 100644 src/mvs-movie-info.h diff --git a/src/mvs-movie-info.c b/src/mvs-movie-info.c new file mode 100644 index 0000000..26d25fb --- /dev/null +++ b/src/mvs-movie-info.c @@ -0,0 +1,341 @@ +/* + * mvs-movie-info.c + * + * This file is part of maevies + * Copyright (C) 2010 Simón Pena + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + */ + +#include "mvs-movie-info.h" + +G_DEFINE_TYPE (MvsMovieInfo, mvs_movie_info, G_TYPE_OBJECT) + +enum { + PROP_0, + PROP_HAS_STINGERS, + PROP_TITLE, + PROP_DIRECTOR, + PROP_CAST, + PROP_RANKING, + PROP_RELEASE_DATE, + PROP_OVERVIEW, + PROP_URL, + PROP_SCHEDULE, +}; + +#define GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), MVS_TYPE_MOVIE_INFO, MvsMovieInfoPrivate)) + +struct _MvsMovieInfoPrivate { + gboolean has_stingers; + gchar *title; + gchar *director; + gchar *cast; + gfloat ranking; + gchar *release_date; + gchar *overview; + gchar *url; + gchar *schedule; +}; + +static void +mvs_movie_info_get_property (GObject *object, guint property_id, + GValue *value, GParamSpec *pspec) +{ + MvsMovieInfo *self = MVS_MOVIE_INFO (object); + + switch (property_id) { + case PROP_HAS_STINGERS: + g_value_set_boolean (value, self->priv->has_stingers); + break; + case PROP_TITLE: + g_value_set_string (value, self->priv->title); + break; + case PROP_DIRECTOR: + g_value_set_string (value, self->priv->director); + break; + case PROP_CAST: + g_value_set_string (value, self->priv->cast); + break; + case PROP_RANKING: + g_value_set_float (value, self->priv->ranking); + break; + case PROP_RELEASE_DATE: + g_value_set_string (value, self->priv->release_date); + break; + case PROP_OVERVIEW: + g_value_set_string (value, self->priv->overview); + break; + case PROP_URL: + g_value_set_string (value, self->priv->url); + break; + case PROP_SCHEDULE: + g_value_set_string (value, self->priv->schedule); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +mvs_movie_info_set_property (GObject *object, guint property_id, + const GValue *value, GParamSpec *pspec) +{ + MvsMovieInfo *self = MVS_MOVIE_INFO (object); + GDate *date = NULL; + + switch (property_id) { + case PROP_HAS_STINGERS: + mvs_movie_info_set_stingers (self, g_value_get_boolean (value)); + break; + case PROP_TITLE: + mvs_movie_info_set_title (self, g_value_get_string (value)); + break; + case PROP_DIRECTOR: + mvs_movie_info_set_director (self, g_value_get_string (value)); + break; + case PROP_CAST: + mvs_movie_info_set_cast (self, g_value_get_string (value)); + break; + case PROP_RANKING: + mvs_movie_info_set_ranking (self, g_value_get_float (value)); + break; + case PROP_RELEASE_DATE: + mvs_movie_info_set_release_date (self, g_value_get_string (value)); + break; + case PROP_OVERVIEW: + mvs_movie_info_set_overview (self, g_value_get_string (value)); + break; + case PROP_URL: + mvs_movie_info_set_url (self, g_value_get_string (value)); + break; + case PROP_SCHEDULE: + mvs_movie_info_set_schedule (self, g_value_get_string (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +mvs_movie_info_finalize (GObject *object) +{ + MvsMovieInfo *self = MVS_MOVIE_INFO (object); + + g_free (self->priv->cast); + g_free (self->priv->director); + g_free (self->priv->overview); + g_free (self->priv->release_date); + g_free (self->priv->schedule); + g_free (self->priv->title); + g_free (self->priv->url); + + G_OBJECT_CLASS (mvs_movie_info_parent_class)->finalize (object); +} + +static void +mvs_movie_info_class_init (MvsMovieInfoClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (MvsMovieInfoPrivate)); + + object_class->get_property = mvs_movie_info_get_property; + object_class->set_property = mvs_movie_info_set_property; + object_class->finalize = mvs_movie_info_finalize; + + + g_object_class_install_property + (object_class, PROP_CAST, + g_param_spec_string ("cast", "Movie cast", "The movie cast", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + g_object_class_install_property + (object_class, PROP_DIRECTOR, + g_param_spec_string ("director", "Movie director", "The movie director", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + g_object_class_install_property + (object_class, PROP_HAS_STINGERS, + g_param_spec_boolean ("stingers", "Has stingers", "The movie has stingers", + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + g_object_class_install_property + (object_class, PROP_OVERVIEW, + g_param_spec_string ("overview", "Movie overview", "The movie overview", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + g_object_class_install_property + (object_class, PROP_RANKING, + g_param_spec_float ("ranking", "Movie ranking", "The movie ranking", + 0.0, + 10.0, + 5.0, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + g_object_class_install_property + (object_class, PROP_RELEASE_DATE, + g_param_spec_string ("release", "Movie release date", "The movie release date", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + g_object_class_install_property + (object_class, PROP_SCHEDULE, + g_param_spec_string ("schedule", "Movie schedule", "The movie schedule", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + g_object_class_install_property + (object_class, PROP_TITLE, + g_param_spec_string ("title", "Movie title", "The movie title", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + g_object_class_install_property + (object_class, PROP_URL, + g_param_spec_string ("url", "Movie URL", "The movie url", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); +} + +static void +mvs_movie_info_init (MvsMovieInfo *self) +{ + self->priv = GET_PRIVATE (self); + self->priv->cast = NULL; + self->priv->director = NULL; + self->priv->has_stingers = FALSE; + self->priv->overview = NULL; + self->priv->ranking = 5; + self->priv->release_date = NULL; + self->priv->schedule = NULL; + self->priv->title = NULL; + self->priv->url = NULL; +} + +MvsMovieInfo* +mvs_movie_info_new (void) +{ + return g_object_new (MVS_TYPE_MOVIE_INFO, NULL); +} + +gboolean +mvs_movie_info_set_stingers (MvsMovieInfo *self, gboolean has_stingers) +{ + g_return_val_if_fail (self, FALSE); + + self->priv->has_stingers = has_stingers; + + return TRUE; +} + +gboolean +mvs_movie_info_set_title (MvsMovieInfo *self, const gchar *title) +{ + g_return_val_if_fail (self, FALSE); + + g_free (self->priv->title); + + self->priv->title = g_strdup (title); + + return TRUE; +} + +gboolean +mvs_movie_info_set_director (MvsMovieInfo *self, const gchar *director) +{ + g_return_val_if_fail (self, FALSE); + + g_free (self->priv->director); + + self->priv->director = g_strdup (director); + + return TRUE; +} + +gboolean +mvs_movie_info_set_cast (MvsMovieInfo *self, const gchar *cast) +{ + g_return_val_if_fail (self, FALSE); + + g_free (self->priv->cast); + + self->priv->cast = g_strdup (cast); + + return TRUE; +} + +gboolean +mvs_movie_info_set_ranking (MvsMovieInfo *self, gfloat ranking) +{ + g_return_val_if_fail (self, FALSE); + g_return_val_if_fail (ranking < 10 && ranking > 0, FALSE); + + self->priv->ranking = ranking; + + return FALSE; +} + +gboolean +mvs_movie_info_set_release_date (MvsMovieInfo *self, + const gchar *released) +{ + g_return_val_if_fail (self, FALSE); + + g_free (self->priv->release_date); + + self->priv->release_date = g_strdup (released); + + return TRUE; +} +gboolean +mvs_movie_info_set_overview (MvsMovieInfo *self, + const gchar *overview) +{ + g_return_val_if_fail (self, FALSE); + + g_free (self->priv->overview); + + self->priv->overview = g_strdup (overview); + + return TRUE; +} + +gboolean +mvs_movie_info_set_url (MvsMovieInfo *self, const gchar *url) +{ + g_return_val_if_fail (self, FALSE); + + g_free (self->priv->url); + + self->priv->url = g_strdup (url); + + return TRUE; +} + +gboolean +mvs_movie_info_set_schedule (MvsMovieInfo *self, + const gchar *schedule) +{ + g_return_val_if_fail (self, FALSE); + + g_free (self->priv->schedule); + + self->priv->schedule = g_strdup (schedule); + + return TRUE; +} diff --git a/src/mvs-movie-info.h b/src/mvs-movie-info.h new file mode 100644 index 0000000..c6b002b --- /dev/null +++ b/src/mvs-movie-info.h @@ -0,0 +1,71 @@ +/* + * mvs-movie-info.h + * + * This file is part of maevies + * Copyright (C) 2010 Simón Pena + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + */ + +#ifndef _MVS_MOVIE_INFO +#define _MVS_MOVIE_INFO + +#include + +G_BEGIN_DECLS + +#define MVS_TYPE_MOVIE_INFO mvs_movie_info_get_type() +#define MVS_MOVIE_INFO(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), MVS_TYPE_MOVIE_INFO, MvsMovieInfo)) +#define MVS_MOVIE_INFO_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), MVS_TYPE_MOVIE_INFO, MvsMovieInfoClass)) +#define IS_MVS_MOVIE_INFO(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MVS_TYPE_MOVIE_INFO)) +#define IS_MVS_MOVIE_INFO_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), MVS_TYPE_MOVIE_INFO)) +#define MVS_MOVIE_INFO_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), MVS_TYPE_MOVIE_INFO, MvsMovieInfoClass)) + +typedef struct _MvsMovieInfoPrivate MvsMovieInfoPrivate; + +typedef struct { + GObject parent; + + /* */ + MvsMovieInfoPrivate *priv; +} MvsMovieInfo; + +typedef struct { + GObjectClass parent_class; +} MvsMovieInfoClass; + +GType mvs_movie_info_get_type (void); +MvsMovieInfo* mvs_movie_info_new (void); + +gboolean mvs_movie_info_set_stingers (MvsMovieInfo *self, + gboolean has_stingers); +gboolean mvs_movie_info_set_title (MvsMovieInfo *self, const gchar *title); +gboolean mvs_movie_info_set_director (MvsMovieInfo *self, + const gchar *director); +gboolean mvs_movie_info_set_cast (MvsMovieInfo *self, const gchar *cast); +gboolean mvs_movie_info_set_ranking (MvsMovieInfo *self, gfloat ranking); +gboolean mvs_movie_info_set_release_date (MvsMovieInfo *self, + const gchar *released); +gboolean mvs_movie_info_set_overview (MvsMovieInfo *self, + const gchar *overview); +gboolean mvs_movie_info_set_url (MvsMovieInfo *self, const gchar *url); +gboolean mvs_movie_info_set_schedule (MvsMovieInfo *self, + const gchar *schedule); + +G_END_DECLS + +#endif /* _MVS_MOVIE_INFO */ -- 1.7.9.5