X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fui%2Fgui%2Fpsppire-var-store.c;h=eb97401eb793a608ea8d86f69b3036ac135b7de8;hb=3a61659a8fc11c51ad5af02b20f5613dcde50382;hp=9abf8653594ac5b49f34bea03a9c8a19d06f9e9b;hpb=655bf3a3917cdf16f99fcbb680d2bf3159126a93;p=pspp-builds.git diff --git a/src/ui/gui/psppire-var-store.c b/src/ui/gui/psppire-var-store.c index 9abf8653..eb97401e 100644 --- a/src/ui/gui/psppire-var-store.c +++ b/src/ui/gui/psppire-var-store.c @@ -46,13 +46,14 @@ #include +#define TRAILING_ROWS 40 static void psppire_var_store_init (PsppireVarStore *var_store); static void psppire_var_store_class_init (PsppireVarStoreClass *class); static void psppire_var_store_sheet_model_init (GSheetModelIface *iface); static void psppire_var_store_finalize (GObject *object); -static gchar *psppire_var_store_get_string(GSheetModel *sheet_model, gint row, gint column); +static gchar *psppire_var_store_get_string(const GSheetModel *sheet_model, gint row, gint column); static gboolean psppire_var_store_clear(GSheetModel *model, gint row, gint col); @@ -60,10 +61,15 @@ static gboolean psppire_var_store_clear(GSheetModel *model, gint row, gint col static gboolean psppire_var_store_set_string(GSheetModel *model, const gchar *text, gint row, gint column); +static gint psppire_var_store_get_row_count(const GSheetModel * model); static gchar *text_for_column(const struct PsppireVariable *pv, gint c, GError **err); +static void psppire_var_store_sheet_row_init (GSheetRowIface *iface); + + + static GObjectClass *parent_class = NULL; GType @@ -93,12 +99,24 @@ psppire_var_store_get_type (void) NULL }; - var_store_type = g_type_register_static (G_TYPE_OBJECT, "PsppireVarStore", - &var_store_info, 0); + static const GInterfaceInfo sheet_row_info = + { + (GInterfaceInitFunc) psppire_var_store_sheet_row_init, + NULL, + NULL + }; + + var_store_type = g_type_register_static (G_TYPE_OBJECT, "PsppireVarStore", &var_store_info, 0); g_type_add_interface_static (var_store_type, G_TYPE_SHEET_MODEL, &sheet_model_info); + + g_type_add_interface_static (var_store_type, + G_TYPE_SHEET_ROW, + &sheet_row_info); + + } return var_store_type; @@ -169,7 +187,7 @@ psppire_var_store_item_editable(PsppireVarStore *var_store, gint row, gint colum } static gboolean -psppire_var_store_is_editable(GSheetModel *model, gint row, gint column) +psppire_var_store_is_editable(const GSheetModel *model, gint row, gint column) { PsppireVarStore *store = PSPPIRE_VAR_STORE(model); return psppire_var_store_item_editable(store, row, column); @@ -177,7 +195,7 @@ psppire_var_store_is_editable(GSheetModel *model, gint row, gint column) static const GdkColor * -psppire_var_store_get_foreground(GSheetModel *model, gint row, gint column) +psppire_var_store_get_foreground(const GSheetModel *model, gint row, gint column) { PsppireVarStore *store = PSPPIRE_VAR_STORE(model); @@ -189,7 +207,7 @@ psppire_var_store_get_foreground(GSheetModel *model, gint row, gint column) const PangoFontDescription * -psppire_var_store_get_font_desc(GSheetModel *model, +psppire_var_store_get_font_desc(const GSheetModel *model, gint row, gint column) { PsppireVarStore *store = PSPPIRE_VAR_STORE(model); @@ -202,6 +220,7 @@ psppire_var_store_get_font_desc(GSheetModel *model, static void psppire_var_store_sheet_model_init (GSheetModelIface *iface) { + iface->get_row_count = psppire_var_store_get_row_count; iface->free_strings = TRUE; iface->get_string = psppire_var_store_get_string; iface->set_string = psppire_var_store_set_string; @@ -301,7 +320,7 @@ psppire_var_store_finalize (GObject *object) } static gchar * -psppire_var_store_get_string(GSheetModel *model, gint row, gint column) +psppire_var_store_get_string(const GSheetModel *model, gint row, gint column) { PsppireVarStore *store = PSPPIRE_VAR_STORE(model); @@ -485,9 +504,12 @@ text_for_column(const struct PsppireVariable *pv, gint c, GError **err) case FMT_A: return g_locale_to_utf8(gettext(type_label[VT_STRING]), -1, 0, 0, err); break; - default: - g_warning("Unknown format: \"%s\"\n", - fmt_to_string(write_spec)); + default: + { + char str[FMT_STRING_LEN_MAX + 1]; + g_warning("Unknown format: \"%s\"\n", + fmt_to_string(write_spec, str)); + } break; } } @@ -496,7 +518,7 @@ text_for_column(const struct PsppireVariable *pv, gint c, GError **err) { gchar *s; GString *gstr = g_string_sized_new(10); - g_string_printf(gstr, "%d", write_spec->w); + g_string_printf(gstr, _("%d"), write_spec->w); s = g_locale_to_utf8(gstr->str, gstr->len, 0, 0, err); g_string_free(gstr, TRUE); return s; @@ -506,7 +528,7 @@ text_for_column(const struct PsppireVariable *pv, gint c, GError **err) { gchar *s; GString *gstr = g_string_sized_new(10); - g_string_printf(gstr, "%d", write_spec->d); + g_string_printf(gstr, _("%d"), write_spec->d); s = g_locale_to_utf8(gstr->str, gstr->len, 0, 0, err); g_string_free(gstr, TRUE); return s; @@ -516,7 +538,7 @@ text_for_column(const struct PsppireVariable *pv, gint c, GError **err) { gchar *s; GString *gstr = g_string_sized_new(10); - g_string_printf(gstr, "%d", psppire_variable_get_columns(pv)); + g_string_printf(gstr, _("%d"), psppire_variable_get_columns(pv)); s = g_locale_to_utf8(gstr->str, gstr->len, 0, 0, err); g_string_free(gstr, TRUE); return s; @@ -617,14 +639,21 @@ text_for_column(const struct PsppireVariable *pv, gint c, GError **err) } break; case COL_ALIGN: - return g_locale_to_utf8(gettext(alignments[psppire_variable_get_alignment(pv)]), - -1, -0, 0, err); + { + const gint align = psppire_variable_get_alignment(pv); + + g_assert(align < n_ALIGNMENTS); + return g_locale_to_utf8(gettext(alignments[align]), -1, 0, 0, err); + } break; case COL_MEASURE: - return g_locale_to_utf8(gettext(measures[psppire_variable_get_measure(pv)]), - -1, -0, 0, err); - break; + { + const gint measure = psppire_variable_get_measure(pv); + g_assert(measure < n_MEASURES); + return g_locale_to_utf8(gettext(measures[measure]), -1, 0, 0, err); + } + break; } return 0; } @@ -651,5 +680,75 @@ psppire_var_store_set_font(PsppireVarStore *store, const PangoFontDescription *f } +static gint +psppire_var_store_get_row_count(const GSheetModel * model) +{ + gint rows = 0; + PsppireVarStore *vs = PSPPIRE_VAR_STORE(model); + + if (vs->dict) + rows = psppire_dict_get_var_cnt(vs->dict); + + return rows ; +} + +/* Row related funcs */ + +static gint +geometry_get_row_count(const GSheetRow *geom, gpointer data) +{ + gint rows = 0; + PsppireVarStore *vs = PSPPIRE_VAR_STORE(geom); + + if (vs->dict) + rows = psppire_dict_get_var_cnt(vs->dict); + return rows + TRAILING_ROWS; +} + +static gint +geometry_get_height(const GSheetRow *geom, gint row, gpointer data) +{ + return 25; +} + + +static gboolean +geometry_is_sensitive(const GSheetRow *geom, gint row, gpointer data) +{ + PsppireVarStore *vs = PSPPIRE_VAR_STORE(geom); + + if ( ! vs->dict) + return FALSE; + + return row < psppire_dict_get_var_cnt(vs->dict); +} + +static +gboolean always_true() +{ + return TRUE; +} + + +static gchar * +geometry_get_button_label(const GSheetRow *geom, gint unit, gpointer data) +{ + gchar *label = g_strdup_printf(_("%d"), unit); + + return label; +} + + +static void +psppire_var_store_sheet_row_init (GSheetRowIface *iface) +{ + iface->get_row_count = geometry_get_row_count; + iface->get_height = geometry_get_height; + iface->set_height = 0; + iface->get_visibility = always_true; + iface->get_sensitivity = geometry_is_sensitive; + + iface->get_button_label = geometry_get_button_label; +}