X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Ftable-item.c;h=4860c3450c11f69a1719d0738370db9556a146a0;hb=1c02620baa5dd413e3284071f6a5184c1e77bf40;hp=b709273f9e6a7ec9a159baad759885926337eb28;hpb=dfd1972f7bcb550a4fc3b05dbe7e71d12334b0a7;p=pspp diff --git a/src/output/table-item.c b/src/output/table-item.c index b709273f9e..4860c3450c 100644 --- a/src/output/table-item.c +++ b/src/output/table-item.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 2009 Free Software Foundation, Inc. + Copyright (C) 2009, 2011, 2014 Free Software Foundation, Inc. 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 @@ -16,60 +16,38 @@ #include -#include +#include "output/table-provider.h" #include -#include -#include -#include -#include -#include +#include "libpspp/assertion.h" +#include "libpspp/cast.h" +#include "output/driver.h" +#include "output/output-item-provider.h" +#include "output/pivot-table.h" +#include "output/table-item.h" +#include "output/table-provider.h" #include "gl/xalloc.h" -/* Initializes ITEM as a table item for rendering TABLE. The new table item - initially has the specified CAPTION, which may be NULL if no caption is yet - available. The caller retains ownership of CAPTION. */ +#include "gettext.h" +#define _(msgid) gettext (msgid) + +/* Initializes ITEM as a table item for rendering PT. Takes ownership of + PT. */ struct table_item * -table_item_create (struct table *table, const char *caption) +table_item_create (struct pivot_table *pt) { + pivot_table_assign_label_depth (pt); + struct table_item *item = xmalloc (sizeof *item); - output_item_init (&item->output_item, &table_item_class); - item->table = table; - item->caption = caption != NULL ? xstrdup (caption) : NULL; + *item = (struct table_item) { + .output_item = OUTPUT_ITEM_INITIALIZER (&table_item_class), + .pt = pt, + }; return item; } -/* Returns the table contained by TABLE_ITEM. The caller must not modify or - unref the returned table. */ -const struct table * -table_item_get_table (const struct table_item *table_item) -{ - return table_item->table; -} - -/* Returns ITEM's caption, which is a null pointer if no caption has been - set. */ -const char * -table_item_get_caption (const struct table_item *item) -{ - return item->caption; -} - -/* Sets ITEM's caption to CAPTION, replacing any previous caption. Specify - NULL for CAPTION to clear any caption from ITEM. The caller retains - ownership of CAPTION. - - This function may only be used on a table_item that is unshared. */ -void -table_item_set_caption (struct table_item *item, const char *caption) -{ - assert (!table_item_is_shared (item)); - free (item->caption); - item->caption = caption != NULL ? xstrdup (caption) : NULL; -} - /* Submits TABLE_ITEM to the configured output drivers, and transfers ownership to the output subsystem. */ void @@ -78,15 +56,32 @@ table_item_submit (struct table_item *table_item) output_submit (&table_item->output_item); } +static const char * +table_item_get_label (const struct output_item *output_item) +{ + struct table_item *item = to_table_item (output_item); + + if (!item->cached_label) + { + if (!item->pt->title) + return _("Table"); + + item->cached_label = pivot_value_to_string (item->pt->title, item->pt); + } + return item->cached_label; +} + static void table_item_destroy (struct output_item *output_item) { struct table_item *item = to_table_item (output_item); - free (item->caption); - table_unref (item->table); + pivot_table_unref (item->pt); + free (item->cached_label); + free (item); } const struct output_item_class table_item_class = { + table_item_get_label, table_item_destroy, };