File: seaview.h

package info (click to toggle)
seaview 1%3A4.7-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 2,000 kB
  • sloc: cpp: 28,348; ansic: 14,088; xml: 184; makefile: 30; sh: 10
file content (362 lines) | stat: -rw-r--r-- 16,545 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
#ifndef SEAVIEW_H
#define SEAVIEW_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <FL/Fl.H>
#if 100*FL_MAJOR_VERSION + FL_MINOR_VERSION < 103
#error Seaview requires FLTK version 1.3.0 or higher
#endif
#include <FL/Fl_Window.H>
#include <FL/Fl_Menu_Item.H>
#include <FL/Fl_Menu_Bar.H>
#include <FL/Fl_Browser.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Return_Button.H>
#include <FL/Fl_Repeat_Button.H>
#include <FL/Fl_Choice.H>
#include <FL/fl_draw.H>
#include <FL/fl_ask.H>
#include <FL/Fl_Native_File_Chooser.H>
#ifndef FALSE
#define FALSE 0
#define TRUE (!FALSE)
#endif

#if defined(__APPLE__) || defined(WIN32) 
#define MICRO
#endif

#ifdef NO_PDF
#define PDF_OR_PS "PostScript"
#define PDF_OR_PS_EXT "ps"
#else
#define PDF_OR_PS "PDF"
#define PDF_OR_PS_EXT "pdf"
#endif

#define fgets(a,b,c) my_fgets(a,b,c)
extern char *my_fgets(char *s, int n, FILE *f);

// FL_COMMAND is the modifier for menu shortcuts (Meta on Apple and Ctrl otherwise)
#ifndef FL_COMMAND
#if defined(__APPLE__) 
#define FL_COMMAND FL_META
#else
#define FL_COMMAND FL_CTRL
#endif
#endif

#ifdef WIN32
extern void my_bell(void); 
#define fopen(a,b) fl_fopen(a, b)
#define memccpy _memccpy
#elif defined __APPLE__
#else
#include "FL/x.H"
#endif
#define FL_max(a,b)      ( (a) > (b) ? (a):(b) )
#define FL_min(a,b)      ( (a) < (b) ? (a):(b) )
#ifdef __APPLE__
#define PREPARE_LABEL(p) mac_fname_to_roman(p)
extern void set_seaview_modified(struct _SEA_VIEW *view, int ismodified);
#else
#if defined(WIN32)
extern const char *win32_UTF8_to_CP1252(const char *in); 
#define PREPARE_LABEL(p) win32_UTF8_to_CP1252(p)
#else
#define PREPARE_LABEL(p) p
#endif
#define set_seaview_modified(view, ismodif) view->modif_but_not_saved = ismodif
#endif
typedef struct _user_data_plus {
	void *p;
	int value;
	} user_data_plus;
extern void fl_reset_cursor(Fl_Window *win);


#define MAXLENCOM 50000 /* long max des commentaires sous mase */
#define MAX_SPECIES_SETS 50 /* nbre max de species sets */
#define MSF_WID_NAME 15
#define CLU_BLOCK_LEN 5000 /* block pour allocation mem format Clustal */
#define MAX_GAP_SITES 1000
#define MOVEKEYS_DEFAULT "][><"

typedef struct _list_segments { /* one segment + pointer to its successor */
	int debut, fin;
	struct _list_segments *next;
	} list_segments;
	
typedef struct { /* one region = name + pointer to list of segments */
  char *name;
  int hide_when_viewasprots; /* TRUE iff this region shd not be enabled in view as protein mode */
  list_segments *list;
  } region;

typedef struct _list_regions { /* region list = pointer to region + 
				pointer to successor in list */
	region *element;
	struct _list_regions *next;
	} list_regions;

typedef struct {
	int pos;
	int l[2];
	} gap_site;
	
typedef enum {MASE_FORMAT, PHYLIP_FORMAT, CLUSTAL_FORMAT, MSF_FORMAT, 
	FASTA_FORMAT, NEXUS_FORMAT } 
	known_format;

