source: tags/ms_r17q2/EDIT4/ED4_nds.cxx

Last change on this file was 15223, checked in by westram, 8 years ago
  • reintegrates 'flags' into 'trunk'
    • DRYed
      • group generation code
      • ref-terminal access
    • layout done by managers (removed manual coordinate calculation)
    • dynamic size calculated by terminals themselves
    • fix design issues
      • brackets were used where groups should have been used. fixed
      • fix many bad/spammy names
    • fix broken member-code (only worked with a NULL sentinel present)
    • dynamic indentation (according to visible group-nesting)
  • adds: log:branches/flags@15098:15222
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.4 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
36int ED4_get_NDS_width() {
37    return NDS_width;
38}
39
40static void NDS_changed(AW_root *root, bool doRefresh) {
41    int toggle = root->awar(ED4_AWAR_NDS_SELECT)->read_int();
42
43    char buf[256];
44    sprintf(buf, ED4_AWAR_NDS_ACI_TEMPLATE, toggle);
45    freeset(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 (doRefresh) ED4_request_relayout();
51}
52
53void ED4_create_NDS_awars(AW_root *root)
54{
55    int i;
56    GB_transaction ta(GLOBAL_gb_main);
57
58    RootCallback ndsRefreshCb = makeRootCallback(NDS_changed, true);
59    root->awar_int(ED4_AWAR_NDS_SELECT, 0)->add_callback(ndsRefreshCb);
60    root->awar_int(ED4_AWAR_NDS_INFO_WIDTH, 5)->set_minmax(0, 99)->add_callback(ndsRefreshCb);
61    root->awar_string(ED4_AWAR_NDS_ECOLI_NAME, "Ecoli")->add_callback(ndsRefreshCb);
62
63    for (i=0; i<NDS_COUNT; i++) {
64        char buf[256];
65        const char *desc;
66
67        sprintf(buf, ED4_AWAR_NDS_SELECT_TEMPLATE, i);
68        root->awar_int(buf, i==0);
69
70        sprintf(buf, ED4_AWAR_NDS_DESCRIPTION_TEMPLATE, i);
71        switch (i) {
72            case 0: desc = "Short name"; break;
73            case 1: desc = "Full name"; break;
74            default: desc = ""; break;
75        }
76        root->awar_string(buf, desc);
77
78        const char *aci;
79        sprintf(buf, ED4_AWAR_NDS_ACI_TEMPLATE, i);
80        switch (i) {
81            case 0: aci = "readdb(name)"; break;
82            case 1: aci = "readdb(full_name)"; break;
83            default: aci = "\"<not defined>\""; break;
84        }
85        root->awar_string(buf, aci)->add_callback(ndsRefreshCb);
86
87        int len;
88        sprintf(buf, ED4_AWAR_NDS_WIDTH_TEMPLATE, i);
89        switch (i) {
90            case 0:  len =  8; break;
91            case 1:  len = 26; break;
92            default: len = 20; break;
93        }
94        root->awar_int(buf, len)->add_callback(ndsRefreshCb);
95    }
96
97    NDS_changed(root, false); // init globals (no refresh needed)
98}
99
100// a crazy implementation of a toggle field
101static void ed4_nds_select_change(AW_window *aww, int selected) {
102    AW_root *aw_root = aww->get_root();
103    for (int i=0; i<NDS_COUNT; i++) {
104        const char *awar_name = GBS_global_string(ED4_AWAR_NDS_SELECT_TEMPLATE, i);
105        aw_root->awar(awar_name)->write_int((i==selected) ? 1 : 0);
106    }
107    aw_root->awar(ED4_AWAR_NDS_SELECT)->write_int(selected);
108}
109
110AW_window *ED4_create_nds_window(AW_root *root) {
111    AW_window_simple *aws = new AW_window_simple;
112
113    aws->init(root, "E4_NDS_PROPS", "NDS");
114    aws->load_xfig("edit4/nds.fig");
115
116    aws->callback(AW_POPDOWN);
117    aws->at("close");
118    aws->create_button("CLOSE", "CLOSE", "C");
119
120    aws->callback(makeHelpCallback("ed4_nds.hlp"));
121    aws->at("help");
122    aws->create_button("HELP", "HELP", "H");
123
124    aws->at("infowidth");
125    aws->label("Display width used for info-field");
126    aws->create_input_field(ED4_AWAR_NDS_INFO_WIDTH, 3);
127
128    aws->at("ecoli_name");
129    aws->label("Name displayed for SAI: ECOLI");
130    aws->create_input_field(ED4_AWAR_NDS_ECOLI_NAME, 20);
131
132    aws->auto_space(10, 2);
133
134    aws->at("toggle");
135    aws->at_newline();
136
137    int dummy, fieldselectx, description_x, aci_x, length_x;
138    aws->get_at_position(&fieldselectx, &dummy);
139
140    for (int i=0; i<NDS_COUNT; ++i) {
141        char buf[256];
142        sprintf(buf, ED4_AWAR_NDS_SELECT_TEMPLATE, i);
143        aws->callback(makeWindowCallback(ed4_nds_select_change, i)); // @@@ used as TOGGLE_CLICK_CB (see #559)
144        aws->create_toggle(buf);
145
146        aws->get_at_position(&description_x, &dummy);
147        sprintf(buf, ED4_AWAR_NDS_DESCRIPTION_TEMPLATE, i);
148        aws->create_input_field(buf, 15);
149
150        aws->get_at_position(&aci_x, &dummy);
151        sprintf(buf, ED4_AWAR_NDS_ACI_TEMPLATE, i);
152        aws->create_input_field(buf, 30);
153
154        aws->get_at_position(&length_x, &dummy);
155        sprintf(buf, ED4_AWAR_NDS_WIDTH_TEMPLATE, i);
156        aws->create_input_field(buf, 3);
157
158        aws->at_newline();
159    }
160
161    aws->at("head");
162    aws->at_x(description_x);
163    aws->create_button(0, "DESCRIPTION");
164    aws->at_x(aci_x);
165    aws->create_button(0, "ACI PROGRAM");
166    aws->at_x(length_x);
167    aws->create_button(0, "WIDTH");
168
169    return (AW_window*)aws;
170}
171
Note: See TracBrowser for help on using the repository browser.