1 | // =============================================================== // |
---|
2 | // // |
---|
3 | // File : ED4_nds.cxx // |
---|
4 | // Purpose : // |
---|
5 | // // |
---|
6 | // Institute of Microbiology (Technical University Munich) // |
---|
7 | // http://www.arb-home.de/ // |
---|
8 | // // |
---|
9 | // =============================================================== // |
---|
10 | |
---|
11 | #include "ed4_class.hxx" |
---|
12 | #include "ed4_awars.hxx" |
---|
13 | |
---|
14 | #include <arbdbt.h> |
---|
15 | #include <aw_awar.hxx> |
---|
16 | #include <aw_msg.hxx> |
---|
17 | #include <aw_root.hxx> |
---|
18 | #include <nds.h> |
---|
19 | |
---|
20 | #define NDS_COUNT 10 |
---|
21 | |
---|
22 | static char *NDS_command = 0; |
---|
23 | static int NDS_width = 1; |
---|
24 | |
---|
25 | char *ED4_get_NDS_text(ED4_species_manager *species_man) { |
---|
26 | GBDATA *gbd = species_man->get_species_pointer(); |
---|
27 | e4_assert(gbd); |
---|
28 | |
---|
29 | e4_assert(NDS_command); |
---|
30 | char *result = GB_command_interpreter(GLOBAL_gb_main, "", NDS_command, gbd, 0); |
---|
31 | if (!result) result = GBS_global_string_copy("<error: %s>", GB_await_error()); |
---|
32 | |
---|
33 | return NDS_mask_nonprintable_chars(result); |
---|
34 | } |
---|
35 | |
---|
36 | void ED4_get_NDS_sizes(int *width, int *brackets) { |
---|
37 | *width = NDS_width; |
---|
38 | *brackets = ED4_ROOT->aw_root->awar(ED4_AWAR_NDS_BRACKETS)->read_int(); |
---|
39 | } |
---|
40 | |
---|
41 | static void NDS_changed(AW_root *root, AW_CL refresh) { |
---|
42 | int toggle = root->awar(ED4_AWAR_NDS_SELECT)->read_int(); |
---|
43 | |
---|
44 | char buf[256]; |
---|
45 | sprintf(buf, ED4_AWAR_NDS_ACI_TEMPLATE, toggle); |
---|
46 | freeset(NDS_command, root->awar(buf)->read_string()); |
---|
47 | |
---|
48 | sprintf(buf, ED4_AWAR_NDS_WIDTH_TEMPLATE, toggle); |
---|
49 | NDS_width = root->awar(buf)->read_int(); |
---|
50 | |
---|
51 | if (refresh) { |
---|
52 | ED4_request_relayout(); |
---|
53 | } |
---|
54 | } |
---|
55 | |
---|
56 | void ED4_create_NDS_awars(AW_root *root) |
---|
57 | { |
---|
58 | int i; |
---|
59 | GB_transaction ta(GLOBAL_gb_main); |
---|
60 | |
---|
61 | root->awar_int(ED4_AWAR_NDS_SELECT, 0)->add_callback(NDS_changed, 1); |
---|
62 | root->awar_int(ED4_AWAR_NDS_BRACKETS, 6)->set_minmax(0, 99)->add_callback(NDS_changed, 1); |
---|
63 | root->awar_int(ED4_AWAR_NDS_INFO_WIDTH, 5)->set_minmax(0, 99)->add_callback(NDS_changed, 1); |
---|
64 | root->awar_string(ED4_AWAR_NDS_ECOLI_NAME, "Ecoli")->add_callback(NDS_changed, 1); |
---|
65 | |
---|
66 | for (i=0; i<NDS_COUNT; i++) { |
---|
67 | char buf[256]; |
---|
68 | const char *desc; |
---|
69 | |
---|
70 | sprintf(buf, ED4_AWAR_NDS_SELECT_TEMPLATE, i); |
---|
71 | root->awar_int(buf, i==0); |
---|
72 | |
---|
73 | sprintf(buf, ED4_AWAR_NDS_DESCRIPTION_TEMPLATE, i); |
---|
74 | switch (i) { |
---|
75 | case 0: desc = "Short name"; break; |
---|
76 | case 1: desc = "Full name"; break; |
---|
77 | default: desc = ""; break; |
---|
78 | } |
---|
79 | root->awar_string(buf, desc); |
---|
80 | |
---|
81 | const char *aci; |
---|
82 | sprintf(buf, ED4_AWAR_NDS_ACI_TEMPLATE, i); |
---|
83 | switch (i) { |
---|
84 | case 0: aci = "readdb(name)"; break; |
---|
85 | case 1: aci = "readdb(full_name)"; break; |
---|
86 | default: aci = "\"<not defined>\""; break; |
---|
87 | } |
---|
88 | root->awar_string(buf, aci)->add_callback(NDS_changed, 1); |
---|
89 | |
---|
90 | int len; |
---|
91 | sprintf(buf, ED4_AWAR_NDS_WIDTH_TEMPLATE, i); |
---|
92 | switch (i) { |
---|
93 | case 0: len = 9; break; |
---|
94 | case 1: len = 27; break; |
---|
95 | default: len = 20; break; |
---|
96 | } |
---|
97 | root->awar_int(buf, len)->add_callback(NDS_changed, 1); |
---|
98 | } |
---|
99 | |
---|
100 | NDS_changed(root, 0); // init globals |
---|
101 | } |
---|
102 | |
---|
103 | // a crazy implementation of a toggle field |
---|
104 | static void ed4_nds_select_change(AW_window *aww, AW_CL selected) { |
---|
105 | int i; |
---|
106 | AW_root *aw_root = aww->get_root(); |
---|
107 | for (i=0; i<NDS_COUNT; i++) { |
---|
108 | const char *awar_name = GBS_global_string(ED4_AWAR_NDS_SELECT_TEMPLATE, i); |
---|
109 | aw_root->awar(awar_name)->write_int((i==selected) ? 1 : 0); |
---|
110 | } |
---|
111 | aw_root->awar(ED4_AWAR_NDS_SELECT)->write_int(selected); |
---|
112 | } |
---|
113 | |
---|
114 | AW_window *ED4_create_nds_window(AW_root *root) |
---|
115 | { |
---|
116 | AW_window_simple *aws = new AW_window_simple; |
---|
117 | int description_x, aci_x, length_x; |
---|
118 | int i, dummy, fieldselectx; |
---|
119 | |
---|
120 | aws->init(root, "NDS_PROPS", "NDS"); |
---|
121 | aws->load_xfig("edit4/nds.fig"); |
---|
122 | |
---|
123 | aws->callback((AW_CB0)AW_POPDOWN); |
---|
124 | aws->at("close"); |
---|
125 | aws->create_button("CLOSE", "CLOSE", "C"); |
---|
126 | |
---|
127 | aws->callback(makeHelpCallback("ed4_nds.hlp")); |
---|
128 | aws->at("help"); |
---|
129 | aws->create_button("HELP", "HELP", "H"); |
---|
130 | |
---|
131 | aws->at("brackets"); |
---|
132 | aws->label("Used maximum group depth"); |
---|
133 | aws->create_input_field(ED4_AWAR_NDS_BRACKETS, 3); |
---|
134 | |
---|
135 | aws->at("infowidth"); |
---|
136 | aws->label("Display width used for info-field"); |
---|
137 | aws->create_input_field(ED4_AWAR_NDS_INFO_WIDTH, 3); |
---|
138 | |
---|
139 | aws->at("ecoli_name"); |
---|
140 | aws->label("Name displayed for SAI: ECOLI"); |
---|
141 | aws->create_input_field(ED4_AWAR_NDS_ECOLI_NAME, 20); |
---|
142 | |
---|
143 | aws->auto_space(10, 2); |
---|
144 | |
---|
145 | aws->at("toggle"); |
---|
146 | aws->at_newline(); |
---|
147 | aws->get_at_position(&fieldselectx, &dummy); |
---|
148 | |
---|
149 | for (i=0; i<NDS_COUNT; ++i) { |
---|
150 | char buf[256]; |
---|
151 | sprintf(buf, ED4_AWAR_NDS_SELECT_TEMPLATE, i); |
---|
152 | aws->callback(ed4_nds_select_change, i); |
---|
153 | aws->create_toggle(buf); |
---|
154 | |
---|
155 | aws->get_at_position(&description_x, &dummy); |
---|
156 | sprintf(buf, ED4_AWAR_NDS_DESCRIPTION_TEMPLATE, i); |
---|
157 | aws->create_input_field(buf, 15); |
---|
158 | |
---|
159 | aws->get_at_position(&aci_x, &dummy); |
---|
160 | sprintf(buf, ED4_AWAR_NDS_ACI_TEMPLATE, i); |
---|
161 | aws->create_input_field(buf, 30); |
---|
162 | |
---|
163 | aws->get_at_position(&length_x, &dummy); |
---|
164 | sprintf(buf, ED4_AWAR_NDS_WIDTH_TEMPLATE, i); |
---|
165 | aws->create_input_field(buf, 3); |
---|
166 | |
---|
167 | aws->at_newline(); |
---|
168 | } |
---|
169 | |
---|
170 | aws->at("head"); |
---|
171 | aws->at_x(description_x); |
---|
172 | aws->create_button(0, "DESCRIPTION"); |
---|
173 | aws->at_x(aci_x); |
---|
174 | aws->create_button(0, "ACI PROGRAM"); |
---|
175 | aws->at_x(length_x); |
---|
176 | aws->create_button(0, "WIDTH"); |
---|
177 | |
---|
178 | return (AW_window*)aws; |
---|
179 | } |
---|
180 | |
---|