source: tags/arb_5.5/EDIT4/ED4_nds.cxx

Last change on this file was 5148, checked in by westram, 16 years ago
  • replaced global gb_main by GLOBAL_gb_main
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.7 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(GLOBAL_gb_main, "", NDS_command, gbd, 0);
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        ED4_calc_terminal_extentions();
52        ED4_ROOT->main_manager->route_down_hierarchy(0,0,update_terminal_extension);
53        ED4_gc_is_modified(ED4_ROOT->get_aww(), 0, 0);
54    }
55}
56
57void ED4_create_NDS_awars(AW_root *root)
58{
59    int i;
60    GB_transaction dummy(GLOBAL_gb_main);
61
62    root->awar_int(ED4_AWAR_NDS_SELECT, 0)->add_callback(NDS_changed,1);
63    root->awar_int(ED4_AWAR_NDS_BRACKETS, 6)->set_minmax(0,99)->add_callback(NDS_changed,1);
64    root->awar_int(ED4_AWAR_NDS_INFO_WIDTH, 5)->set_minmax(0,99)->add_callback(NDS_changed,1);
65    root->awar_string(ED4_AWAR_NDS_ECOLI_NAME, "Ecoli")->add_callback(NDS_changed,1);
66
67    for (i=0; i<NDS_COUNT; i++) {
68        char buf[256];
69        const char *desc;
70
71        sprintf(buf, ED4_AWAR_NDS_SELECT_TEMPLATE, i);
72        root->awar_int(buf, i==0);
73
74        sprintf(buf, ED4_AWAR_NDS_DESCRIPTION_TEMPLATE, i);
75        switch (i) {
76            case 0: desc = "Short name"; break;
77            case 1: desc = "Full name"; break;
78            default: desc = ""; break;
79        }
80        root->awar_string(buf, desc);
81
82        const char *aci;
83        sprintf(buf, ED4_AWAR_NDS_ACI_TEMPLATE, i);
84        switch (i) {
85            case 0: aci = "readdb(name)"; break;
86            case 1: aci = "readdb(full_name)"; break;
87            default: aci = "\"<not defined>\""; break;
88        }
89        root->awar_string(buf, aci)->add_callback(NDS_changed,1);
90
91        int len;
92        sprintf(buf, ED4_AWAR_NDS_WIDTH_TEMPLATE, i);
93        switch (i) {
94            case 0: len = 9; break;
95            case 1: len = 27; break;
96            default: len = 20; break;
97        }
98        root->awar_int(buf, len)->add_callback(NDS_changed,1);
99    }
100
101    NDS_changed(root,0); // init globals
102}
103
104/* a crazy implementation of a toggle field */
105void ed4_nds_select_change(AW_window *aww,AW_CL selected){
106    int i;
107    AW_root *aw_root = aww->get_root();
108    for (i=0;i<NDS_COUNT;i++){
109        const char *awar_name = GBS_global_string(ED4_AWAR_NDS_SELECT_TEMPLATE,i);
110        aw_root->awar(awar_name)->write_int( (i==selected)? 1:0);
111    }
112    aw_root->awar(ED4_AWAR_NDS_SELECT)->write_int(selected);
113}
114
115AW_window *ED4_create_nds_window(AW_root *root)
116{
117    AW_window_simple *aws = new AW_window_simple;
118    int description_x, aci_x, length_x;
119    int i, dummy, fieldselectx;
120    //int y[NDS_COUNT];
121    //int toggle_y, data_x;
122
123    aws->init(root, "NDS_PROPS", "NDS");
124    aws->load_xfig("edit4/nds.fig");
125
126    aws->callback( (AW_CB0)AW_POPDOWN);
127    aws->at("close");
128    aws->create_button("CLOSE", "CLOSE","C");
129
130    aws->callback( AW_POPUP_HELP,(AW_CL)"ed4_nds.hlp");
131    aws->at("help");
132    aws->create_button("HELP", "HELP","H");
133
134    aws->at("brackets");
135    aws->label("Used maximum group depth");
136    aws->create_input_field(ED4_AWAR_NDS_BRACKETS, 3);
137
138    aws->at("infowidth");
139    aws->label("Display width used for info-field");
140    aws->create_input_field(ED4_AWAR_NDS_INFO_WIDTH, 3);
141
142    aws->at("ecoli_name");
143    aws->label("Name displayed for SAI: ECOLI");
144    aws->create_input_field(ED4_AWAR_NDS_ECOLI_NAME, 20);
145
146    aws->auto_space(10, 2);
147
148    aws->at("toggle");
149    aws->at_newline();
150    aws->get_at_position(&fieldselectx, &dummy);
151
152    for (i=0; i<NDS_COUNT; ++i) {
153        char buf[256];
154        sprintf(buf, ED4_AWAR_NDS_SELECT_TEMPLATE, i);
155        aws->callback(ed4_nds_select_change,i);
156        aws->create_toggle(buf);
157
158        aws->get_at_position( &description_x,&dummy );
159        sprintf(buf,ED4_AWAR_NDS_DESCRIPTION_TEMPLATE,i);
160        aws->create_input_field(buf,15);
161
162        aws->get_at_position( &aci_x,&dummy );
163        sprintf(buf,ED4_AWAR_NDS_ACI_TEMPLATE,i);
164        aws->create_input_field(buf,30);
165
166        aws->get_at_position( &length_x,&dummy );
167        sprintf(buf,ED4_AWAR_NDS_WIDTH_TEMPLATE,i);
168        aws->create_input_field(buf,3);
169
170        aws->at_newline();
171    }
172
173    aws->at("head");
174    aws->at_x(description_x);
175    aws->create_button(0, "DESCRIPTION");
176    aws->at_x(aci_x);
177    aws->create_button(0, "ACI PROGRAM");
178    aws->at_x(length_x);
179    aws->create_button(0, "WIDTH");
180
181    return (AW_window*)aws;
182}
183
184/*
185    aws->auto_increment(0, 25);
186
187    aws->at("toggle");
188    aws->get_at_position(&dummy, &toggle_y);
189
190    aws->auto_space(10, 2);
191
192    // calculate y-offset between two NDS toggles
193    {
194        aws->at_newline();
195        aws->create_button(0, "");
196
197        int y_after_toggle;
198        aws->get_at_position(&dummy, &y_after_toggle);
199
200        int y_per_toggle = y_after_toggle-toggle_y;
201        for (i=0; i<NDS_COUNT; i++) {
202            y[i] = toggle_y + y_per_toggle*i;
203        }
204    }
205
206    // insert toggles for NDS
207    char toggle_name[] = "A";
208    aws->at("toggle");
209    aws->create_toggle_field(ED4_AWAR_NDS_TOGGLE, 0);
210    aws->insert_default_toggle(toggle_name, "", 0);
211    for (i=1; i<NDS_COUNT; i++) {
212        toggle_name[0]++;
213        aws->insert_toggle(toggle_name, "", i);
214    }
215    aws->update_toggle_field();
216
217    aws->at("data");
218    aws->get_at_position(&data_x, &dummy);
219
220    // add data fields behind each toggle
221    aws->auto_space(10,0);
222
223    for (i=0; i<NDS_COUNT; i++) {
224        char buf[256];
225
226        aws->at(data_x, y[i]);
227
228        sprintf(buf, ED4_AWAR_NDS_DESCRIPTION_TEMPLATE, i);
229        aws->get_at_position(&description_x, &dummy);
230        aws->create_input_field(buf, 15);
231
232        sprintf(buf, ED4_AWAR_NDS_ACI_TEMPLATE, i);
233        aws->get_at_position(&aci_x, &dummy);
234        aws->create_input_field(buf, 30);
235
236        sprintf(buf, ED4_AWAR_NDS_WIDTH_TEMPLATE, i);
237        aws->get_at_position(&length_x, &dummy);
238        aws->create_input_field(buf, 3);
239    }
240
241    aws->auto_off();
242
243    return (AW_window*)aws;
244
245*/
Note: See TracBrowser for help on using the repository browser.