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)
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
;
28 #include <libxml/parser.h>
29 #include <libxml/tree.h>
30 #include "sushivision.h"
42 _sv_tokenval
**values
;
50 /* tokenization and API argument parsing *****************************/
53 // labelname name[:string]
54 // displayvalue number[: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
;
89 _sv_propmap_t
**submenu
;
90 void (*callback
)(sv_panel_t
*, GtkWidget
*);
99 #include "dimension.h"
100 #include "objective.h"
101 #include "panel-1d.h"
102 #include "panel-xy.h"
103 #include "panel-2d.h"
105 #include "gtksucks.h"
107 union _sv_panel_subtype
{
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.
118 double *scale_vals
[3];
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
{
148 _sv_spinner_t
*spinner
;
154 enum sv_background bg_type
;
155 _sv_dim_widget_t
**dim_scales
;
161 int map_progress_count
;
162 int map_complete_count
;
166 int legend_progress_count
;
167 int legend_complete_count
;
171 int plot_progress_count
;
172 int plot_complete_count
;
175 time_t last_map_throttle
;
180 int def_oversample_n
;
181 int def_oversample_d
;
183 int (*callback_precompute
)(sv_panel_t
*,void*);
184 void *callback_precompute_data
;
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
);
202 _sv_panel_undo_t
*panels
;
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
,
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
);