source: tags/initial/SEER/SEER_main.cxx

Last change on this file was 2, checked in by oldcode, 24 years ago

Initial revision

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 12.5 KB
Line 
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
19SEER_GLOBAL seer_global;
20
21void 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
40void 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
47void 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
57long 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
71AW_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
113void 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
122void 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
130AW_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
194void 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
202AW_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
315AW_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
372AW_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
413NT_install_window_creator seer_dummy_global(SEER_create_login_window);
Note: See TracBrowser for help on using the repository browser.