typedef enum {OPEN_ANY, OPEN_MASE, OPEN_PHYLIP, OPEN_CLUSTAL, OPEN_MSF, OPEN_FASTA,
	OPEN_NEXUS, ACNUC_IMPORT, SAVE, SAVE_AS, SAVE_REGIONS, SAVE_PROT_ALIGN, SAVE_BOOTSTRAPS, PRINTOUT,
#if !defined(__APPLE__)
	PDFOPTIONS,
#endif
	CONCATENATE, NEW_WINDOW, CLOSE_WINDOW,QUIT
	} file_menu_choice;

typedef enum {NO_ALT_COLORS, USING_STANDARD_COLORS, USING_ALT_COLORS}
	color_choice;

typedef enum {COPY_SEQS, PASTE_SEQS, SELECT_ALL, RENAME_SEQ, EDIT_COMMENTS, EDIT_SEQ, DELETE_SEQ, CREATE_SEQ, 
	LOAD_SEQ, DUPLICATE_SEQ,
	COMPLEMENT_SEQ, REVERSE_SEQ, EXCHANGE_UT, DOT_PLOT,
	CONSENSUS_SEQ, DELETE_GAP_ONLY_SITES, SET_GCODE}
	edit_choice;

typedef enum { ALIGN_ALL, ALIGN_SELECTED_SEQS, ALIGN_SITES, PROFILE, UNALIGN, ALIGN_OPTIONS } align_choice;

typedef enum {SHOW_HIDE_FOOTERS, CREATE_FOOTER, DELETE_FOOTER }
	footers_menu_choice;
	
typedef enum {PDF_COLOR, PDF_BW, TEXT_ONLY, SVG} pdf_kind;

class vlength_menu // an FL_SUBMENU_POINTER-attached variable-length series of Fl_Menu_Item's
{
  int offset; // # of fixed items
  int vlen; // # of variable items
  Fl_Menu_Item *items; // array of fixed + variable menu items
  Fl_Menu_ *menu_; // menu of which this is a submenu
  int rank; // rank of menu item to which this is a submenu
  int val; // rank (from 1) of currently selected variable item
public:
  vlength_menu(Fl_Menu_ *m, const char *name, const Fl_Menu_Item *init, int clength);
  int vlength() {return vlen;} // lenth of variable part
  int value() { return val; } // 0 if unset, >=1 if one if set
  void value(int v); // 0 to clear, >=1 to set one
  Fl_Menu_Item *get_menu() {return items;} // fixed + variable parts
  void add(const char *txt, Fl_Callback *cb, void *data, int flags); // add at end of variable part
  Fl_Menu_Item* vitem(int r) { return items + offset + r; } // one of the variable items
  Fl_Menu_Item* bar_item() { return (Fl_Menu_Item*)menu_->menu() + rank; }
  void remove(int rank); // remove variable item of rank (from 0)
  Fl_Menu_Item* find_item(const char*txt);
  void vclear(); // remove all the variable part
  ~vlength_menu();
};

#define TREE_WINDOW "Tree"
#define SEAVIEW_WINDOW "Seaview"

