source: branches/profile/EDIT4/ED4_nds.cxx

Last change on this file was 11464, checked in by westram, 10 years ago
  • un-dummy-fied transaction (renames only)
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.6 KB
Line 
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
22static char *NDS_command = 0;
23static int NDS_width = 1;
24
25char *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
36void 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
41static 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
56void 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
104static 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
114AW_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
Note: See TracBrowser for help on using the repository browser.