Don't forget the new file
[xiph/unicode.git] / sushivision / internal.h
blobee98b1078484fd7cefe987b6a750eb59ef8e1cd6
1 /*
3 * sushivision copyright (C) 2006-2007 Monty <monty@xiph.org>
5 * sushivision is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2, or (at your option)
8 * any later version.
9 *
10 * sushivision is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with sushivision; see the file COPYING. If not, write to the
17 * Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
22 typedef struct _sv_undo _sv_undo_t;
24 #include <time.h>
25 #include <signal.h>
26 #include <pthread.h>
27 #include <gtk/gtk.h>
28 #include <libxml/parser.h>
29 #include <libxml/tree.h>
30 #include "sushivision.h"
32 typedef struct {
33 char *s;
34 double v;
35 } _sv_tokenval;
37 typedef struct {
38 char *name;
39 char *label;
41 int n;
42 _sv_tokenval **values;
43 } _sv_token;
45 typedef struct {
46 int n;
47 _sv_token **list;
48 } _sv_tokenlist;
50 /* tokenization and API argument parsing *****************************/
52 // name string
53 // labelname name[:string]
54 // displayvalue number[:string]
55 // flag string
56 // parameter {flag|string=number}
57 // parameterlist paramentry[, paramentry[...]]
58 // valuelist displayvalue[, displayvalue[...]]
59 // declparam label(parameterlist)
60 // nameparam name(parameterlist)
61 // namelist nameparam[, nameparam[...]]
63 extern char *_sv_tokenize_string(char *in);
64 extern _sv_tokenval *_sv_tokenize_number(char *in);
65 extern _sv_token *_sv_tokenize_name(char *in);
66 extern _sv_token *_sv_tokenize_labelname(char *in);
67 extern _sv_tokenval *_sv_tokenize_displayvalue(char *in);
68 extern _sv_tokenval *_sv_tokenize_flag(char *in);
69 extern _sv_tokenval *_sv_tokenize_parameter(char *in);
70 extern _sv_token *_sv_tokenize_parameterlist(char *in);
71 extern _sv_token *_sv_tokenize_valuelist(char *in);
72 extern _sv_token *_sv_tokenize_nameparam(char *in);
73 extern _sv_token *_sv_tokenize_declparam(char *in);
74 extern _sv_tokenlist *_sv_tokenize_namelist(char *in);
75 extern _sv_tokenlist *_sv_tokenize_noparamlist(char *in);
76 extern void _sv_tokenval_free(_sv_tokenval *t);
77 extern void _sv_token_free(_sv_token *t);
78 extern void _sv_tokenlist_free(_sv_tokenlist *l);
79 extern char *_sv_tokenize_escape(char *a);
82 /* used to glue numeric settings to semantic labels for menus/save files **/
83 typedef struct _sv_propmap _sv_propmap_t;
84 struct _sv_propmap {
85 char *left;
86 int value;
88 char *right;
89 _sv_propmap_t **submenu;
90 void (*callback)(sv_panel_t *, GtkWidget *);
93 #include "mapping.h"
94 #include "slice.h"
95 #include "spinner.h"
96 #include "slider.h"
97 #include "scale.h"
98 #include "plot.h"
99 #include "dimension.h"
100 #include "objective.h"
101 #include "panel-1d.h"
102 #include "panel-xy.h"
103 #include "panel-2d.h"
104 #include "xml.h"
105 #include "gtksucks.h"
107 union _sv_panel_subtype {
108 _sv_panelxy_t *xy;
109 _sv_panel1d_t *p1;
110 _sv_panel2d_t *p2;
113 // undo history; the panel types vary slightly, but only slightly, so
114 // for now we use a master undo type which leaves one or two fields
115 // unused for a given panel.
116 typedef struct {
117 int *mappings;
118 double *scale_vals[3];
120 int x_d;
121 int y_d;
123 double box[4];
124 int box_active;
126 int grid_mode;
127 int cross_mode;
128 int legend_mode;
129 int bg_mode;
130 int text_mode;
131 int menu_cursamp;
132 int oversample_n;
133 int oversample_d;
135 } _sv_panel_undo_t;
137 typedef union {
138 _sv_bythread_cache_1d_t p1;
139 _sv_bythread_cache_xy_t xy;
140 _sv_bythread_cache_2d_t p2;
141 } _sv_bythread_cache_t;
143 struct _sv_panel_internal {
144 GtkWidget *toplevel;
145 GtkWidget *topbox;
146 GtkWidget *plotbox;
147 GtkWidget *graph;
148 _sv_spinner_t *spinner;
149 GtkWidget *popmenu;
151 sv_dim_t *x_d;
152 sv_dim_t *y_d;
154 enum sv_background bg_type;
155 _sv_dim_widget_t **dim_scales;
156 int oldbox_active;
158 int realized;
160 int map_active;
161 int map_progress_count;
162 int map_complete_count;
163 int map_serialno;
165 int legend_active;
166 int legend_progress_count;
167 int legend_complete_count;
168 int legend_serialno;
170 int plot_active;
171 int plot_progress_count;
172 int plot_complete_count;
173 int plot_serialno;
175 time_t last_map_throttle;
177 int menu_cursamp;
178 int oversample_n;
179 int oversample_d;
180 int def_oversample_n;
181 int def_oversample_d;
183 int (*callback_precompute)(sv_panel_t *,void*);
184 void *callback_precompute_data;
186 // function bundles
187 void (*realize)(sv_panel_t *p);
188 int (*map_action)(sv_panel_t *p, _sv_bythread_cache_t *c);
189 int (*legend_action)(sv_panel_t *p);
190 int (*compute_action)(sv_panel_t *p, _sv_bythread_cache_t *c);
191 void (*request_compute)(sv_panel_t *p);
192 void (*crosshair_action)(sv_panel_t *p);
193 void (*print_action)(sv_panel_t *p, cairo_t *c, int w, int h);
194 int (*save_action)(sv_panel_t *p, xmlNodePtr pn);
195 int (*load_action)(sv_panel_t *p, _sv_panel_undo_t *u, xmlNodePtr pn, int warn);
197 void (*undo_log)(_sv_panel_undo_t *u, sv_panel_t *p);
198 void (*undo_restore)(_sv_panel_undo_t *u, sv_panel_t *p);
201 struct _sv_undo {
202 _sv_panel_undo_t *panels;
203 double *dim_vals[3];
206 extern void _sv_clean_exit(void);
207 extern void _sv_wake_workers(void);
208 extern int _sv_main_save(void);
209 extern int _sv_main_load(void);
210 extern void _sv_first_load_warning(int *);
213 extern sv_panel_t *_sv_panel_new(int number,
214 char *name,
215 char *objectivelist,
216 char *dimensionlist,
217 unsigned flags);
218 extern void _sv_panel_realize(sv_panel_t *p);
219 extern void _sv_panel_dirty_map(sv_panel_t *p);
220 extern void _sv_panel_dirty_map_throttled(sv_panel_t *p);
221 extern void _sv_panel_dirty_legend(sv_panel_t *p);
222 extern void _sv_panel_dirty_plot(sv_panel_t *p);
223 extern void _sv_panel_recompute(sv_panel_t *p);
224 extern void _sv_panel_clean_map(sv_panel_t *p);
225 extern void _sv_panel_clean_legend(sv_panel_t *p);
226 extern void _sv_panel_clean_plot(sv_panel_t *p);
227 extern void _sv_panel_undo_log(sv_panel_t *p, _sv_panel_undo_t *u);
228 extern void _sv_panel_undo_restore(sv_panel_t *p, _sv_panel_undo_t *u);
229 extern void _sv_panel_update_menus(sv_panel_t *p);
230 extern int _sv_panel_save(sv_panel_t *p, xmlNodePtr n);
231 extern int _sv_panel_load(sv_panel_t *p, _sv_panel_undo_t *u, xmlNodePtr n, int warn);
234 extern void _sv_map_set_throttle_time(sv_panel_t *p);
236 extern void _sv_undo_log();
237 extern void _sv_undo_push();
238 extern void _sv_undo_pop();
239 extern void _sv_undo_suspend();
240 extern void _sv_undo_resume();
241 extern void _sv_undo_restore();
242 extern void _sv_undo_up();
243 extern void _sv_undo_down();
245 extern sv_scale_t *_sv_scale_new_v(char *legend, char *first, char *second, va_list ap);
247 extern sig_atomic_t _sv_exiting;
248 extern char *_sv_filebase;
249 extern char *_sv_filename;
250 extern char *_sv_dirname;
251 extern char *_sv_cwdname;
253 extern int _sv_dimensions;
254 extern sv_dim_t **_sv_dimension_list;
255 extern int _sv_objectives;
256 extern sv_obj_t **_sv_objective_list;
257 extern int _sv_panels;
258 extern sv_panel_t **_sv_panel_list;
259 extern int _sv_undo_level;
260 extern int _sv_undo_suspended;
261 extern _sv_undo_t **_sv_undo_stack;
263 extern pthread_key_t _sv_dim_key;
264 extern pthread_key_t _sv_obj_key;
266 extern sv_obj_t *_sv_obj(char *name);
267 extern sv_dim_t *_sv_dim(char *name);