22
22
#include "games-score.h"
25
games_score_new (void)
24
G_DEFINE_TYPE (GamesScore, games_score, G_TYPE_OBJECT)
26
struct GamesScorePrivate {
29
gdouble time_double; /* minutes.seconds */
38
* Creates a new score object.
40
* Return value: the new #GamesScore
45
return g_object_new (GAMES_TYPE_SCORE, NULL);
49
* games_score_new_plain:
50
* @value: The value of the score.
52
* Creates a new score object.
54
* Return value: the new #GamesScore
57
games_score_new_plain (guint32 value)
59
GamesScore *score = g_object_new (GAMES_TYPE_SCORE, NULL);
60
score->priv->value.plain = value;
65
* games_score_new_time:
66
* @value: The timer value of the score.
68
* Creates a new score object.
70
* Return value: the new #GamesScore
73
games_score_new_time (gdouble value)
75
GamesScore *score = g_object_new (GAMES_TYPE_SCORE, NULL);
76
score->priv->value.time_double = value;
81
games_score_get_name (GamesScore *score)
83
return score->priv->name;
87
games_score_set_name (GamesScore *score, const gchar *name)
89
g_free (score->priv->name);
90
score->priv->name = g_strdup (name);
94
games_score_get_time (GamesScore *score)
96
return score->priv->time;
100
games_score_set_time (GamesScore *score, time_t time)
102
score->priv->time = time;
106
games_score_get_value_as_plain (GamesScore *score)
108
return score->priv->value.plain;
112
games_score_get_value_as_time (GamesScore *score)
114
return score->priv->value.time_double;
118
games_score_compare (GamesScoreStyle style,
123
case GAMES_SCORES_STYLE_PLAIN_DESCENDING:
124
if (a->priv->value.plain > b->priv->value.plain)
126
if (a->priv->value.plain < b->priv->value.plain)
129
case GAMES_SCORES_STYLE_PLAIN_ASCENDING:
130
if (a->priv->value.plain > b->priv->value.plain)
132
if (a->priv->value.plain < b->priv->value.plain)
135
case GAMES_SCORES_STYLE_TIME_DESCENDING:
136
if (a->priv->value.time_double > b->priv->value.time_double)
138
if (a->priv->value.time_double < b->priv->value.time_double)
141
case GAMES_SCORES_STYLE_TIME_ASCENDING:
142
if (a->priv->value.time_double > b->priv->value.time_double)
144
if (a->priv->value.time_double < b->priv->value.time_double)
149
("Uknown score style in games_score_compare - treating as equal.");
155
games_score_finalize (GObject * object)
157
GamesScore *score = GAMES_SCORE (object);
159
g_free (score->priv->name);
161
G_OBJECT_CLASS (games_score_parent_class)->finalize (object);
165
games_score_class_init (GamesScoreClass * klass)
167
GObjectClass *object_class = (GObjectClass *) klass;
169
object_class->finalize = games_score_finalize;
171
g_type_class_add_private (object_class, sizeof (GamesScorePrivate));
175
games_score_init (GamesScore *score)
28
177
const gchar* name;
30
newscore = g_slice_new0 (GamesScore);
31
newscore->time = time (NULL);
179
score->priv = G_TYPE_INSTANCE_GET_PRIVATE (score, GAMES_TYPE_SCORE, GamesScorePrivate);
181
score->priv->time = time (NULL);
32
182
/* FIXME: We don't handle the "Unknown" case. */
33
183
name = g_get_real_name ();
34
184
if (name[0] == '\0' || g_utf8_validate (name, -1, NULL) != TRUE) {
40
newscore->name = g_strdup (name);
46
games_score_dup (GamesScore * orig)
50
new = g_slice_new (GamesScore);
52
new->name = g_strdup (orig->name);
58
games_score_destroy (GamesScore * score)
61
g_slice_free (GamesScore, score);
65
games_score_compare_values (GamesScoreStyle style, GamesScoreValue a,
69
case GAMES_SCORES_STYLE_PLAIN_DESCENDING:
70
if (a.plain > b.plain)
72
if (a.plain < b.plain)
75
case GAMES_SCORES_STYLE_PLAIN_ASCENDING:
76
if (a.plain > b.plain)
78
if (a.plain < b.plain)
81
case GAMES_SCORES_STYLE_TIME_DESCENDING:
82
if (a.time_double > b.time_double)
84
if (a.time_double < b.time_double)
87
case GAMES_SCORES_STYLE_TIME_ASCENDING:
88
if (a.time_double > b.time_double)
90
if (a.time_double < b.time_double)
95
("Uknown score style in games_score_compare - treating as equal.");
101
games_score_compare (GamesScoreStyle style, GamesScore * a, GamesScore * b)
103
return games_score_compare_values (style, a->value, b->value);
190
score->priv->name = g_strdup (name);