source: tags/cvs_2_svn/GENOM/GEN_nds.cxx

Last change on this file was 5330, checked in by westram, 16 years ago
  • mostly const fixes
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 15.6 KB
Line 
1/*********************************************************************************
2 *  Coded by Ralf Westram (coder@reallysoft.de) in 2001                          *
3 *  Institute of Microbiology (Technical University Munich)                      *
4 *  http://www.mikro.biologie.tu-muenchen.de/                                    *
5 *********************************************************************************/
6
7
8
9#include <stdio.h>
10#include <stdlib.h>
11#include <string.h>
12
13#include <arbdb.h>
14#include <arbdbt.h>
15
16#include <aw_root.hxx>
17#include <aw_device.hxx>
18#include <aw_window.hxx>
19#include <awt.hxx>
20#include <awt_nds.hxx>
21#include <awt_changekey.hxx>
22#include <awt_sel_boxes.hxx>
23
24#include "GEN_interface.hxx"
25
26#define gen_assert(bed) arb_assert(bed)
27
28using namespace std;
29
30// Note: this file is based on ../AWT/AWT_nds.cxx
31
32#define GEN_NDS_COUNT       10
33#define GEN_NDS_STRING_SIZE 4000
34
35struct make_node_text_struct {
36    char  buf[GEN_NDS_STRING_SIZE];
37    char  zbuf[GEN_NDS_COUNT];
38    long  lengths[GEN_NDS_COUNT];
39    long  rek[GEN_NDS_COUNT];
40    char *dkeys[GEN_NDS_COUNT];
41    char *parsing[GEN_NDS_COUNT];
42    //  long  inherit[GEN_NDS_COUNT];
43    long  count;
44    int   errorclip;
45
46} *gen_nds_ms = 0;
47
48//  -----------------------------------------------------
49//      void GEN_make_node_text_init(GBDATA *gb_main)
50//  -----------------------------------------------------
51void GEN_make_node_text_init(GBDATA *gb_main) {
52    GBDATA     *gbz,*gbe;
53    const char *sf, *sl;
54    int         count;
55
56    sf = "flag1";
57    sl = "len1";
58
59    if (!gen_nds_ms) gen_nds_ms = (struct make_node_text_struct *) GB_calloc(sizeof(struct make_node_text_struct),1);
60
61    GBDATA *gb_arb_presets = GB_search(gb_main,"arb_presets",GB_CREATE_CONTAINER);
62    count                  = 0;
63
64    for (gbz = GB_entry(gb_arb_presets, "gene_viewkey"); gbz; gbz  = GB_nextEntry(gbz)) {
65        /* toggle set ? */
66        if (GB_read_int(GB_entry(gbz, sf))) {
67            if (gen_nds_ms->dkeys[count]) free(gen_nds_ms->dkeys[count]);
68            gen_nds_ms->dkeys[count] = GB_read_string(GB_entry(gbz, "key_text"));
69            if (GB_first_non_key_char(gen_nds_ms->dkeys[count])) {
70                gen_nds_ms->rek[count] = 1;
71            }
72            else {
73                gen_nds_ms->rek[count] = 0;
74            }
75            gen_nds_ms->lengths[count] = GB_read_int(GB_entry(gbz, sl));
76            //          gen_nds_ms->inherit[count] = GB_read_int(GB_entry(gbz, "inherit"));
77            gbe = GB_entry(gbz, "pars");
78            if (gen_nds_ms->parsing[count]) {
79                free(gen_nds_ms->parsing[count]);
80                gen_nds_ms->parsing[count] = 0;
81            }
82            if (gbe && GB_read_string_count(gbe)>1 ) gen_nds_ms->parsing[count] = GB_read_string(gbe);
83            count++;
84        }
85    }
86    gen_nds_ms->errorclip = 0;
87    gen_nds_ms->count = count;
88}
89
90//  -----------------------------------------------------------------------------
91//      char *GEN_make_node_text_nds(GBDATA *gb_main, GBDATA * gbd, int mode)
92//  -----------------------------------------------------------------------------
93char *GEN_make_node_text_nds(GBDATA *gb_main, GBDATA * gbd, int mode)
94{
95    /* if mode ==0 compress info else format info */
96    char     *bp;
97    GBDATA   *gbe;
98    long      i, j;
99    long      first;
100    //     GBT_TREE *father;
101
102    bp = gen_nds_ms->buf;
103    gb_assert(gbd);
104    //     if (!gbd) {
105    //         static char hae[] = "??????";
106    //         if (!species) return hae;
107    //         sprintf(gen_nds_ms->buf,"<%s>",species->name);
108    //         return gen_nds_ms->buf;
109    //     }
110
111    first = 0;
112    for (i = 0; i < gen_nds_ms->count; i++) {
113        if (gen_nds_ms->rek[i]) {       /* hierarchical key */
114            gbe = GB_search(gbd,gen_nds_ms->dkeys[i],0);
115        }else{              /* flat entry */
116            gbe = GB_entry(gbd, gen_nds_ms->dkeys[i]);
117        }
118
119        //         if (!gbe && gen_nds_ms->inherit[i] && species ) {
120        //             for (    father = species->father;
121        //                     father && !gbe;
122        //                     father = father->father){
123        //                 if (father->gb_node){
124        //                     gbe = GB_entry(father->gb_node, gen_nds_ms->dkeys[i]);
125        //                 }
126        //             }
127        //         }
128
129        if (!mode && !gbe) continue;
130        if (!mode && first) {
131            (*bp++) = ',';
132        }
133        (*bp++) = ' ';
134        first++;
135        if (gbe) {
136            switch (GB_read_type(gbe)) {
137                case GB_INT:
138                    if (mode) {
139                        char buf[20];
140                        sprintf(buf,"%%%lii", gen_nds_ms->lengths[i]);
141                        sprintf(bp, buf, GB_read_int(gbe));
142                    } else {
143                        sprintf(bp, "%li", GB_read_int(gbe));
144                    }
145                    bp += strlen(bp);
146                    break;
147                case GB_BYTE:
148                    if (mode) {
149                        char buf[20];
150                        sprintf(buf,"%%%lii", gen_nds_ms->lengths[i]);
151                        sprintf(bp, buf, GB_read_byte(gbe));
152                    } else {
153                        sprintf(bp, "%i", GB_read_byte(gbe));
154                    }
155                    bp += strlen(bp);
156                    break;
157                case GB_STRING: {
158                    long        post;
159                    long        dlen;
160                    char       *pars = 0;
161                    const char *p    = 0;
162
163                    if (gen_nds_ms->parsing[i]) {
164                        char *p2 = GB_read_string(gbe);
165                        pars     = GB_command_interpreter(gb_main, p2, gen_nds_ms->parsing[i],gbd, 0);
166                        free(p2);
167                       
168                        if (!pars){
169                            pars = strdup("<error>");
170                            if (!gen_nds_ms->errorclip++) {
171                                aw_message(GB_get_error());
172                            }
173                        }
174                        p = pars;
175                    }
176                    else {
177                        p = GB_read_char_pntr(gbe);
178                    }
179
180                    dlen = gen_nds_ms->lengths[i];
181                    if (dlen + (bp - gen_nds_ms->buf) +256 > GEN_NDS_STRING_SIZE) {
182                        dlen = GEN_NDS_STRING_SIZE - 256 - (bp - gen_nds_ms->buf);
183                    }
184
185                    if (dlen> 0){
186                        int len = strlen(p);
187                        j = len;
188                        if (j > dlen)   j = dlen;
189                        for (; j; j--) *bp++ = *p++;
190                        if (mode){
191                            post = dlen - len;
192                            while (post-- > 0) *(bp++) = ' ';
193                        }
194                    }
195                    if (pars) free(pars);
196                    break;
197                }
198                case GB_FLOAT:
199                    sprintf(bp, "%4.4f", GB_read_float(gbe));
200                    bp += strlen(bp);
201                    break;
202                default:
203                    break;
204            }
205        } else if (mode) {
206            j = gen_nds_ms->lengths[i];
207            if (j + (bp - gen_nds_ms->buf) + 256 > GEN_NDS_STRING_SIZE) {
208                j = GEN_NDS_STRING_SIZE - 256 - (bp - gen_nds_ms->buf);
209            }
210            for (; j > 0; j--)  *(bp++) = ' ';
211        }
212    }           /* for */
213    *bp = 0;
214    return gen_nds_ms->buf;
215}
216
217
218
219//  ---------------------------------------------------------------------------------------------------------------
220//      void GEN_create_nds_vars(AW_root *aw_root,AW_default awdef,GBDATA *gb_main, GB_CB NDS_changed_callback)
221//  ---------------------------------------------------------------------------------------------------------------
222void GEN_create_nds_vars(AW_root *aw_root,AW_default awdef,GBDATA *gb_main, GB_CB NDS_changed_callback)
223{
224    GBDATA *gb_arb_presets;
225    GBDATA *gb_viewkey = 0;
226    //  GBDATA *gb_inherit;
227    GBDATA *gb_flag1;
228    GBDATA *gb_len1;
229    GBDATA *gb_pars;
230    GBDATA *gb_key_text;
231
232    GB_push_transaction(gb_main);
233    gb_arb_presets = GB_search(gb_main,"arb_presets",GB_CREATE_CONTAINER);
234    int i;
235    for (i=0;i<GEN_NDS_COUNT; i++) {
236        char buf[256];
237        memset(buf,0,256);
238
239        if (gb_viewkey) {
240            gen_assert(GB_has_key(gb_viewkey, "gene_viewkey"));
241            gb_viewkey = GB_nextEntry(gb_viewkey);
242        }else{
243            gb_viewkey = GB_entry(gb_arb_presets,"gene_viewkey");
244        }
245        if (!gb_viewkey){
246            gb_viewkey = GB_create_container(gb_arb_presets,"gene_viewkey");
247        }
248
249        gb_assert(gb_viewkey);
250        GB_add_callback(gb_viewkey, GB_CB_CHANGED, NDS_changed_callback, 0);
251
252        gb_key_text = GB_entry(gb_viewkey, "key_text");
253        if (!gb_key_text) {
254            gb_key_text = GB_create(gb_viewkey,"key_text",GB_STRING);
255            switch(i){
256                case 1:
257                    GB_write_string(gb_key_text,"pos_begin");
258                    break;
259                case 2:
260                    GB_write_string(gb_key_text,"pos_end");
261                    break;
262                case 3:
263                    GB_write_string(gb_key_text,"product");
264                    break;
265                default:
266                    GB_write_string(gb_key_text,"name");
267                    break;
268            }
269        }
270        sprintf(buf,"tmp/gene_viewkey_%i/key_text",i);
271        aw_root->awar_string(buf,"",awdef);
272        aw_root->awar(buf)->map((void *)gb_key_text);
273
274        gb_pars = GB_entry(gb_viewkey, "pars");
275        if (!gb_pars) {
276            gb_pars = GB_create(gb_viewkey,"pars",GB_STRING);
277            GB_write_string(gb_pars,"");
278        }
279        sprintf(buf,"tmp/gene_viewkey_%i/pars",i);
280        aw_root->awar_string(buf,"",awdef);
281        aw_root->awar(buf)->map((void *)gb_pars);
282
283        gb_flag1 = GB_entry(gb_viewkey, "flag1");
284        if (!gb_flag1) {
285            gb_flag1 = GB_create(gb_viewkey,"flag1",GB_INT);
286            if (i<=2){
287                GB_write_int(gb_flag1,1);
288            }else{
289                GB_write_int(gb_flag1,0);
290            }
291        }
292        sprintf(buf,"tmp/gene_viewkey_%i/flag1",i);
293        aw_root->awar_int(buf,0,awdef);
294        aw_root->awar(buf)->map((void *)gb_flag1);
295
296        gb_len1 = GB_entry(gb_viewkey, "len1");
297        if (!gb_len1) {
298            gb_len1 = GB_create(gb_viewkey,"len1",GB_INT);
299            GB_write_int(gb_len1,30);
300        }
301        sprintf(buf,"tmp/gene_viewkey_%i/len1",i);
302        aw_root->awar_int(buf,0,awdef);
303        aw_root->awar(buf)->set_minmax(0, GEN_NDS_STRING_SIZE);
304        aw_root->awar(buf)->map((void *)gb_len1);
305
306        //      gb_inherit = GB_entry(gb_viewkey, "inherit");
307        //      if (!gb_inherit) {
308        //          gb_inherit = GB_create(gb_viewkey,"inherit",GB_INT);
309        //          GB_write_int(gb_inherit,0);
310        //      }
311        //      sprintf(buf,"tmp/gene_viewkey_%i/inherit",i);
312        //      aw_root->awar_int(buf,0,awdef);
313        //      aw_root->awar(buf)->map((void *)gb_inherit);
314    }
315    GBDATA *gb_next;
316    gen_assert(GB_has_key(gb_viewkey, "gene_viewkey"));
317    while ((gb_next = GB_nextEntry(gb_viewkey))) {
318        GB_ERROR error = GB_delete(gb_next);
319        if (error) {
320            aw_message(error);
321            break;
322        }
323    }
324    aw_root->awar_string("tmp/gene_viewkey/key_text","",awdef);
325    GB_pop_transaction(gb_main);
326}
327//  ---------------------------------------------------------------------------------------
328//      void GEN_create_select_nds_window(AW_window *aww,char *key_text,AW_CL cgb_main)
329//  ---------------------------------------------------------------------------------------
330void GEN_create_select_nds_window(AW_window *aww,char *key_text,AW_CL cgb_main)
331{
332#warning make this function more general like AWT_popup_select_species_field_window
333   
334    static AW_window *win = 0;
335    AW_root *aw_root = aww->get_root();
336    aw_root->awar("tmp/gene_viewkey/key_text")->map(key_text);
337    if (!win) {
338        AW_window_simple *aws = new AW_window_simple;
339        aws->init( aw_root, "NDS", "NDS_SELECT");
340        aws->load_xfig("awt/nds_sel.fig");
341        aws->button_length(13);
342
343        aws->callback( AW_POPDOWN);
344        aws->at("close");
345        aws->create_button("CLOSE", "CLOSE","C");
346
347        awt_create_selection_list_on_scandb((GBDATA *)cgb_main,
348                                            (AW_window*)aws,"tmp/gene_viewkey/key_text",
349                                            AWT_NDS_FILTER,
350                                            "scandb","rescandb", &GEN_item_selector, 20, 10);
351        //aw_root->awar(key_text)->add_callback((AW_RCB1)awt_pop_down_select_nds,(AW_CL)aws);
352
353        win =  (AW_window*)aws;
354    }
355    win->show();
356}
357//  -----------------------------------------------------------------------
358//      AW_window *GEN_open_nds_window(AW_root *aw_root,AW_CL cgb_main)
359//  -----------------------------------------------------------------------
360AW_window *GEN_open_nds_window(AW_root *aw_root,AW_CL cgb_main)
361{
362    static AW_window_simple *aws = 0;
363    if (!aws) {
364        aws = new AW_window_simple;
365   
366        aws->init( aw_root, "GENE_NDS_PROPS", "Gene NDS");
367        aws->load_xfig("awt/nds.fig");
368        aws->auto_space(10,5);
369
370        aws->callback( AW_POPDOWN);
371        aws->at("close");
372        aws->create_button("CLOSE", "CLOSE","C");
373
374        aws->at("help");
375        aws->callback(AW_POPUP_HELP,(AW_CL)"props_nds.hlp");
376        aws->create_button("HELP", "HELP","H");
377
378        aws->button_length(13);
379        int dummy,closey;
380        aws->at_newline();
381        aws->get_at_position( &dummy,&closey );
382
383        aws->create_button(0,"K");
384
385        aws->at_newline();
386
387
388        int showx,fieldselectx,fieldx, /*inheritx,*/ columnx,srtx,srtux;
389
390        aws->auto_space(10,0);
391
392        int i;
393        for (   i=0;i<GEN_NDS_COUNT; i++) {
394            char buf[256];
395
396            sprintf(buf,"tmp/gene_viewkey_%i/flag1",i);
397            aws->get_at_position( &showx,&dummy );
398            aws->create_toggle(buf);
399
400            aws->button_length(20);
401            sprintf(buf,"tmp/gene_viewkey_%i/key_text",i);
402            aws->get_at_position( &fieldx,&dummy );
403            aws->create_input_field(buf,15);
404
405            aws->button_length(0);
406            aws->callback((AW_CB)GEN_create_select_nds_window, (AW_CL)strdup(buf),cgb_main);
407            aws->get_at_position( &fieldselectx,&dummy );
408            aws->create_button("SELECT_NDS","S");
409
410            //      sprintf(buf,"tmp/gene_viewkey_%i/inherit",i);
411            //      aws->get_at_position( &inheritx,&dummy );
412            //      aws->create_toggle(buf);
413
414            sprintf(buf,"tmp/gene_viewkey_%i/len1",i);
415            aws->get_at_position( &columnx,&dummy );
416            aws->create_input_field(buf,4);
417
418            sprintf(buf,"tmp/gene_viewkey_%i/pars",i);
419            aws->get_at_position( &srtx,&dummy );
420
421            aws->button_length(0);
422
423            aws->callback(AWT_create_select_srtaci_window,(AW_CL)strdup(buf),0);
424            aws->create_button("SELECT_SRTACI", "S","S");
425
426            aws->get_at_position( &srtux,&dummy );
427            aws->create_input_field(buf,40);
428            aws->at_newline();
429        }
430        aws->at(showx,closey);
431
432        aws->at_x(fieldselectx);
433        aws->create_button(0,"SEL");
434
435        aws->at_x(showx);
436        aws->create_button(0,"SHOW");
437
438        aws->at_x(fieldx);
439        aws->create_button(0,"FIELD");
440
441        //  aws->at_x(inheritx);
442        //  aws->create_button(0,"INH.");
443
444        aws->at_x(columnx);
445        aws->create_button(0,"WIDTH");
446
447        aws->at_x(srtx);
448        aws->create_button(0,"SRT");
449
450        aws->at_x(srtux);
451        aws->create_button(0,"ACI/SRT PROGRAM");
452    }
453    return aws;
454}
455
456
457
Note: See TracBrowser for help on using the repository browser.