1 | #include <stdio.h> |
---|
2 | #include <memory.h> |
---|
3 | #include <stdlib.h> |
---|
4 | |
---|
5 | #include <arbdb.h> |
---|
6 | #include <arbdbt.h> |
---|
7 | #include <aw_root.hxx> |
---|
8 | #include <aw_window.hxx> |
---|
9 | #include <awt.hxx> |
---|
10 | #include <awt_canvas.hxx> |
---|
11 | #include <awt_tree.hxx> |
---|
12 | #include <awt_dtree.hxx> |
---|
13 | |
---|
14 | |
---|
15 | #include <ntree.hxx> |
---|
16 | #include <seer.hxx> |
---|
17 | #include <seer_interface.hxx> |
---|
18 | |
---|
19 | SEER_GLOBAL seer_global; |
---|
20 | |
---|
21 | void SEER_query_seer_cb(AW_window *aww){ |
---|
22 | aw_openstatus("Query Database"); |
---|
23 | char *alignment_name = aww->get_root()->awar(AWAR_SEER_ALIGNMENT_NAME)->read_string(); |
---|
24 | char *attribute_name = aww->get_root()->awar(AWAR_SEER_QUERY_ATTRIBUTE)->read_string(); |
---|
25 | char *query_string = aww->get_root()->awar(AWAR_SEER_QUERY_STRING)->read_string(); |
---|
26 | int load_sequence_flag = aww->get_root()->awar(AWAR_SEER_LOAD_SEQUENCES)->read_int(); |
---|
27 | |
---|
28 | GB_ERROR error = SEER_query(alignment_name,attribute_name,query_string,load_sequence_flag); |
---|
29 | delete alignment_name; |
---|
30 | delete attribute_name; |
---|
31 | delete query_string; |
---|
32 | aw_closestatus(); |
---|
33 | if (error){ |
---|
34 | aw_message(error); |
---|
35 | }else{ |
---|
36 | seer_global.query_seer_window->hide(); |
---|
37 | } |
---|
38 | } |
---|
39 | |
---|
40 | void SEER_load_marked(AW_window *aww){ |
---|
41 | char *alignment_name = aww->get_root()->awar(AWAR_SEER_ALIGNMENT_NAME)->read_string(); |
---|
42 | int load_sequence_flag = aww->get_root()->awar(AWAR_SEER_LOAD_SEQUENCES)->read_int(); |
---|
43 | SEER_load_marked(alignment_name,load_sequence_flag); |
---|
44 | delete alignment_name; |
---|
45 | } |
---|
46 | |
---|
47 | void SEER_create_skeleton_for_tree_cb(AW_window *){ |
---|
48 | GB_begin_transaction(gb_main); |
---|
49 | if (nt.tree && nt.tree->tree_root){ |
---|
50 | SEER_create_skeleton_for_tree((GBT_TREE *)nt.tree->tree_root); |
---|
51 | }else{ |
---|
52 | aw_message("Please select a valid tree"); |
---|
53 | } |
---|
54 | GB_commit_transaction(gb_main); |
---|
55 | } |
---|
56 | |
---|
57 | long seer_extract_attributes_to_query(const char *,long val){ |
---|
58 | SeerInterfaceAttribute *siat = (SeerInterfaceAttribute *)val; |
---|
59 | if (siat->queryable){ |
---|
60 | char buffer[256]; |
---|
61 | if (siat->requested){ |
---|
62 | sprintf(buffer,"* %s",siat->name); |
---|
63 | }else{ |
---|
64 | sprintf(buffer," %s",siat->name); |
---|
65 | } |
---|
66 | seer_global.query_seer_window->insert_selection(seer_global.tmp_selection_list,buffer,siat->name); |
---|
67 | } |
---|
68 | return val; |
---|
69 | } |
---|
70 | |
---|
71 | AW_window *SEER_query_seer_and_get(AW_root *aw_root){ |
---|
72 | AW_window_simple *aws = new AW_window_simple; |
---|
73 | aws->init( aw_root, "SEER_QUERY", "QUERY SEER", 400, 100 ); |
---|
74 | seer_global.query_seer_window = aws; |
---|
75 | |
---|
76 | aws->load_xfig("seer/query_seer.fig"); |
---|
77 | |
---|
78 | aws->callback( AW_POPDOWN); |
---|
79 | aws->at("close"); |
---|
80 | aws->create_button("CANCEL","CANCEL","C"); |
---|
81 | |
---|
82 | aws->at("help"); |
---|
83 | aws->callback(AW_POPUP_HELP,(AW_CL)"seer/query_seers.hlp"); |
---|
84 | aws->create_button("HELP","HELP","H"); |
---|
85 | |
---|
86 | aws->button_length(0); |
---|
87 | aws->at("logo"); |
---|
88 | aws->create_button(0,"#seer/seer.bitmap"); |
---|
89 | |
---|
90 | aws->button_length(20); |
---|
91 | |
---|
92 | aw_root->awar_string(AWAR_SEER_QUERY_ATTRIBUTE,"id"); |
---|
93 | aw_root->awar_string(AWAR_SEER_QUERY_STRING,""); |
---|
94 | |
---|
95 | aws->at("attributes"); |
---|
96 | AW_selection_list *sellst = aws->create_selection_list(AWAR_SEER_QUERY_ATTRIBUTE); |
---|
97 | seer_global.tmp_selection_list = sellst; |
---|
98 | |
---|
99 | GBS_hash_do_sorted_loop(seer_global.attribute_hash,seer_extract_attributes_to_query,seer_sort_attributes); |
---|
100 | aws->insert_default_selection(sellst,"",""); |
---|
101 | aws->update_selection_list(sellst); |
---|
102 | |
---|
103 | aws->at("query_string"); |
---|
104 | aws->create_input_field(AWAR_SEER_QUERY_STRING); |
---|
105 | |
---|
106 | aws->at("go"); |
---|
107 | aws->callback(SEER_query_seer_cb); |
---|
108 | aws->create_button("QUERY_SEER_AND_GET","QUERY AND GET"); |
---|
109 | |
---|
110 | return aws; |
---|
111 | }; |
---|
112 | |
---|
113 | void SEER_strip_and_save(AW_window *aww){ |
---|
114 | if (aw_message("Are you sure to delete all\n" |
---|
115 | " species, SAI\n","DELETE DATA,CANCEL") == 1){ |
---|
116 | return; |
---|
117 | } |
---|
118 | SEER_strip_arb_file(); |
---|
119 | NT_create_save_as(aww->get_root(),"tmp/nt/arbdb")->show(); // Create save whole database as window |
---|
120 | } |
---|
121 | |
---|
122 | void seer_exit(AW_window *){ |
---|
123 | if (gb_main) { |
---|
124 | if (aw_message(AW_ERROR_BUFFER,"QUIT SEER,DO NOT QUIT")) return; |
---|
125 | } |
---|
126 | seer_global.interface->endSession(); |
---|
127 | exit(0); |
---|
128 | } |
---|
129 | |
---|
130 | AW_window *SEER_populate_tables_and_open_main_panels(AW_root *aw_root){ |
---|
131 | |
---|
132 | {/* mark attributes as requested ***/ |
---|
133 | const char *attributes; |
---|
134 | for (attributes = seer_global.attribute_sellection_list->first_selected(); |
---|
135 | attributes; |
---|
136 | attributes = seer_global.attribute_sellection_list->next_element()){ |
---|
137 | SeerInterfaceAttribute *siat = (SeerInterfaceAttribute *)GBS_read_hash(seer_global.attribute_hash,attributes); |
---|
138 | siat->requested = 1; |
---|
139 | } |
---|
140 | } |
---|
141 | |
---|
142 | GB_ERROR error = SEER_populate_tables(aw_root); |
---|
143 | if (error){ |
---|
144 | aw_message(error,"OK"); |
---|
145 | SEER_logout(); |
---|
146 | } |
---|
147 | |
---|
148 | |
---|
149 | AW_window_simple *aws = new AW_window_simple; |
---|
150 | aws->init( aw_root, "SEER_MAIN", "SEER MAIN", 400, 100 ); |
---|
151 | |
---|
152 | aws->auto_space(0,10); |
---|
153 | aws->button_length(25); |
---|
154 | |
---|
155 | aws->create_button("HELP","#seer/seer.bitmap","H"); |
---|
156 | aws->at_newline(); |
---|
157 | |
---|
158 | aws->callback(AW_POPUP_HELP,(AW_CL)"seer/main_help.hlp"); |
---|
159 | aws->create_button("HELP","HELP","H"); |
---|
160 | aws->at_newline(); |
---|
161 | |
---|
162 | aws->callback(SEER_create_skeleton_for_tree_cb); |
---|
163 | aws->create_button("REVIVE_ZOMBIES","CREATE SKELETON SPECIES","H"); |
---|
164 | aws->at_newline(); |
---|
165 | |
---|
166 | aws->callback(SEER_load_marked); |
---|
167 | aws->create_button("GET_MARKED","GET MARKED FROM SEERS","H"); |
---|
168 | aws->at_newline(); |
---|
169 | |
---|
170 | aws->callback(AW_POPUP,(AW_CL)SEER_query_seer_and_get,0); |
---|
171 | aws->create_button("QUERY_GET","QUERY SEERS AND GET","H"); |
---|
172 | aws->at_newline(); |
---|
173 | |
---|
174 | aws->callback(SEER_upload_to_seer_create_window); |
---|
175 | aws->create_button("SAVE","SAVE SOME TO SEERS","H"); |
---|
176 | aws->at_newline(); |
---|
177 | |
---|
178 | aws->callback(SEER_strip_and_save); |
---|
179 | aws->create_button("STRIP_SKELETON","STRIP AND SAVE","H"); |
---|
180 | aws->at_newline(); |
---|
181 | |
---|
182 | aws->callback(seer_exit); |
---|
183 | aws->create_button("QUIT","QUIT","Q"); |
---|
184 | aws->at_newline(); |
---|
185 | |
---|
186 | |
---|
187 | nt_main_startup_main_window(aw_root); |
---|
188 | aws->window_fit(); |
---|
189 | |
---|
190 | seer_global.seer_select_attributes_window->hide(); |
---|
191 | return aws; |
---|
192 | } |
---|
193 | |
---|
194 | void seer_select_all_attributes(AW_window *,AW_CL selectFlag){ |
---|
195 | if (selectFlag){ |
---|
196 | seer_global.attribute_sellection_list->selectAll(); |
---|
197 | }else{ |
---|
198 | seer_global.attribute_sellection_list->deselectAll(); |
---|
199 | } |
---|
200 | } |
---|
201 | |
---|
202 | AW_window *SEER_load_arb_and_create_selector_panel(AW_root *aw_root,SEER_OPENS_ARB_TYPE open_type){ |
---|
203 | |
---|
204 | |
---|
205 | AW_window_simple *aws = new AW_window_simple; |
---|
206 | aws->init( aw_root, "SEER_SELECT_ATTRIBUTES", "SEER SELECT ATTRIBUTES", 400, 100 ); |
---|
207 | aws->load_xfig("seer/select_attributes.fig"); |
---|
208 | |
---|
209 | |
---|
210 | aws->callback( (AW_CB0)SEER_logout); |
---|
211 | aws->at("close"); |
---|
212 | aws->create_button("CANCEL","CANCEL","C"); |
---|
213 | |
---|
214 | aws->at("help"); |
---|
215 | aws->callback(AW_POPUP_HELP,(AW_CL)"seer/select_attributes.hlp"); |
---|
216 | aws->create_button("HELP","HELP","H"); |
---|
217 | |
---|
218 | aws->button_length(0); |
---|
219 | aws->at("logo"); |
---|
220 | aws->create_button(0,"#seer/seer.bitmap"); |
---|
221 | |
---|
222 | seer_global.interface->beginReadOnlyTransaction(); { |
---|
223 | /* ************ Read the alignment list *************/ |
---|
224 | { |
---|
225 | aw_root->awar_string(AWAR_SEER_ALIGNMENT_NAME,""); |
---|
226 | aws->at("alignments"); |
---|
227 | AW_selection_list *sellist = aws->create_selection_list(AWAR_SEER_ALIGNMENT_NAME); |
---|
228 | SeerInterfaceAlignment *al; |
---|
229 | SeerInterfaceAlignment *last_al; |
---|
230 | for (al = seer_global.interface->firstAlignment(); |
---|
231 | al; |
---|
232 | al = seer_global.interface->nextAlignment()){ |
---|
233 | aws->insert_selection(sellist,al->name,al->name); |
---|
234 | GBS_write_hash(seer_global.alignment_hash,al->name,(long)al); |
---|
235 | last_al = al; |
---|
236 | } |
---|
237 | if (last_al){ |
---|
238 | aw_root->awar(AWAR_SEER_ALIGNMENT_NAME)->write_string(last_al->name); |
---|
239 | } |
---|
240 | |
---|
241 | aws->insert_default_selection(sellist,"no alignment selected",""); |
---|
242 | aws->update_selection_list(sellist); |
---|
243 | } |
---|
244 | |
---|
245 | /* ************ Read the table list *************/ |
---|
246 | { |
---|
247 | char at_buffer[256]; |
---|
248 | char awar_buffer[256]; |
---|
249 | SeerInterfaceTableDescription *td; |
---|
250 | int table_nr = 0; |
---|
251 | for (td = seer_global.interface->firstTableDescription(); |
---|
252 | td; |
---|
253 | td = seer_global.interface->nextTableDescription()){ |
---|
254 | td->sort_key = table_nr; |
---|
255 | sprintf(at_buffer,"table_%i",table_nr); |
---|
256 | sprintf(awar_buffer,"%s/%s",AWAR_SEER_TABLE_PREFIX,td->tablename); |
---|
257 | |
---|
258 | aws->at(at_buffer); |
---|
259 | aw_root->awar_int(awar_buffer,1); |
---|
260 | aws->create_toggle(awar_buffer); |
---|
261 | GBS_write_hash(seer_global.table_hash,td->tablename,(long)td); |
---|
262 | td->attribute_hash = GBS_create_hash(256,0); |
---|
263 | SeerInterfaceAttribute *at; |
---|
264 | |
---|
265 | for (at = td->firstAttribute(); |
---|
266 | at; |
---|
267 | at = td->nextAttribute()){ |
---|
268 | GBS_write_hash(td->attribute_hash,at->name,(long)at); |
---|
269 | } |
---|
270 | } |
---|
271 | } |
---|
272 | /* ************ Read the attribute list *************/ |
---|
273 | { |
---|
274 | aws->at("attributes"); |
---|
275 | SeerInterfaceAttribute *at; |
---|
276 | AW_selection_list *sellst = aws->create_multi_selection_list(); |
---|
277 | seer_global.attribute_sellection_list = sellst; |
---|
278 | for (at = seer_global.interface->firstAttribute(); |
---|
279 | at; |
---|
280 | at = seer_global.interface->nextAttribute()){ |
---|
281 | aws->insert_selection(sellst,at->name,at->name); |
---|
282 | GBS_write_hash(seer_global.attribute_hash,at->name,(long)at); |
---|
283 | } |
---|
284 | aws->update_selection_list(sellst); |
---|
285 | } |
---|
286 | aws->at("select"); |
---|
287 | aws->callback(seer_select_all_attributes,1); |
---|
288 | aws->create_button("INVERT_ALL_ATTRIBUTES","Invert All"); |
---|
289 | |
---|
290 | aws->at("deselect"); |
---|
291 | aws->callback(seer_select_all_attributes,0); |
---|
292 | aws->create_button("DESELECT_ALL_ATTRIBUTES","Deselect All"); |
---|
293 | |
---|
294 | } seer_global.interface->commitReadOnlyTransaction(); |
---|
295 | |
---|
296 | aw_root->awar_int(AWAR_SEER_TABLE_LOAD_BEHAVIOUR,SEER_TABLE_LOAD_AT_STARTUP); |
---|
297 | aw_root->awar_int(AWAR_SEER_LOAD_SEQUENCES,1); |
---|
298 | aws->at("table_load"); |
---|
299 | aws->create_toggle(AWAR_SEER_TABLE_LOAD_BEHAVIOUR); |
---|
300 | |
---|
301 | aws->at("sequence_load"); |
---|
302 | aws->create_toggle(AWAR_SEER_LOAD_SEQUENCES); |
---|
303 | |
---|
304 | aws->at("go"); |
---|
305 | aws->button_length(15); |
---|
306 | aws->callback(AW_POPUP,(AW_CL)SEER_populate_tables_and_open_main_panels,0); |
---|
307 | aws->create_button("SEER_GO_TO_ARB","CONTINUE"); |
---|
308 | |
---|
309 | seer_global.arb_login_window->hide(); |
---|
310 | SEER_opens_arb(aw_root,open_type); |
---|
311 | seer_global.seer_select_attributes_window = aws; |
---|
312 | return aws; |
---|
313 | } |
---|
314 | |
---|
315 | AW_window *seer_login_and_create_arb_load_window(AW_root *awr){ |
---|
316 | { |
---|
317 | char *username = awr->awar(AWAR_SEER_USER_NAME)->read_string(); |
---|
318 | char *userpasswd = awr->awar(AWAR_SEER_USER_PASSWD)->read_string(); |
---|
319 | GB_ERROR error = SEER_open(username,userpasswd); |
---|
320 | if (error){ |
---|
321 | aw_message(error,"OK"); |
---|
322 | exit(-1); |
---|
323 | } |
---|
324 | delete userpasswd; |
---|
325 | delete username; |
---|
326 | } |
---|
327 | |
---|
328 | AW_window_simple *aws = new AW_window_simple; |
---|
329 | aws->init( awr, "LOAD_ARB_SKELETON", "LOAD_ARB_SKELETON", 400, 100 ); |
---|
330 | aws->load_xfig("seer/arb_intro.fig"); |
---|
331 | |
---|
332 | aws->callback( (AW_CB0)SEER_logout); |
---|
333 | aws->at("close"); |
---|
334 | aws->create_button("CANCEL","CANCEL","C"); |
---|
335 | |
---|
336 | aws->at("help"); |
---|
337 | aws->callback(AW_POPUP_HELP,(AW_CL)"arb_intro.hlp"); |
---|
338 | aws->create_button("HELP","HELP","H"); |
---|
339 | |
---|
340 | awt_create_selection_box(aws,"tmp/nt/arbdb"); |
---|
341 | |
---|
342 | aws->button_length(0); |
---|
343 | |
---|
344 | aws->at("logo"); |
---|
345 | // aws->create_button(0,"#seer/seer.bitmap"); |
---|
346 | aws->create_button(0,"#logo.bitmap"); |
---|
347 | |
---|
348 | |
---|
349 | aws->button_length(20); |
---|
350 | |
---|
351 | aws->at("old"); |
---|
352 | aws->callback(AW_POPUP,(AW_CL)SEER_load_arb_and_create_selector_panel,(AW_CL)SEER_OPENS_ARB_FULL); |
---|
353 | aws->create_button("OPEN_SELECTED","OPEN SELECTED","O"); |
---|
354 | |
---|
355 | aws->at("skeleton"); |
---|
356 | aws->callback(AW_POPUP,(AW_CL)SEER_load_arb_and_create_selector_panel,(AW_CL)SEER_OPENS_ARB_SKELETON); |
---|
357 | aws->create_button("OPEN_SKELETON","OPEN + STRIP","O"); |
---|
358 | |
---|
359 | aws->at("new"); |
---|
360 | aws->callback(AW_POPUP,(AW_CL)SEER_load_arb_and_create_selector_panel,(AW_CL)SEER_OPENS_NEW_ARB); |
---|
361 | aws->create_button("CREATE_NEW","CREATE NEW","O"); |
---|
362 | |
---|
363 | seer_global.arb_login_window = aws; |
---|
364 | seer_global.login_window->hide(); |
---|
365 | aw_openstatus("Read Additional data from ARB"); |
---|
366 | seer_global.interface->writeToArbDirectly(gb_main); |
---|
367 | aw_closestatus(); |
---|
368 | |
---|
369 | return (AW_window *)aws; |
---|
370 | } |
---|
371 | |
---|
372 | AW_window *SEER_create_login_window(AW_root *aw_root,AW_CL cd1){ |
---|
373 | AWUSE(cd1); |
---|
374 | aw_root->awar_string(AWAR_SEER_USER_NAME,"guest"); |
---|
375 | aw_root->awar_string(AWAR_SEER_USER_PASSWD); |
---|
376 | memset((char *)&seer_global,0,sizeof(seer_global)); |
---|
377 | AW_window_simple *aws = new AW_window_simple(); |
---|
378 | |
---|
379 | aws->init( aw_root, "SEER_LOGIN", "SEER LOGIN", 400, 100 ); |
---|
380 | aws->load_xfig("seer/login.fig"); |
---|
381 | |
---|
382 | aws->callback( (AW_CB0)exit); |
---|
383 | aws->at("close"); |
---|
384 | aws->create_button("CANCEL","CANCEL","C"); |
---|
385 | |
---|
386 | aws->at("help"); |
---|
387 | aws->callback(AW_POPUP_HELP,(AW_CL)"seer/login.hlp"); |
---|
388 | aws->create_button("HELP","HELP","H"); |
---|
389 | |
---|
390 | aws->button_length(0); |
---|
391 | |
---|
392 | aws->at("logo"); |
---|
393 | aws->create_button(0,"#seer/seer.bitmap"); |
---|
394 | |
---|
395 | |
---|
396 | // aws->button_length(25); |
---|
397 | |
---|
398 | aws->at("passwd"); |
---|
399 | aws->create_input_field(AWAR_SEER_USER_PASSWD); |
---|
400 | |
---|
401 | aws->at("name"); |
---|
402 | aws->create_input_field(AWAR_SEER_USER_NAME); |
---|
403 | |
---|
404 | aws->at("login"); |
---|
405 | aws->callback(AW_POPUP,(AW_CL)seer_login_and_create_arb_load_window,0); |
---|
406 | aws->create_button(0,"#seer/login.bitmap"); |
---|
407 | |
---|
408 | nt.extern_quit_button = AW_TRUE; |
---|
409 | seer_global.login_window = aws; |
---|
410 | return (AW_window *)aws; |
---|
411 | } |
---|
412 | |
---|
413 | NT_install_window_creator seer_dummy_global(SEER_create_login_window); |
---|