typedef struct _SEA_VIEW {
  Fl_Widget *DNA_obj; /* free object for names + seqs */
  Fl_Scrollbar *horsli; /* horizontal scrollbar */
  Fl_Scrollbar *vertsli; /* vertical scrollbar */
  Fl_Widget *right_screen_move, *left_screen_move, *up_screen_move, 
		  *down_screen_move; /* 4 big jump arrows */
  Fl_Widget *multipl; /* box displaying the multiplier value */
  Fl_Menu_Bar *menubar;
  const Fl_Menu_Item *menu_file; /* menu items of file operations */
  const Fl_Menu_Item *menu_edit; /* menu items of edit operations */
  const Fl_Menu_Item *menu_align; /* menu of align operations */
  const Fl_Menu_Item *menu_props; /* menu of properties */
  vlength_menu *menu_sites; /* menu of site operations */
  vlength_menu *menu_species; /* menu of species */
  const Fl_Menu_Item *menu_footers; /* menu of footers */
  vlength_menu *menu_trees; /* menu of trees */
  Fl_Widget *bouton_reference; /* bouton_reference */
  char **sequence; /* array of sequences */
  char **comments; /* array of sequence comments */
  char *header; /* header of mase file */
  char **col_rank; /* array of color ranks of sequence sites */
  char **alt_col_rank; /* alternate array of color ranks of sequence sites for by reference */
  char **seqname; /* array of sequence names */
  char *masename; /* mase file name */
  int protein; /* TRUE iff protein data */
  known_format format_for_save; /* what file format used when saving */
  int wid_names; /* width of largest sequence name */
  int first_seq, first_site; /* first seq and site currently displayed */
  int tot_seqs; /* total number of sequences in memory */
  int seq_length; /* current length of longest sequence */
  int max_seq_length; /*max length allowed for longest sequence to grow */
  int *each_length; /* array of each individual sequence length */
  int tot_sites, tot_lines; /* sites and lines fitting in DNA_obj */
  int x_name, y_name, x_seq, y_seq; /* top left to start writing 
					  names and sequences */
  int draw_names; /*controle ecriture noms 0: pas ecrits; 
		  -1: tous ecrits puis aussi les seqs;
		  -2: tous ecrits mais pas les seqs;
		  >=1: 1 seul ecrit et pas de seq ni de curseur ecrit*/
  int mod_seq; /* -1: seqs selectionnees; 
		  0: normal; 
		  >= 1: 1 seul seq ecrite */
  int mod_cursor; /* FALSE: cursor ancien ignore; TRUE: ancien efface */
#if (100*FL_MAJOR_VERSION + FL_MINOR_VERSION >= 104) && !defined(__APPLE__)
  float scale; /* scaling factor used to compute char_width */
#endif
  float char_width; /* largeur en pixels des caracteres */
  int line_height; /* hauteur en pixels des lignes */
  int cursor_seq, cursor_site; /* position courante du curseur */
  int old_cursor_seq, old_cursor_site; /* position precedente du curseur*/
  int tot_sel_seqs; /* nbre courant de seqs selectionnees */
  int *sel_seqs; /* tableau des seqs selectionnees: T/F pour chacune */
  int *curr_colors; /*tableau des couleurs pour chaque valeur col_rank */
  int inverted_colors; /* TRUE iff use black letters on colored square */
  int namecolor; /* couleur utilisee pour les noms */
  int numb_gc; /* 1 en N&B, >1 en couleurs */
  int *dnacolors; /* tableau des couleurs pour DNA/RNA */
  int numb_dnacolors; /* nbre de couleurs pour DNA/RNA */
  int *stdprotcolors; /*tableau des couleurs standard pour prots*/
  int numb_stdprotcolors; /* nbre de couleurs standard pour prots */
  int *altprotcolors;/*tableau des couleurs alternatives pour prots*/
  int numb_altprotcolors; /*nbre de couleurs alternatives pour prots*/
  int *codoncolors; /*tableau des couleurs standard pour codons*/
  color_choice alt_colors; /* current aa color use */
  list_regions *regions; /* list of known regions */
  region *active_region; /* active region (NULL when none) */
  char *region_line; /* region line (of length region_length) */
  int region_color; /* color used to display region line */
  int region_length; /* length of region_line (==seq_length) */
  int mod_region_line; /* TRUE region line changed=>redraw only it */
  int numb_species_sets; /* number of known species sets */
  int *list_species_sets[MAX_SPECIES_SETS];/*list of known species sets*/
  char *name_species_sets[MAX_SPECIES_SETS];/*names of species sets*/
  int allow_seq_edit; /* when TRUE can type sequence data in */
  void *viewasprots; /* !=NULL when DNA displayed as proteins */
  int hjkl; /* when TRUE, keys hjklHJKL produce TCGA */
  int modif_but_not_saved; /* set/unset through function set_seaview_modified */
  Fl_Window *dnawin; /* full seaview window */
  int double_buffer; /* true iff DNA_obj is double buffered */
  int alignment_algorithm; /* rank (from 0) of chosen alignment algorithm */
  int count_msa_algos; /* number of usable alignment algorithms */
  char *clustal_options; /* options for clustalw if != NULL */
  int consensus_threshold; /* min threshold (%) for residue in consensus*/
  int consensus_allowgaps; /* TRUE iff gaps count as residue for consensus*/
  int consensus_allowiupac; /* TRUE iff IUPAC codes are used in consensus DNA sequences */
  int tot_comment_lines; /* number of comment lines */
  char **comment_line; /* array of comment lines */
  char **comment_name; /* array of comment names */
  int *comment_length; /* array of comment lengths */
  int show_comment_lines; /* TRUE when displayed */
  int pos_first_comment_line; /* rank on screen of this line */
  int mod_comment_line; /* 0: normal, >=1 celle-ci ecrite */
  int active_comment_line; /* 0: none, >=1 target of keyboard */
  int cursor_in_comment; /* TRUE when cursor is in comments not in seqs */
  int old_cursor_in_comment; /*previous place of cursor seq vs. comments*/
  char *movekeys; /* default ][><  keys to move seq right or left */
  int allow_lower; /* TRUE iff lowercase displayed in seqs */
  int phylipwidnames; /* max name length when writing PHYLIP files */
  int spaces_in_fasta_names; //TRUE iff spaces dont mark end of seq name n FASTA format
  int tot_trees; /* number of trees in next array */
  char **trees; /* array of trees */
} SEA_VIEW;
	

