source: tags/initial/EDIT4/ED4_nds.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: 7.4 KB
Line 
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4
5#include <arbdb.h>
6#include <arbdbt.h>
7#include <aw_root.hxx>
8#include <aw_awars.hxx>
9#include <aw_window.hxx>
10
11#include "ed4_class.hxx"
12#include "ed4_awars.hxx"
13
14#define NDS_COUNT 10
15
16static char *NDS_command = 0;
17static int NDS_width = 1;
18
19char *ED4_get_NDS_text(ED4_species_manager *species_man) { 
20    GBDATA *gbd = species_man->get_species_pointer();
21    e4_assert(gbd);
22   
23    e4_assert(NDS_command);
24    char *result = GB_command_interpreter(gb_main, "", NDS_command, gbd);
25    if (!result) {
26        result = strdup("<error>");
27    }
28    return result;
29}
30
31void ED4_get_NDS_sizes(int *width, int *brackets) {
32    *width = NDS_width;
33    *brackets = ED4_ROOT->aw_root->awar(ED4_AWAR_NDS_BRACKETS)->read_int();
34}
35
36static void NDS_changed(AW_root *root, AW_CL refresh)
37{
38    int toggle = root->awar(ED4_AWAR_NDS_SELECT)->read_int();
39    char buf[256];
40   
41    sprintf(buf, ED4_AWAR_NDS_ACI_TEMPLATE, toggle);
42    if (NDS_command) {
43        free(NDS_command);
44    }
45    NDS_command = root->awar(buf)->read_string();
46   
47    sprintf(buf, ED4_AWAR_NDS_WIDTH_TEMPLATE, toggle);
48    NDS_width = root->awar(buf)->read_int();
49   
50    if (int(refresh)) {
51        //      GB_transaction dummy(gb_main);
52       
53        ED4_calc_terminal_extenstions();       
54        ED4_ROOT->main_manager->route_down_hierarchy(0,0,update_terminal_extension);
55        ED4_gc_is_modified(ED4_ROOT->temp_aww, 0, 0);
56       
57#if 0   
58        ED4_terminal *term = ED4_ROOT->root_group_man->get_first_terminal();
59        while (term) {
60            if (term->is_species_name_terminal()) {
61                update_terminal_extension(0,0,term);
62                term->parent->resize_requested_by_child();
63                term->set_refresh();
64                term->parent->refresh_requested_by_child();
65            }
66            term = term->get_next_terminal();
67        }
68       
69        ED4_ROOT->resize_all();
70        ED4_ROOT->show_all();
71#endif 
72    }
73}
74
75void ED4_create_NDS_awars(AW_root *root)
76{
77    int i;
78    GB_transaction dummy(gb_main);
79   
80    root->awar_int(ED4_AWAR_NDS_SELECT, 0)->add_callback(NDS_changed,1);
81    root->awar_int(ED4_AWAR_NDS_BRACKETS, 6)->set_minmax(0,99)->add_callback(NDS_changed,1);
82    root->awar_int(ED4_AWAR_NDS_INFO_WIDTH, 5)->set_minmax(0,99)->add_callback(NDS_changed,1);
83    root->awar_string(ED4_AWAR_NDS_ECOLI_NAME, "Ecoli (usually)")->add_callback(NDS_changed,1);
84   
85    for (i=0; i<NDS_COUNT; i++) {
86        char buf[256];
87        const char *desc;
88       
89        sprintf(buf, ED4_AWAR_NDS_SELECT_TEMPLATE, i);       
90        root->awar_int(buf, i==0);
91       
92        sprintf(buf, ED4_AWAR_NDS_DESCRIPTION_TEMPLATE, i);
93        switch (i) {
94            case 0: desc = "Short name"; break;
95            case 1: desc = "Full name"; break;
96            default: desc = ""; break;
97        }
98        root->awar_string(buf, desc);
99       
100        const char *aci;
101        sprintf(buf, ED4_AWAR_NDS_ACI_TEMPLATE, i);
102        switch (i) {
103            case 0: aci = "readdb(name)"; break;
104            case 1: aci = "readdb(full_name)"; break;
105            default: aci = "\"<not defined>\""; break;
106        }
107        root->awar_string(buf, aci)->add_callback(NDS_changed,1);
108       
109        int len;
110        sprintf(buf, ED4_AWAR_NDS_WIDTH_TEMPLATE, i);
111        switch (i) {
112            case 0: len = 9; break;
113            case 1: len = 27; break;
114            default: len = 20; break;
115        }
116        root->awar_int(buf, len)->add_callback(NDS_changed,1);
117    }
118   
119    NDS_changed(root,0); // init globals
120}
121
122/* a crazy implementation of a toggle field */
123void ed4_nds_select_change(AW_window *aww,AW_CL selected){
124    int i;
125    AW_root *aw_root = aww->get_root();
126    for (i=0;i<NDS_COUNT;i++){
127        const char *awar_name = GBS_global_string(ED4_AWAR_NDS_SELECT_TEMPLATE,i);
128        aw_root->awar(awar_name)->write_int( (i==selected)? 1:0);
129    }
130    aw_root->awar(ED4_AWAR_NDS_SELECT)->write_int(selected);
131}
132
133AW_window *ED4_create_nds_window(AW_root *root)
134{
135    AW_window_simple *aws = new AW_window_simple;
136    int description_x, aci_x, length_x;
137    int i, dummy, fieldselectx;
138    //int y[NDS_COUNT];
139    //int toggle_y, data_x;
140   
141    aws->init(root, "NDS_PROPS", "NDS", 100, 100);
142    aws->load_xfig("edit4/nds.fig");
143   
144    aws->callback( (AW_CB0)AW_POPDOWN);
145    aws->at("close");
146    aws->create_button("CLOSE", "CLOSE","C");
147   
148    aws->callback( AW_POPUP_HELP,(AW_CL)"ed4_nds.hlp");
149    aws->at("help");
150    aws->create_button("HELP", "HELP","H");   
151   
152    aws->at("brackets");
153    aws->label("Used maximum group depth");
154    aws->create_input_field(ED4_AWAR_NDS_BRACKETS, 3);
155   
156    aws->at("infowidth");
157    aws->label("Display width used for info-field");
158    aws->create_input_field(ED4_AWAR_NDS_INFO_WIDTH, 3);
159   
160    aws->at("ecoli_name");
161    aws->label("Name displayed for SAI: ECOLI");
162    aws->create_input_field(ED4_AWAR_NDS_ECOLI_NAME, 20);
163   
164    aws->auto_space(10, 2);
165   
166    aws->at("toggle");
167    aws->at_newline();
168    aws->get_at_position(&fieldselectx, &dummy);
169   
170    for (i=0; i<NDS_COUNT; ++i) {
171        char buf[256];
172        sprintf(buf, ED4_AWAR_NDS_SELECT_TEMPLATE, i);
173        aws->callback(ed4_nds_select_change,i);
174        aws->create_toggle(buf);
175       
176        aws->get_at_position( &description_x,&dummy );
177        sprintf(buf,ED4_AWAR_NDS_DESCRIPTION_TEMPLATE,i);
178        aws->create_input_field(buf,15);
179
180        aws->get_at_position( &aci_x,&dummy );
181        sprintf(buf,ED4_AWAR_NDS_ACI_TEMPLATE,i);
182        aws->create_input_field(buf,30);
183               
184        aws->get_at_position( &length_x,&dummy );
185        sprintf(buf,ED4_AWAR_NDS_WIDTH_TEMPLATE,i);
186        aws->create_input_field(buf,3);
187               
188        aws->at_newline();
189    }
190   
191    aws->at("head");
192    aws->at_x(description_x);
193    aws->create_button(0, "DESCRIPTION");
194    aws->at_x(aci_x);
195    aws->create_button(0, "ACI PROGRAM");
196    aws->at_x(length_x);
197    aws->create_button(0, "WIDTH");
198   
199    return (AW_window*)aws;
200}   
201
202/*
203    aws->auto_increment(0, 25);
204   
205    aws->at("toggle");
206    aws->get_at_position(&dummy, &toggle_y);
207   
208    aws->auto_space(10, 2);
209   
210    // calculate y-offset between two NDS toggles
211    {
212        aws->at_newline();
213        aws->create_button(0, "");
214   
215        int y_after_toggle;
216        aws->get_at_position(&dummy, &y_after_toggle);
217       
218        int y_per_toggle = y_after_toggle-toggle_y;
219        for (i=0; i<NDS_COUNT; i++) {
220            y[i] = toggle_y + y_per_toggle*i;
221        }
222    }
223   
224    // insert toggles for NDS
225    char toggle_name[] = "A";
226    aws->at("toggle");
227    aws->create_toggle_field(ED4_AWAR_NDS_TOGGLE, 0);
228    aws->insert_default_toggle(toggle_name, "", 0);
229    for (i=1; i<NDS_COUNT; i++) {
230        toggle_name[0]++;
231        aws->insert_toggle(toggle_name, "", i);
232    }
233    aws->update_toggle_field();
234   
235    aws->at("data");
236    aws->get_at_position(&data_x, &dummy);
237   
238    // add data fields behind each toggle
239    aws->auto_space(10,0);
240   
241    for (i=0; i<NDS_COUNT; i++) {
242        char buf[256];
243       
244        aws->at(data_x, y[i]);
245       
246        sprintf(buf, ED4_AWAR_NDS_DESCRIPTION_TEMPLATE, i);
247        aws->get_at_position(&description_x, &dummy);
248        aws->create_input_field(buf, 15);
249       
250        sprintf(buf, ED4_AWAR_NDS_ACI_TEMPLATE, i);
251        aws->get_at_position(&aci_x, &dummy);
252        aws->create_input_field(buf, 30);
253       
254        sprintf(buf, ED4_AWAR_NDS_WIDTH_TEMPLATE, i);
255        aws->get_at_position(&length_x, &dummy);
256        aws->create_input_field(buf, 3);
257    }
258   
259    aws->auto_off();
260   
261    return (AW_window*)aws;
262
263*/
Note: See TracBrowser for help on using the repository browser.