1 /* PSPP - a program for statistical analysis.
2 Copyright (C) 2009, 2011 Free Software Foundation, Inc.
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
18 #define OUTPUT_ITEM_H 1
22 An output item is a self-contained chunk of output.
27 #include "libpspp/cast.h"
32 OUTPUT_ITEM_GROUP_OPEN,
33 OUTPUT_ITEM_GROUP_CLOSE,
36 OUTPUT_ITEM_PAGE_BREAK,
37 OUTPUT_ITEM_PAGE_SETUP,
42 /* A single output item. */
45 /* Reference count. An output item may be shared between multiple owners,
46 indicated by a reference count greater than 1. When this is the case,
47 the output item must not be modified. */
50 /* The localized label for the item that appears in the outline pane in the
51 PSPPIRE output viewer and in PDF outlines. This is NULL if no label has
54 Use output_item_get_label() to read an item's label. */
57 /* A locale-invariant identifier for the command that produced the output,
58 which may be NULL if unknown or if a command did not produce this
62 enum output_item_type type;
67 cairo_surface_t *image;
71 struct page_setup *page_setup;
73 struct pivot_table *table;
77 enum text_item_subtype
79 TEXT_ITEM_PAGE_TITLE, /* TITLE and SUBTITLE commands. */
80 TEXT_ITEM_TITLE, /* Title. */
81 TEXT_ITEM_SYNTAX, /* Syntax printback logging. */
82 TEXT_ITEM_LOG, /* Other logging. */
85 struct pivot_value *content;
93 struct output_item *output_item_ref (const struct output_item *);
94 void output_item_unref (struct output_item *);
95 bool output_item_is_shared (const struct output_item *);
96 struct output_item *output_item_unshare (struct output_item *);
98 void output_item_submit (struct output_item *);
100 const char *output_item_get_label (const struct output_item *);
101 void output_item_set_label (struct output_item *, const char *);
102 void output_item_set_label_nocopy (struct output_item *, char *);
104 /* OUTPUT_ITEM_CHART. */
105 struct output_item *chart_item_create (struct chart *);
107 /* OUTPUT_ITEM_GROUP_OPEN. */
108 struct output_item *group_open_item_create (const char *command_name,
110 struct output_item *group_open_item_create_nocopy (char *command_name,
113 /* OUTPUT_ITEM_GROUP_CLOSE. */
115 struct output_item *group_close_item_create (void);
117 /* OUTPUT_ITEM_IMAGE. */
119 struct output_item *image_item_create (cairo_surface_t *);
121 /* OUTPUT_ITEM_MESSAGE. */
123 struct output_item *message_item_create (const struct msg *);
125 const struct msg *message_item_get_msg (const struct output_item *);
127 struct output_item *message_item_to_text_item (struct output_item *);
129 /* OUTPUT_ITEM_PAGE_BREAK. */
131 struct output_item *page_break_item_create (void);
133 /* OUTPUT_ITEM_PAGE_SETUP. */
135 struct output_item *page_setup_item_create (const struct page_setup *);
137 /* OUTPUT_ITEM_TABLE. */
139 struct output_item *table_item_create (struct pivot_table *);
141 /* OUTPUT_ITEM_TEXT. */
143 struct output_item *text_item_create (enum text_item_subtype,
144 const char *text, const char *label);
145 struct output_item *text_item_create_nocopy (enum text_item_subtype,
146 char *text, char *label);
147 struct output_item *text_item_create_value (enum text_item_subtype,
148 struct pivot_value *value,
151 enum text_item_subtype text_item_get_subtype (const struct output_item *);
152 char *text_item_get_plain_text (const struct output_item *);
154 bool text_item_append (struct output_item *dst, const struct output_item *src);
156 struct output_item *text_item_to_table_item (struct output_item *);
158 const char *text_item_subtype_to_string (enum text_item_subtype);
160 #endif /* output/output-item.h */