typedef struct _props_menu_parts {
	int colors, viewasprots, inverted, edit, reference, keys,
		consensusopt, slow_fast, allow_lower;
	int usingcodoncolors;
	} props_menu_parts;


extern void out_of_memory(void);
extern "C" void majuscules(char *s);
extern void init_dna_scroller(SEA_VIEW *view, int totseqs, 
	const char *masename, int protein, char *header);
extern const char *extract_filename(const char *fname);
extern const char *extract_dirname(const char *pathname);
extern void draw_region_line(Fl_Widget *ob, SEA_VIEW *view);
extern void props_button_callback(Fl_Widget *ob, long mainpop);
extern void regions_menu_callback(Fl_Widget *ob, void *extra);
extern void species_menu_callback(Fl_Widget *ob, void *extra);
extern void footers_menu_callback(Fl_Widget *ob, void *extra);
extern int suppr_segment(region *maregion, int site, char *line);
extern int begin_change_segment(SEA_VIEW *view, int new_site);
extern int continue_change_segment(SEA_VIEW *view, int new_site);
extern void end_change_segment(SEA_VIEW *view);
extern int extend_segment_at_left(SEA_VIEW *view, int new_site);
extern void delete_region_part(SEA_VIEW *view, int numsite, int total);
extern void insert_region_part(SEA_VIEW *view, int numsite, int total);
extern void delete_region(SEA_VIEW *view, int rang);
extern list_regions *parse_regions_from_header(char *header);
extern int parse_species_sets_from_header(char *header, int **list_species_sets,
	char **name_species_sets, int totseqs);
extern void set_tot_lines(SEA_VIEW *view, int new_val);
extern int read_mase_seqs_header(const char *, char ***pseq,char ***pseqname,
		char ***pcomments, char **pheader, char **err_message);
extern int read_fasta_align(const char *fname, char ***pseq, char ***pseqname, 
		char ***pcomments, char **pheader,  char **err_message, int spaces_in_names);
extern int read_phylip_align(const char *fname, char ***pseq, char ***pseqname, 
		char ***pcomments, char **pheader, char **);
