Convert AgDbChartSave a boxed type

This commit is contained in:
Gergely Polonkai 2014-09-25 16:13:54 +02:00
parent 41f054bf6f
commit 7fe82cdc68
4 changed files with 67 additions and 18 deletions

View File

@ -1926,7 +1926,7 @@ ag_chart_get_db_save(AgChart *chart, gint db_id)
{ {
GsweCoordinates *coords; GsweCoordinates *coords;
AgChartPrivate *priv = ag_chart_get_instance_private(chart); AgChartPrivate *priv = ag_chart_get_instance_private(chart);
AgDbChartSave *save_data = g_new0(AgDbChartSave, 1); AgDbChartSave *save_data = ag_db_chart_save_new();
GsweTimestamp *timestamp = gswe_moment_get_timestamp(GSWE_MOMENT(chart)); GsweTimestamp *timestamp = gswe_moment_get_timestamp(GSWE_MOMENT(chart));
GEnumClass *house_system_class; GEnumClass *house_system_class;
GEnumValue *house_system_enum; GEnumValue *house_system_enum;

View File

@ -39,6 +39,12 @@ typedef struct _AgDbPrivate {
G_DEFINE_QUARK(ag_db_error_quark, ag_db_error); G_DEFINE_QUARK(ag_db_error_quark, ag_db_error);
G_DEFINE_TYPE_WITH_PRIVATE(AgDb, ag_db, G_TYPE_OBJECT); G_DEFINE_TYPE_WITH_PRIVATE(AgDb, ag_db, G_TYPE_OBJECT);
G_DEFINE_BOXED_TYPE(
AgDbChartSave,
ag_db_chart_save,
(GBoxedCopyFunc)ag_db_chart_save_ref,
(GBoxedFreeFunc)ag_db_chart_save_unref
);
enum { enum {
COLUMN_CHART_ID, COLUMN_CHART_ID,
@ -564,7 +570,7 @@ ag_db_get(void)
* *
* Frees @save_data and all its fields * Frees @save_data and all its fields
*/ */
void static void
ag_db_chart_save_free(AgDbChartSave *save_data) ag_db_chart_save_free(AgDbChartSave *save_data)
{ {
if (!save_data) { if (!save_data) {
@ -594,6 +600,30 @@ ag_db_chart_save_free(AgDbChartSave *save_data)
g_free(save_data); g_free(save_data);
} }
AgDbChartSave *
ag_db_chart_save_ref(AgDbChartSave *save_data)
{
if (save_data == NULL) {
return NULL;
}
save_data->refcount++;
return save_data;
}
void
ag_db_chart_save_unref(AgDbChartSave *save_data)
{
if (save_data == NULL) {
return;
}
if (--save_data->refcount == 0) {
ag_db_chart_save_free(save_data);
}
}
/** /**
* ag_db_chart_save: * ag_db_chart_save:
* @db: the #AgDb object to operate on * @db: the #AgDb object to operate on
@ -797,6 +827,17 @@ ag_db_chart_save(AgDb *db, AgDbChartSave *save_data, GError **err)
return save_success; return save_success;
} }
AgDbChartSave *
ag_db_chart_save_new(void)
{
AgDbChartSave *save_data;
save_data = g_new0(AgDbChartSave, 1);
save_data->refcount = 1;
return save_data;
}
/** /**
* ag_db_chart_get_list: * ag_db_chart_get_list:
* @db: the #AgDb object to operate on * @db: the #AgDb object to operate on
@ -833,7 +874,7 @@ ag_db_chart_get_list(AgDb *db, GError **err)
while (gda_data_model_iter_move_next(iter)) { while (gda_data_model_iter_move_next(iter)) {
const GValue *value; const GValue *value;
AgDbChartSave *save_data = g_new0(AgDbChartSave, 1); AgDbChartSave *save_data = ag_db_chart_save_new();
value = gda_data_model_iter_get_value_at(iter, 0); value = gda_data_model_iter_get_value_at(iter, 0);
save_data->db_id = g_value_get_int(value); save_data->db_id = g_value_get_int(value);
@ -910,7 +951,7 @@ ag_db_chart_get_data_by_id(AgDb *db, guint row_id, GError **err)
return NULL; return NULL;
} }
save_data = g_new0(AgDbChartSave, 1); save_data = ag_db_chart_save_new();
/* id */ /* id */
value = gda_data_model_get_value_at( value = gda_data_model_get_value_at(

View File

@ -65,8 +65,12 @@ typedef struct _AgDbChartSave {
gdouble timezone; gdouble timezone;
gchar *house_system; gchar *house_system;
gchar *note; gchar *note;
gint refcount;
} AgDbChartSave; } AgDbChartSave;
GType ag_db_chart_save_get_type(void);
#define AG_TYPE_DB_CHART_SAVE (ag_db_chart_save_get_type())
typedef enum { typedef enum {
AG_DB_ERROR_NO_CHART, AG_DB_ERROR_NO_CHART,
AG_DB_ERROR_DATABASE_ERROR, AG_DB_ERROR_DATABASE_ERROR,
@ -76,12 +80,16 @@ GType ag_db_get_type(void) G_GNUC_CONST;
AgDb *ag_db_get(void); AgDb *ag_db_get(void);
void ag_db_chart_save_free(AgDbChartSave *save_data);
gboolean ag_db_chart_save(AgDb *db, gboolean ag_db_chart_save(AgDb *db,
AgDbChartSave *save_data, AgDbChartSave *save_data,
GError **err); GError **err);
AgDbChartSave *ag_db_chart_save_new(void);
AgDbChartSave *ag_db_chart_save_ref(AgDbChartSave *save_data);
void ag_db_chart_save_unref(AgDbChartSave *save_data);
GList *ag_db_chart_get_list(AgDb *db, GError **err); GList *ag_db_chart_get_list(AgDb *db, GError **err);
AgDbChartSave *ag_db_chart_get_data_by_id(AgDb *db, guint row_id, GError **err); AgDbChartSave *ag_db_chart_get_data_by_id(AgDb *db, guint row_id, GError **err);

View File

@ -720,7 +720,7 @@ ag_window_recalculate_chart(AgWindow *window, gboolean set_everything)
gtk_spin_button_update(GTK_SPIN_BUTTON(current)); gtk_spin_button_update(GTK_SPIN_BUTTON(current));
} }
edit_data = g_new0(AgDbChartSave, 1); edit_data = ag_db_chart_save_new();
edit_data->db_id = db_id; edit_data->db_id = db_id;
@ -798,13 +798,13 @@ ag_window_recalculate_chart(AgWindow *window, gboolean set_everything)
if (ag_db_chart_save_identical(edit_data, chart_data, !set_everything)) { if (ag_db_chart_save_identical(edit_data, chart_data, !set_everything)) {
g_debug("No redrawing needed"); g_debug("No redrawing needed");
ag_db_chart_save_free(edit_data); ag_db_chart_save_unref(edit_data);
ag_db_chart_save_free(chart_data); ag_db_chart_save_unref(chart_data);
return; return;
} }
ag_db_chart_save_free(chart_data); ag_db_chart_save_unref(chart_data);
g_debug("Recalculating chart data"); g_debug("Recalculating chart data");
@ -846,7 +846,7 @@ ag_window_recalculate_chart(AgWindow *window, gboolean set_everything)
ag_chart_set_note(priv->chart, edit_data->note); ag_chart_set_note(priv->chart, edit_data->note);
} }
ag_db_chart_save_free(edit_data); ag_db_chart_save_unref(edit_data);
} }
static void static void
@ -1257,7 +1257,7 @@ ag_window_can_close(AgWindow *window, gboolean display_dialog)
} }
} }
ag_db_chart_save_free(save_data); ag_db_chart_save_unref(save_data);
return ret; return ret;
} }
@ -1289,7 +1289,7 @@ ag_window_save_action(GSimpleAction *action,
); );
} }
ag_db_chart_save_free(priv->saved_data); ag_db_chart_save_unref(priv->saved_data);
priv->saved_data = save_data; priv->saved_data = save_data;
} }
} }
@ -1644,7 +1644,7 @@ ag_window_back_action(GSimpleAction *action,
if (ag_window_can_close(window, TRUE)) { if (ag_window_can_close(window, TRUE)) {
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->toolbar_aspect), TRUE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->toolbar_aspect), TRUE);
g_clear_object(&(priv->chart)); g_clear_object(&(priv->chart));
ag_db_chart_save_free(priv->saved_data); ag_db_chart_save_unref(priv->saved_data);
priv->saved_data = NULL; priv->saved_data = NULL;
ag_window_load_chart_list(window); ag_window_load_chart_list(window);
@ -1931,7 +1931,7 @@ ag_window_list_item_activated_cb(GdMainView *view,
"Error: %s", "Error: %s",
err->message err->message
); );
ag_db_chart_save_free(priv->saved_data); ag_db_chart_save_unref(priv->saved_data);
priv->saved_data = NULL; priv->saved_data = NULL;
return; return;
@ -2657,7 +2657,7 @@ ag_window_set_chart(AgWindow *window, AgChart *chart)
g_clear_object(&(priv->chart)); g_clear_object(&(priv->chart));
} }
ag_db_chart_save_free(priv->saved_data); ag_db_chart_save_unref(priv->saved_data);
priv->chart = chart; priv->chart = chart;
g_signal_connect( g_signal_connect(