source: tags/arb_5.0/AWT/AWT_www.cxx

Last change on this file was 6100, checked in by westram, 15 years ago
  • fix warning "format not a string literal and no format arguments"
    • GB_export_error → GB_export_error/GB_export_errorf
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.9 KB
Line 
1#include <stdio.h>
2#include <stdlib.h>
3#include <memory.h>
4// #include <malloc.h>
5#include <string.h>
6
7#include <aw_root.hxx>
8#include "aw_global_awars.hxx"
9#include <aw_device.hxx>
10#include <aw_window.hxx>
11#include <aw_awars.hxx>
12
13#include <arbdbt.h>
14#include <awt.hxx>
15
16#include "awt_config_manager.hxx"
17
18#define WWW_COUNT                10
19// #define AWAR_WWW_BROWSER "www/browser" // now defined by ARB_init_global_awars()
20#define AWAR_WWW_SELECT          "www/url_select"
21#define AWAR_WWW_0               "www/url_0/srt"
22#define AWAR_WWW_1               "www/url_0/srt"
23#define AWAR_WWW_2               "www/url_0/srt"
24#define AWAR_WWW_SELECT_TEMPLATE "www/url_%i/select"
25#define AWAR_WWW_TEMPLATE        "www/url_%i/srt"
26#define AWAR_WWW_DESC_TEMPLATE   "www/url_%i/desc"
27
28
29
30void awt_create_aww_vars(AW_root *aw_root,AW_default aw_def){
31    int i;
32    for (i=0;i<WWW_COUNT;i++){
33        const char *awar_name;
34
35        awar_name = GBS_global_string(AWAR_WWW_TEMPLATE,i);         aw_root->awar_string(awar_name,i==WWW_COUNT-1?"\"http://www.ebi.ac.uk/cgi-bin/emblfetch?\";readdb(acc)":"",aw_def);
36        awar_name = GBS_global_string(AWAR_WWW_DESC_TEMPLATE,i);    aw_root->awar_string(awar_name,i==WWW_COUNT-1?"EMBL example":"",aw_def);
37        awar_name = GBS_global_string(AWAR_WWW_SELECT_TEMPLATE,i);  aw_root->awar_int(awar_name,0,aw_def);
38    }
39
40    aw_root->awar_int(AWAR_WWW_SELECT,0,aw_def);
41
42    awt_assert(ARB_global_awars_initialized());
43}
44
45GB_ERROR awt_openURL(AW_root *aw_root, GBDATA *gb_main, const char *url) {
46    // if gb_main == 0 -> normal system call is used
47
48    GB_ERROR  error   = 0;
49    GB_CSTR   ka;
50    char     *browser = aw_root->awar(AWAR_WWW_BROWSER)->read_string();
51
52    while ( (ka = GBS_find_string(browser,"$(URL)",0)) ) {
53        char *start       = GB_strpartdup(browser, ka-1);
54        char *new_browser = GBS_global_string_copy("%s%s%s", start, url, ka+6);
55
56        free(start);
57        free(browser);
58
59        browser = new_browser;
60    }
61
62    if (gb_main) {
63        if (GBCMC_system(gb_main, browser)) {
64            error = GB_await_error();
65        }
66    }
67    else {
68        char *command = GBS_global_string_copy("(%s)&", browser);
69        printf("Action: '%s'\n", command);
70        if (system(command)) aw_message(GBS_global_string("'%s' failed", command));
71        free(command);
72    }
73
74    free(browser);
75
76    return error;
77}
78
79
80GB_ERROR awt_open_ACISRT_URL_by_gbd(AW_root *aw_root,GBDATA *gb_main, GBDATA *gbd, const char *name, const char *url_srt){
81    GB_ERROR        error = 0;
82    GB_transaction  tscope(gb_main);
83    char           *url   = GB_command_interpreter(gb_main,name,url_srt,gbd, 0);
84
85    if (!url) error = GB_await_error();
86    else error      = awt_openURL(aw_root, gb_main, url);
87
88    free(url);
89
90    return error;
91}
92
93GB_ERROR awt_openURL_by_gbd(AW_root *aw_root,GBDATA *gb_main, GBDATA *gbd, const char *name){
94    GB_ERROR        error        = 0;
95    GB_transaction  tscope(gb_main);
96    int             url_selected = aw_root->awar(AWAR_WWW_SELECT)->read_int();
97    const char     *awar_url     = GBS_global_string(AWAR_WWW_TEMPLATE,url_selected);
98    char           *url_srt      = aw_root->awar(awar_url)->read_string();
99    error                        = awt_open_ACISRT_URL_by_gbd(aw_root, gb_main, gbd, name, url_srt);
100
101    delete url_srt;
102    return error;
103}
104
105void awt_openDefaultURL_on_species(AW_window *aww,GBDATA *gb_main){
106    GB_transaction  tscope(gb_main);
107    AW_root        *aw_root          = aww->get_root();
108    GB_ERROR        error            = 0;
109    char           *selected_species = aw_root->awar(AWAR_SPECIES_NAME)->read_string();
110    GBDATA         *gb_species       = GBT_find_species(gb_main,selected_species);
111
112    if (!gb_species){
113        error = GB_export_errorf("Cannot find species '%s'",selected_species);
114    }else{
115        error = awt_openURL_by_gbd(aw_root,gb_main, gb_species, selected_species);
116    }
117    if (error) aw_message(error);
118    delete selected_species;
119}
120/* a crazy implementation of a toggle field */
121void awt_www_select_change(AW_window *aww,AW_CL selected){
122    int i;
123    AW_root *aw_root = aww->get_root();
124    for (i=0;i<WWW_COUNT;i++){
125        const char *awar_name = GBS_global_string(AWAR_WWW_SELECT_TEMPLATE,i);
126        aw_root->awar(awar_name)->write_int( (i==selected)? 1:0);
127    }
128    aw_root->awar(AWAR_WWW_SELECT)->write_int(selected);
129}
130
131static void www_init_config(AWT_config_definition& cdef) {
132    for (int i=0;i<WWW_COUNT; i++) {
133        char buf[256];
134        sprintf(buf, AWAR_WWW_SELECT_TEMPLATE, i); cdef.add(buf, "active",     i);
135        sprintf(buf, AWAR_WWW_DESC_TEMPLATE,   i); cdef.add(buf, "desciption", i);
136        sprintf(buf, AWAR_WWW_TEMPLATE,        i); cdef.add(buf, "template",   i);
137    }
138}
139static char *www_store_config(AW_window *aww, AW_CL /*cl1*/, AW_CL /*cl2*/) {
140    AWT_config_definition cdef(aww->get_root());
141    www_init_config(cdef);
142    return cdef.read();
143}
144static void www_restore_config(AW_window *aww, const char *stored_string, AW_CL /*cl1*/, AW_CL /*cl2*/) {
145    AWT_config_definition cdef(aww->get_root());
146    www_init_config(cdef);
147    cdef.write(stored_string);
148}
149
150AW_window *AWT_open_www_window(AW_root *aw_root,AW_CL cgb_main){
151
152    AW_window_simple *aws = new AW_window_simple;
153    aws->init( aw_root, "WWW_PROPS", "WWW");
154    aws->load_xfig("awt/www.fig");
155    aws->auto_space(10,5);
156
157    aws->at("close");
158    aws->callback(AW_POPDOWN);
159    aws->create_button("CLOSE", "CLOSE","C");
160
161    aws->at("help");
162    aws->callback(AW_POPUP_HELP,(AW_CL)"props_www.hlp");
163    aws->create_button("HELP", "HELP","H");
164
165    aws->at("action");
166    aws->callback((AW_CB1)awt_openDefaultURL_on_species,cgb_main);
167    aws->create_button("WWW", "WWW", "W");
168
169    aws->button_length(13);
170    int dummy,closey;
171    aws->at_newline();
172    aws->get_at_position( &dummy,&closey );
173    aws->at_newline();
174
175    aws->create_button(0,"K");
176
177    aws->at_newline();
178
179    int fieldselectx,srtx,descx;
180
181
182    int i;
183    aws->get_at_position( &fieldselectx,&dummy );
184
185    aws->auto_space(10,2);
186
187    for (i=0;i<WWW_COUNT; i++) {
188        char buf[256];
189        sprintf(buf,AWAR_WWW_SELECT_TEMPLATE,i);
190        aws->callback(awt_www_select_change,i);
191        aws->create_toggle(buf);
192
193        sprintf(buf,AWAR_WWW_DESC_TEMPLATE,i);
194        aws->get_at_position( &descx,&dummy );
195        aws->create_input_field(buf,15);
196
197        aws->get_at_position( &srtx,&dummy );
198        sprintf(buf,AWAR_WWW_TEMPLATE,i);
199        aws->create_input_field(buf,80);
200
201        aws->at_newline();
202    }
203    aws->at_newline();
204
205    aws->create_input_field(AWAR_WWW_BROWSER,100);
206
207    aws->at(fieldselectx,closey);
208
209    aws->at_x(fieldselectx);
210    aws->create_button(0,"SEL");
211
212    aws->at_x(descx);
213    aws->create_button(0,"DESCRITPION");
214
215    aws->at_x(srtx);
216    aws->create_button(0,"URL");
217
218    aws->at("config");
219    AWT_insert_config_manager(aws, AW_ROOT_DEFAULT, "www", www_store_config, www_restore_config, 0, 0);
220
221    awt_www_select_change(aws,aw_root->awar(AWAR_WWW_SELECT)->read_int());
222    return (AW_window *)aws;
223}
Note: See TracBrowser for help on using the repository browser.