| 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 | |
|---|