source: trunk/AWTC/AWTC_submission.cxx @ 5842

Last change on this file since 5842 was 5842, checked in by westram, 16 years ago
  • like [5839], but AWT, AWTC, AWTI and WINDOW
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.2 KB
Line 
1#include <stdio.h>
2#include <stdlib.h>
3#include <memory.h>
4#include <string.h>
5#include <arbdb.h>
6#include <arbdbt.h>
7#include <aw_root.hxx>
8#include <aw_device.hxx>
9#include <aw_window.hxx>
10#include <aw_awars.hxx>
11#include <awt.hxx>
12
13#ifndef ARB_ASSERT_H
14#include <arb_assert.h>
15#endif
16#define awtc_assert(bed) arb_assert(bed)
17
18
19#define AWAR_PARSER "tmp/submission/parser"
20#define AWAR_PARSED "tmp/submission/parsed"
21
22void AWTC_create_submission_variables(AW_root *root,AW_default db1)
23{
24    root->awar_string( "submission/source", ""  ,    db1);
25    root->awar_string( AWAR_PARSER, "press READ INFO"  ,    db1);
26    root->awar_string( AWAR_PARSED, ""  ,    db1);
27    root->awar_string( "submission/file", ""  ,    db1);
28    root->awar_string( "submission/privat", "$(ADDRESS,    db1)=TUM Munich:\n"  );
29}
30
31static void ed_calltexe_event(AW_window *aww,char *varname)
32{
33    AW_root *aw_root = aww->get_root();
34    char    *file;
35    file = aw_root->awar(varname)->read_string();
36    AWT_edit(file);
37    free(file);
38}
39
40static AW_window *create_calltexe_window(AW_root *root, char *varname)
41{
42    AWUSE(root);
43
44    AW_window_simple *aws = new AW_window_simple;
45    aws->init( root, "SUBM_TEXTEDIT", "START TEXT EDITOR");
46
47    aws->load_xfig("calltexe.fig");
48    aws->label_length( 18 );
49    aws->button_length( 8 );
50
51    aws->at( "close" );
52    aws->callback     ( (AW_CB0)AW_POPDOWN  );
53    aws->create_button( "CLOSE", "CLOSE", "O" );
54
55    aws->at("file");
56    aws->create_input_field(varname,34);
57
58    aws->at("edit");
59    aws->callback( (AW_CB1)ed_calltexe_event,(AW_CL)varname);
60    aws->create_button( "EDIT", "EDIT", "E" );
61
62    return (AW_window *)aws;
63}
64
65#if 0
66static long ed_submit_info_event_sequence(void *strstruct,char *alignment,long modu)
67{
68    int i;
69    char    buffer[256];
70    int size = strlen(alignment);
71    int c;
72    long    seq_len = 0;
73    for (seq_len=i=0;i<size;i++) {
74        c = alignment[i];
75        if (c == '.') continue;
76        if (c == '-') continue;
77
78        if (c==':') c = ';';
79        if (c=='=') c = '-';
80        if ( !(seq_len%modu) ) {
81            sprintf(buffer,"\n%8li ",seq_len+1);
82            GBS_strcat(strstruct,buffer);
83        }
84        if ( !(seq_len%10) ) GBS_strcat(strstruct," ");
85        seq_len++;
86        GBS_chrcat(strstruct,c);
87    }
88    return seq_len;
89}
90#endif
91
92static void ed_submit_info_event_rm(char *string)
93{
94    char *p = string;
95    int c;
96    while ((c=*p)!= 0 ) {
97        if (c==':') *p = ';';
98        if (c=='=') *p = '-';
99        p++;
100    }
101}
102
103extern GBDATA *GLOBAL_gb_main;
104
105static void ed_submit_info_event(AW_window *aww) {
106    AW_root        *aw_root      = aww->get_root();
107    GB_transaction  dummy(GLOBAL_gb_main);
108    char           *species_name = aw_root->awar(AWAR_SPECIES_NAME)->read_string();
109    GBDATA         *gb_species   = GBT_find_species(GLOBAL_gb_main,species_name);
110    GBS_strstruct  *strstruct    = GBS_stropen(1000);
111
112    if (gb_species) {
113        for (GBDATA *gb_entry = GB_child(gb_species); gb_entry; gb_entry = GB_nextChild(gb_entry)) {
114            int type = GB_read_type(gb_entry);
115            switch (type) {
116                case GB_STRING:
117                case GB_INT:
118                case GB_BITS:
119                case GB_FLOAT: {
120                    char *key = GB_read_key(gb_entry);
121
122                    GBS_strcat(strstruct,"$(");
123                    GBS_strcat(strstruct,key);
124                    GBS_strcat(strstruct,")=");
125                    free(key);
126
127                    key = GB_read_as_string(gb_entry);
128                    ed_submit_info_event_rm(key);
129                    GBS_strcat(strstruct,key);
130                    free(key);
131                   
132                    GBS_strcat(strstruct,":\n");
133                    break;
134                }
135                default:
136                    break;
137            }
138        }
139        char *seq_info = GBS_string_eval(" ","*="
140                                         "$(SEQ_LEN)\\=*(|sequence|len(.-))\\:\n"
141                                         "$(SEQ_A)\\=*(|sequence|count(aA))\\:\n"
142                                         "$(SEQ_C)\\=*(|sequence|count(cC))\\:\n"
143                                         "$(SEQ_G)\\=*(|sequence|count(gG))\\:\n"
144                                         "$(SEQ_T)\\=*(|sequence|count(tT))\\:\n"
145                                         "$(SEQ_U)\\=*(|sequence|count(uU))\\:\n"
146                                         "$(SEQUENCE)\\=*(|sequence|remove(.-)|format_sequence(firsttab\\=12;tab\\=12;width\\=60;numleft;gap\\=10))\\:\n"
147                                         ,gb_species);
148        if (seq_info) {
149            GBS_strcat(strstruct, seq_info);
150            free(seq_info);
151        }
152        else {
153            aw_message(GB_await_error());
154        }
155    }else{
156        GBS_strcat(strstruct,"Species not found");
157    }
158   
159    char *parser = GBS_strclose(strstruct);
160    aw_root->awar(AWAR_PARSER)->write_string(parser);
161
162    free(parser);
163    free(species_name);
164}
165
166static void ed_save_var_to_file(AW_window *aww,char *data_var, char *file_var)
167{
168    AW_root *aw_root = aww->get_root();
169    char * data = aw_root->awar(data_var)->read_string();
170    char *file_name = aw_root->awar(file_var)->read_string();
171    FILE *out = fopen(file_name,"w");
172    if (out) fprintf(out,"%s",data);
173    fclose(out);
174    free(file_name);
175    free(data);
176}
177static void ed_submit_parse_event(AW_window *aww)
178{
179    AW_root *aw_root = aww->get_root();
180    char *parser = aw_root->awar(AWAR_PARSER)->read_string();
181    char    *dest;
182    char    *dest2;
183    char    *privat;
184    char    *p,*d;
185    int c;
186
187    for (d = p = parser; *p; p++) {
188        if ((c=*p)==':') {
189            if (p[1] == '\n') p++; // skip newline
190        }
191        *(d++) = c;
192    }
193    *d = 0;
194    char *sub_file = aw_root->awar("submission/source")->read_string();
195    char *source = GB_read_file(sub_file);
196    if (source) {
197        dest = GBS_string_eval(source,parser,0);
198        if (!dest) dest = strdup(GB_await_error());
199    }
200    else {
201        dest = strdup("submission form not found");
202    }
203
204    awtc_assert(dest); // should contain partly filled form or error message
205
206    privat = aw_root->awar("submission/privat")->read_string();
207    for (d = p = privat; *p; p++) {
208        if ((c=*p)==':') {
209            if (p[1] == '\n') p++; // skip newline
210        }
211        *(d++) = c;
212    }
213    *d = 0;
214
215    dest2             = GBS_string_eval(dest,privat,0);
216    if (!dest2) dest2 = strdup(GB_await_error());
217
218    aw_root->awar(AWAR_PARSED)->write_string(dest2);
219
220    free(dest);
221    free(dest2);
222    free(privat);
223    free(source);
224    free (sub_file);
225    free(parser);
226}
227
228static void ed_submit_gen_event(AW_window *aww)
229{
230    AW_root *aw_root = aww->get_root();
231    char buffer[256];
232    char *name = aw_root->awar(AWAR_SPECIES_NAME)->read_string();
233    sprintf(buffer,"%s.submit",name);
234    free(name);
235    aw_root->awar("submission/file")->write_string(buffer);
236}
237
238
239AW_window *AWTC_create_submission_window(AW_root *root)
240{
241    AWUSE(root);
242
243    AW_window_simple *aws = new AW_window_simple;
244    aws->init( root, "SUBMISSION", "SUBMISSION");
245
246    aws->load_xfig("submiss.fig");
247    aws->label_length( 18 );
248    aws->button_length( 8 );
249
250    aws->at( "close" );
251    aws->callback     ( (AW_CB0)AW_POPDOWN  );
252    aws->create_button( "CLOSE", "CLOSE", "O" );
253
254    aws->callback( AW_POPUP_HELP,(AW_CL)"submission.hlp");
255    aws->at("help");
256    aws->create_button("HELP", "HELP","H");
257
258    aws->button_length( 15 );
259
260    aws->at("privat");
261    aws->create_text_field("submission/privat",80,5);
262
263    aws->at( "parsed_info" );
264    aws->create_text_field( AWAR_PARSER, 80,6 );
265
266    aws->at( "parsed" );
267    aws->create_text_field( AWAR_PARSED, 80,13 );
268
269    aws->at( "species" );
270    aws->label( "Species Name:");
271    aws->create_input_field( AWAR_SPECIES_NAME, 12 );
272
273    aws->at( "submission" );
274    char **submits = GBS_read_dir(GB_path_in_ARBLIB("submit", NULL), NULL);
275    if (submits) {
276        aws->create_option_menu( "submission/source", "Select a Form", "s" );
277        for (char **submit = submits; *submit; submit++){
278            aws->insert_option(*submit,"",*submit);
279        }
280        aws->insert_default_option("default","d","default");
281        aws->update_option_menu();
282
283        GBT_free_names(submits);
284    }
285
286    aws->at("gen");
287    aws->label("Gen File Name");
288    aws->callback(ed_submit_gen_event);
289    aws->create_button("GEN_FILE_NAME", "CREATE NAME","C");
290
291    aws->at( "file" );
292    aws->label( "or enter");
293    aws->create_input_field( "submission/file", 30 );
294
295    aws->at( "info" );
296    aws->callback( ed_submit_info_event);
297    aws->create_button("READ_INFO", "READ INFO","R");
298
299    aws->at( "parse" );
300    aws->callback((AW_CB0)ed_submit_parse_event);
301    aws->create_button("FILL_OUT_FORM", "FILL THE FORM","F");
302
303    aws->at( "write" );
304    aws->callback( (AW_CB)ed_save_var_to_file,(AW_CL)AWAR_PARSED,(AW_CL)"submission/file");
305    aws->create_button("SAVE", "SAVE TO FILE","S");
306
307    aws->button_length( 20 );
308    aws->at( "edit" );
309    aws->callback(AW_POPUP,(AW_CL)create_calltexe_window,(AW_CL)"submission/source");
310    aws->create_button("EDIT_FORM", "EDIT FORM","R");
311
312    aws->at( "editresult" );
313    aws->callback(AW_POPUP,(AW_CL)create_calltexe_window,(AW_CL)"submission/file");
314    aws->create_button("EDIT_SAVED", "EDIT SAVED","S");
315
316    aws->at("privatlabel");
317    aws->create_button(0,"Your private data");
318
319    return (AW_window *)aws;
320}
Note: See TracBrowser for help on using the repository browser.