extern int read_clustal_align(const char *fname, char ***pseq, char ***pseqname, 
		char ***pcomments, char **pheader, char **err_message);
extern int read_msf_align(const char *fname, char ***pseq, char ***pseqname, 
		char ***pcomments, char **pheader, char **err_message);
extern int read_nexus_align(char *fname, char ***pseqs, char ***pseqnames, 
	char ***pcomments, char **pheader, char **err_message, 
	list_regions **charsets, int *pnum_species_sets,
	int ***list_species_sets, char ***name_species_sets,
	int *ptot_comment_lines, char ***comment_name, char ***comment_line,
	int **comment_length, int *protein, SEA_VIEW *view);
extern char *save_alignment_or_region(const char *fname, char **seq, 
	char **comments,
	char *header, char **seqname, int totseqs, int *eachlength,
	list_regions *regions, region *region_used, known_format format,
	int numb_species_sets, int **list_species_sets, 
	char **name_species_sets, int *sel_seqs, int tot_sel_seqs, int protein,
	int tot_comment_lines, char **comment_name, char **comment_line, int phylipwidnames,
	int tot_trees, char **trees, const Fl_Menu_Item *menu_tree_items, int spaces_in_fasta_names);
extern Fl_Window *load_alignment_file(SEA_VIEW *view, char *filename, 
	const char *message, known_format file_format, int doing_dnd);
extern int is_a_protein_seq(char *seq);
extern int is_a_protein_alignment(SEA_VIEW *view);
extern char *get_full_path(const char *fname);
extern void draw_region_background(SEA_VIEW *view, int f_seq0, int l_seq0);
extern void load_seq_dialog(SEA_VIEW *view);
extern void edit_comments_dialog(SEA_VIEW *view);
extern void edit_sequence_dialog(SEA_VIEW *view);
extern int add_seq_to_align(SEA_VIEW *view, char *newname, char *newseq, int lenseq, bool no_gui = false);
extern int get_color_for_base( int key );
extern int get_color_for_aa( int key );
extern char **prepcolranks(char **seq, int totseqs, int maxlen, int *eachlength,
	int (*calc_color_function)( int ), int numb_gc, int allow_lower);
extern char complement_base(char old);
extern void select_deselect_seq(SEA_VIEW *view, int new_seq, int from_tree = 0);
extern void save_active_region(SEA_VIEW *view);
extern void align_selected_parts(SEA_VIEW *view, align_choice my_align_choice, bool no_gui = false);
extern void free_region(region *reg);
extern void my_watch_cursor(Fl_Window *win);
extern void update_current_seq_length(int newlength, SEA_VIEW *view);
extern char *cre_consensus(SEA_VIEW *view, char *newname);
extern int parse_comment_lines_from_header(char *header, char ***plines, 
	char ***pnames, int **plengths, int *pmax_seq_length);
extern int insert_char_in_comment(int key, int num, SEA_VIEW *view);
extern int delete_char_in_comment(SEA_VIEW *view, int count, int comnum, 
	int depart, int protect);
extern void update_menu_footers(SEA_VIEW *view);
extern int insert_gap_all_comments(int numgaps, int pos,  SEA_VIEW *view);
extern int delete_in_all_comments(int numdels, int pos,  SEA_VIEW *view);
extern char* fl_file_chooser(const char* message, const char* pat, const char* fname, int);
extern char *run_and_close_native_file_chooser(Fl_Native_File_Chooser *chooser, int keepalive=0);
extern void trees_callback(Fl_Widget *ob, void *data);
extern int save_fasta_file(const char *fname, char **seq, char **comments,
		    char **seqname, int totseqs, int *eachlength, region *region_used,
		    int *sel_seqs, int tot_sel_seqs, int spaces_in_names, int pad_to_max_length=FALSE);
#ifdef __APPLE__
extern char *mac_fname_to_roman(const char *in); 
#endif

#endif