From: Ben Pfaff Date: Sun, 2 Jan 2022 03:27:31 +0000 (-0800) Subject: pivot-table: New functions for setting captions, etc. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp;a=commitdiff_plain;h=d36426b185fb94aa22cb7b13a7517247e27ae77b pivot-table: New functions for setting captions, etc. --- diff --git a/src/language/dictionary/sys-file-info.c b/src/language/dictionary/sys-file-info.c index 3ab4c04099..7f5216134c 100644 --- a/src/language/dictionary/sys-file-info.c +++ b/src/language/dictionary/sys-file-info.c @@ -1002,11 +1002,12 @@ report_encodings (const struct file_handle *h, struct pool *pool, struct pivot_table *table = pivot_table_create__ ( pivot_value_new_text_format (N_("Usable encodings for %s."), fh_get_name (h)), "Usable Encodings"); - table->caption = pivot_value_new_text_format ( - N_("Encodings that can successfully read %s (by specifying the encoding " - "name on the GET command's ENCODING subcommand). Encodings that " - "yield identical text are listed together."), - fh_get_name (h)); + pivot_table_set_caption ( + table, pivot_value_new_text_format ( + N_("Encodings that can successfully read %s (by specifying the encoding " + "name on the GET command's ENCODING subcommand). Encodings that " + "yield identical text are listed together."), + fh_get_name (h))); pivot_dimension_create (table, PIVOT_AXIS_COLUMN, N_("Encodings"), N_("Encodings")); @@ -1041,9 +1042,10 @@ report_encodings (const struct file_handle *h, struct pool *pool, pivot_value_new_text_format (N_("%s Encoded Text Strings"), fh_get_name (h)), "Alternate Encoded Text Strings"); - table->caption = pivot_value_new_text ( - N_("Text strings in the file dictionary that the previously listed " - "encodings interpret differently, along with the interpretations.")); + pivot_table_set_caption ( + table, pivot_value_new_text ( + N_("Text strings in the file dictionary that the previously listed " + "encodings interpret differently, along with the interpretations."))); pivot_dimension_create (table, PIVOT_AXIS_COLUMN, N_("Text"), N_("Text")); diff --git a/src/language/stats/factor.c b/src/language/stats/factor.c index 8a5efac14b..3c1ce6094e 100644 --- a/src/language/stats/factor.c +++ b/src/language/stats/factor.c @@ -1945,8 +1945,11 @@ show_correlation_matrix (const struct cmd_factor *factor, const struct idata *id } if (factor->print & PRINT_DETERMINANT) - table->caption = pivot_value_new_user_text_nocopy ( - xasprintf ("%s: %.2f", _("Determinant"), idata->detR)); + { + struct pivot_value *caption = pivot_value_new_user_text_nocopy ( + xasprintf ("%s: %.2f", _("Determinant"), idata->detR)); + pivot_table_set_caption (table, caption); + } pivot_table_submit (table); } diff --git a/src/output/pivot-table.c b/src/output/pivot-table.c index 6ba4c16f2e..a3325a1469 100644 --- a/src/output/pivot-table.c +++ b/src/output/pivot-table.c @@ -865,20 +865,20 @@ pivot_table_create (const char *title) struct pivot_table * pivot_table_create__ (struct pivot_value *title, const char *subtype) { - struct pivot_table *table = XZALLOC (struct pivot_table); - table->ref_cnt = 1; - table->show_title = true; - table->show_caption = true; - table->weight_format = (struct fmt_spec) { .type = FMT_F, .w = 40 }; - table->title = title; - table->subtype = subtype ? pivot_value_new_text (subtype) : NULL; - table->command_c = xstrdup_if_nonempty (output_get_command_name ()); - table->look = pivot_table_look_ref (pivot_table_look_get_default ()); - table->settings = fmt_settings_copy (settings_get_fmt_settings ()); - table->small = settings_get_small (); - - hmap_init (&table->cells); - + struct pivot_table *table = xmalloc (sizeof *table); + *table = (struct pivot_table) { + .ref_cnt = 1, + .show_title = true, + .show_caption = true, + .weight_format = (struct fmt_spec) { .type = FMT_F, .w = 40 }, + .title = title, + .subtype = subtype ? pivot_value_new_text (subtype) : NULL, + .command_c = xstrdup_if_nonempty (output_get_command_name ()), + .look = pivot_table_look_ref (pivot_table_look_get_default ()), + .settings = fmt_settings_copy (settings_get_fmt_settings ()), + .small = settings_get_small (), + .cells = HMAP_INITIALIZER (table->cells), + }; return table; } @@ -1191,6 +1191,43 @@ pivot_table_is_shared (const struct pivot_table *table) return table->ref_cnt > 1; } +static void +pivot_table_set_value__ (struct pivot_value **dstp, struct pivot_value *src) +{ + pivot_value_destroy (*dstp); + *dstp = src; +} + +/* Changes the title of TABLE to TITLE. Takes ownership of TITLE. */ +void +pivot_table_set_title (struct pivot_table *table, struct pivot_value *title) +{ + pivot_table_set_value__ (&table->title, title); +} + +/* Changes the subtype of TABLE to SUBTYPE. Takes ownership of SUBTYPE. */ +void +pivot_table_set_subtype (struct pivot_table *table, struct pivot_value *subtype) +{ + pivot_table_set_value__ (&table->subtype, subtype); +} + +/* Changes the corner text of TABLE to CORNER_TEXT. Takes ownership of + CORNER_TEXT. */ +void +pivot_table_set_corner_text (struct pivot_table *table, + struct pivot_value *corner_text) +{ + pivot_table_set_value__ (&table->corner_text, corner_text); +} + +/* Changes the caption of TABLE to CAPTION. Takes ownership of CAPTION. */ +void +pivot_table_set_caption (struct pivot_table *table, struct pivot_value *caption) +{ + pivot_table_set_value__ (&table->caption, caption); +} + /* Swaps axes A and B in TABLE. */ void pivot_table_swap_axes (struct pivot_table *table, @@ -2693,9 +2730,9 @@ pivot_value_new_user_text_nocopy (char *text) that pivot_value_new_variable() should be used for variable names). For strings that are part of the PSPP user interface, such as names of procedures, statistics, annotations, error messages, etc., use - pivot_value_new_text().j + pivot_value_new_text(). - The caller retains ownership of TEXT.*/ + The caller retains ownership of TEXT. */ struct pivot_value * pivot_value_new_user_text (const char *text, size_t length) { diff --git a/src/output/pivot-table.h b/src/output/pivot-table.h index e7e5ad403b..88edb62031 100644 --- a/src/output/pivot-table.h +++ b/src/output/pivot-table.h @@ -489,6 +489,12 @@ struct pivot_table *pivot_table_unshare (struct pivot_table *); void pivot_table_unref (struct pivot_table *); bool pivot_table_is_shared (const struct pivot_table *); +/* Titles. */ +void pivot_table_set_title (struct pivot_table *, struct pivot_value *); +void pivot_table_set_subtype (struct pivot_table *, struct pivot_value *); +void pivot_table_set_corner_text (struct pivot_table *, struct pivot_value *); +void pivot_table_set_caption (struct pivot_table *, struct pivot_value *); + /* Axes. */ void pivot_table_swap_axes (struct pivot_table *, enum pivot_axis_type, enum pivot_axis_type);