root/trunk/EDIT4/ED4_nds.cxx

Revision 8621, 5.7 KB (checked in by westram, 5 weeks ago)

merge from e4fix [8340] [8341] [8342] [8343] [8344] [8345] [8346] [8347] [8348] [8349] [8350] [8353] [8354] [8362] [8370] [8371] [8372] [8373] [8374] [8375]

  • changed refresh behavior
    • refresh_all_windows
      • call via timer (every 2 sec)
      • replaced by refresh-requests where needed
      • added ED4_trigger_instant_refresh
    • set_refresh -> request_refresh
    • removed duplicated refresh-request in ED4_consensus_definition_changed
    • replaced ED4_refresh_window by ED4_request_full_refresh
      • some callers now request fewer refreshes
      • all callers now cause refresh of ALL windows
    • ED4_cursor::ShowCursor no longer updates global AWARs when used for display only
    • refresh_window does not handle updates (it is only used to quickly draw the cursor)
      • renamed into special_window_refresh() to disencourage usage
    • removed implicit clearing of refresh flags previously done when refresh propagated down through windows, areas and hierarchy. Instead refresh_all_windows explicitely calls clear_refresh when done.
  • cleaned up resize requests
  • removed extra sync in ED4_resize_cb
  • removed special handling of 1st call to ED4_expose_cb (no idea why, but this fixes an ancient bug: "save props in hide-all-gaps mode")
    • no longer abuse ED4_expose_cb
  • trigger relayout
    • when helix/seq spacing is changed
  • ED4_WinContext
    • missing when NDS changed
    • expect one in ED4_root::special_window_refresh
    • provide from ED4_cursor::delete_cursor
  • EDIT4 scrolling
    • scrollbar code refactored
    • SLIDER_OFFSET was missing in calculation of lower/right folding lines (fixed)
    • picture size announced by ED4_window::update_scrolled_rectangle was off by 1
    • fixed scroll/resize bugs introduced in [8618]
  • added debug code
    • print backtrace on negative folding line dimension
    • print mismatch if slider postions and folding line dimensions are out of sync
  • sequence color mapping
    • fixed broken window layout
    • increased number of sets to 8
      • added symbolic ambiguity set as default
    • hide default value '=0'
  • group name generation (index-safety)
  • execute callback-guards and post-useraction-callback whenever an awar change is directly triggered by a widget
  • moved (ARB_)strNULLcmp to global header
  • doc/fix unexpectable behavior (NULL is bigger that any text) with a test
  • dont use magics for system folder
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
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
19#define NDS_COUNT 10
20
21static char *NDS_command = 0;
22static int NDS_width = 1;
23
24char *ED4_get_NDS_text(ED4_species_manager *species_man) {
25    GBDATA *gbd = species_man->get_species_pointer();
26    e4_assert(gbd);
27
28    e4_assert(NDS_command);
29    char *result = GB_command_interpreter(GLOBAL_gb_main, "", NDS_command, gbd, 0);
30    if (!result) {
31        result = strdup("<error>");
32    }
33    return 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_calc_terminal_extentions();
53        ED4_ROOT->main_manager->route_down_hierarchy(update_terminal_extension).expect_no_error();
54        ED4_ROOT->main_manager->request_resize();
55    }
56}
57
58void ED4_create_NDS_awars(AW_root *root)
59{
60    int i;
61    GB_transaction dummy(GLOBAL_gb_main);
62
63    root->awar_int(ED4_AWAR_NDS_SELECT, 0)->add_callback(NDS_changed, 1);
64    root->awar_int(ED4_AWAR_NDS_BRACKETS, 6)->set_minmax(0, 99)->add_callback(NDS_changed, 1);
65    root->awar_int(ED4_AWAR_NDS_INFO_WIDTH, 5)->set_minmax(0, 99)->add_callback(NDS_changed, 1);
66    root->awar_string(ED4_AWAR_NDS_ECOLI_NAME, "Ecoli")->add_callback(NDS_changed, 1);
67
68    for (i=0; i<NDS_COUNT; i++) {
69        char buf[256];
70        const char *desc;
71
72        sprintf(buf, ED4_AWAR_NDS_SELECT_TEMPLATE, i);
73        root->awar_int(buf, i==0);
74
75        sprintf(buf, ED4_AWAR_NDS_DESCRIPTION_TEMPLATE, i);
76        switch (i) {
77            case 0: desc = "Short name"; break;
78            case 1: desc = "Full name"; break;
79            default: desc = ""; break;
80        }
81        root->awar_string(buf, desc);
82
83        const char *aci;
84        sprintf(buf, ED4_AWAR_NDS_ACI_TEMPLATE, i);
85        switch (i) {
86            case 0: aci = "readdb(name)"; break;
87            case 1: aci = "readdb(full_name)"; break;
88            default: aci = "\"<not defined>\""; break;
89        }
90        root->awar_string(buf, aci)->add_callback(NDS_changed, 1);
91
92        int len;
93        sprintf(buf, ED4_AWAR_NDS_WIDTH_TEMPLATE, i);
94        switch (i) {
95            case 0: len = 9; break;
96            case 1: len = 27; break;
97            default: len = 20; break;
98        }
99        root->awar_int(buf, len)->add_callback(NDS_changed, 1);
100    }
101
102    NDS_changed(root, 0); // init globals
103}
104
105// a crazy implementation of a toggle field
106static void ed4_nds_select_change(AW_window *aww, AW_CL selected) {
107    int i;
108    AW_root *aw_root = aww->get_root();
109    for (i=0; i<NDS_COUNT; i++) {
110        const char *awar_name = GBS_global_string(ED4_AWAR_NDS_SELECT_TEMPLATE, i);
111        aw_root->awar(awar_name)->write_int((i==selected) ? 1 : 0);
112    }
113    aw_root->awar(ED4_AWAR_NDS_SELECT)->write_int(selected);
114}
115
116AW_window *ED4_create_nds_window(AW_root *root)
117{
118    AW_window_simple *aws = new AW_window_simple;
119    int               description_x, aci_x, length_x;
120    int               i, dummy, fieldselectx;
121
122    aws->init(root, "NDS_PROPS", "NDS");
123    aws->load_xfig("edit4/nds.fig");
124
125    aws->callback((AW_CB0)AW_POPDOWN);
126    aws->at("close");
127    aws->create_button("CLOSE", "CLOSE", "C");
128
129    aws->callback(AW_POPUP_HELP, (AW_CL)"ed4_nds.hlp");
130    aws->at("help");
131    aws->create_button("HELP", "HELP", "H");
132
133    aws->at("brackets");
134    aws->label("Used maximum group depth");
135    aws->create_input_field(ED4_AWAR_NDS_BRACKETS, 3);
136
137    aws->at("infowidth");
138    aws->label("Display width used for info-field");
139    aws->create_input_field(ED4_AWAR_NDS_INFO_WIDTH, 3);
140
141    aws->at("ecoli_name");
142    aws->label("Name displayed for SAI: ECOLI");
143    aws->create_input_field(ED4_AWAR_NDS_ECOLI_NAME, 20);
144
145    aws->auto_space(10, 2);
146
147    aws->at("toggle");
148    aws->at_newline();
149    aws->get_at_position(&fieldselectx, &dummy);
150
151    for (i=0; i<NDS_COUNT; ++i) {
152        char buf[256];
153        sprintf(buf, ED4_AWAR_NDS_SELECT_TEMPLATE, i);
154        aws->callback(ed4_nds_select_change, i);
155        aws->create_toggle(buf);
156
157        aws->get_at_position(&description_x, &dummy);
158        sprintf(buf, ED4_AWAR_NDS_DESCRIPTION_TEMPLATE, i);
159        aws->create_input_field(buf, 15);
160
161        aws->get_at_position(&aci_x, &dummy);
162        sprintf(buf, ED4_AWAR_NDS_ACI_TEMPLATE, i);
163        aws->create_input_field(buf, 30);
164
165        aws->get_at_position(&length_x, &dummy);
166        sprintf(buf, ED4_AWAR_NDS_WIDTH_TEMPLATE, i);
167        aws->create_input_field(buf, 3);
168
169        aws->at_newline();
170    }
171
172    aws->at("head");
173    aws->at_x(description_x);
174    aws->create_button(0, "DESCRIPTION");
175    aws->at_x(aci_x);
176    aws->create_button(0, "ACI PROGRAM");
177    aws->at_x(length_x);
178    aws->create_button(0, "WIDTH");
179
180    return (AW_window*)aws;
181}
Note: See TracBrowser for help on using the browser.