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