Changeset 8340 for branches

Show
Ignore:
Timestamp:
25/01/12 19:14:54 (4 months ago)
Author:
westram
Message:
  • changed refresh behavior
    • refresh_all_windows
      • call via timer (currently 5 times/second). Some things get a bit slow by this patch, fix later
      • replaced by refresh-requests where needed (other calls removed)
    • lasting refresh problems in
      • protein viewer (code too bad to fix anything there now)
Location:
branches/e4fix/EDIT4
Files:
11 modified

Legend:

Unmodified
Added
Removed
  • branches/e4fix/EDIT4/ED4_ProteinViewer.cxx

    r8339 r8340  
    402402    } 
    403403    // Refresh all windows 
    404     ED4_ROOT->refresh_all_windows(0); 
     404    // ED4_ROOT->refresh_all_windows(0); 
    405405} 
    406406 
  • branches/e4fix/EDIT4/ED4_base.cxx

    r8338 r8340  
    3030void ED4_manager::changed_by_database() { 
    3131    set_refresh(1); 
    32     if (parent) { 
    33         parent->refresh_requested_by_child(); 
    34     } 
    35     else { 
    36 #if defined(DEBUG) 
    37         printf("ED4_manager::changed_by_database: I have no parent!\n"); 
    38 #endif // DEBUG 
    39     } 
    40  
    41     ED4_ROOT->refresh_all_windows(0); 
     32    if (parent) parent->refresh_requested_by_child(); 
    4233} 
    4334 
     
    148139 
    149140        if (parent) parent->resize_requested_by_child(); 
    150         ED4_ROOT->refresh_all_windows(0); 
    151  
    152         parent = 0; 
    153         //      delete this; // @@@ crashes when removing callback deleted_from_database() 
     141        // parent = 0; 
     142        // delete this; // @@@ crashes when removing callback deleted_from_database() 
    154143    } 
    155144    else { 
  • branches/e4fix/EDIT4/ED4_cursor.cxx

    r8338 r8340  
    670670    if (name && name[0]) { 
    671671        ED4_get_and_jump_to_species(name); 
    672         ED4_ROOT->refresh_all_windows(0); 
    673672    } 
    674673    else { 
     
    679678void ED4_get_and_jump_to_current_from_menu(AW_window *aw, AW_CL cl, AW_CL) { 
    680679    ED4_get_and_jump_to_current(aw, cl); 
    681     ED4_ROOT->refresh_all_windows(0); 
    682680} 
    683681 
     
    775773 
    776774#undef BUFFERSIZE 
    777  
    778     ED4_ROOT->refresh_all_windows(0); 
    779775} 
    780776 
  • branches/e4fix/EDIT4/ED4_manager.cxx

    r8338 r8340  
    1313#include "ed4_protein_2nd_structure.hxx" 
    1414 
    15 // #define TEST_REFRESH_FLAG 
    16  
     15#if defined(DEBUG) 
     16#define TEST_REFRESH_FLAG 
     17#endif 
    1718 
    1819// ----------------------------------------------------------------- 
     
    259260            GB_ERROR err = ED4_pfold_set_SAI(&ED4_ROOT->protstruct, GLOBAL_gb_main, ED4_ROOT->alignment_name, &ED4_ROOT->protstruct_len); 
    260261            if (err) { aw_message(err); result = ED4_R_WARNING; } 
    261             ED4_ROOT->refresh_all_windows(0); // @@@ crazy slowdown ?  
    262             ED4_expose_all_windows(); 
     262            // ED4_ROOT->refresh_all_windows(0); // @@@ crazy slowdown ?  
     263            // ED4_expose_all_windows(); 
    263264        } 
    264265    } 
     
    744745        if (child->update_info.refresh==1 && update_info.refresh==0) { 
    745746            printf("Forgotten refresh-flag in '%s' (son of '%s')\n", child->id, id); 
     747            fflush(stdout); 
    746748            return 0; 
    747749        } 
     
    931933    e4_assert(refresh_flag_ok()); 
    932934#endif 
    933 #if defined(DEBUG) && 0 
    934     printf("Show main_manager\n"); 
    935 #endif 
    936935 
    937936    AW_device *device = current_device(); 
  • branches/e4fix/EDIT4/ED4_mini_classes.cxx

    r8236 r8340  
    437437    delete BK; BK = 0; // invalidate 
    438438 
    439     ED4_ROOT->refresh_all_windows(1); 
     439    ED4_ROOT->request_refresh_for_consensus_terminals(); 
    440440} 
    441441 
     
    463463    int show = root->awar(ED4_AWAR_CONSENSUS_SHOW)->read_int(); 
    464464    ED4_ROOT->root_group_man->route_down_hierarchy(toggle_consensus_display, show).expect_no_error(); 
    465     ED4_ROOT->refresh_all_windows(1); 
    466465} 
    467466 
  • branches/e4fix/EDIT4/ED4_no_class.cxx

    r8338 r8340  
    328328                    error = edit_string->edit(work_info); 
    329329 
    330                     ED4_ROOT->main_manager->Show(1, 0);         // @@@ temporary fix for worst-refresh problems 
     330                    ED4_ROOT->main_manager->Show(1, 0); // temporary fix for worst-refresh problems (@@@ fixme) 
    331331                    // ED4_ROOT->main_manager->Show(); // original version 
    332332 
     
    349349                        seq_term->results().searchAgain(); 
    350350                    } 
    351                     ED4_ROOT->refresh_all_windows(0); 
    352351                } 
    353352 
     
    842841 
    843842void ED4_timer_refresh() { 
    844     GB_begin_transaction(GLOBAL_gb_main);                  // for callbacks from database 
     843    // get all changes from server 
     844    GB_begin_transaction(GLOBAL_gb_main); 
    845845    GB_tell_server_dont_wait(GLOBAL_gb_main); 
    846846    GB_commit_transaction(GLOBAL_gb_main); 
    847847 
    848     // @@@ need to ED4_ROOT->refresh_all_windows(0) here 
    849 } 
    850  
    851 void ED4_timer(AW_root *, AW_CL cd1, AW_CL cd2) 
    852 { 
     848    ED4_ROOT->refresh_all_windows(0); // do delayed refresh 
     849} 
     850 
     851void ED4_timer(AW_root *, AW_CL cd1, AW_CL cd2) { 
    853852    ED4_timer_refresh(); 
    854853    ED4_ROOT->aw_root->add_timed_callback(200, ED4_timer, cd1, cd2); 
     
    929928} 
    930929 
    931 void ED4_set_col_stat_threshold(AW_window * /* aww */, AW_CL cl_do_refresh, AW_CL) { 
     930void ED4_set_col_stat_threshold(AW_window *, AW_CL, AW_CL) { 
    932931    double default_threshold = 90.0; 
    933932    if (ED4_columnStat_terminal::threshold_is_set()) { 
     
    946945        else { 
    947946            ED4_columnStat_terminal::set_threshold(input_threshold); 
    948             if (int(cl_do_refresh)) { 
    949                 ED4_ROOT->refresh_all_windows(1); 
    950             } 
     947            ED4_ROOT->request_refresh_for_specific_terminals(ED4_L_COL_STAT); 
    951948        } 
    952949        free(input); 
     
    10271024        new_seq_man->resize_requested_by_child(); 
    10281025    } 
    1029     ED4_ROOT->refresh_all_windows(0); 
    10301026} 
    10311027 
     
    13401336 
    13411337    ED4_ROOT->create_hierarchy(config_data_middle, config_data_top); 
    1342     ED4_ROOT->refresh_all_windows(1); 
    13431338 
    13441339    free(config_data_middle); 
     
    22012196            } 
    22022197 
    2203             if (error) { 
    2204                 GB_abort_transaction(GLOBAL_gb_main); 
    2205             } 
    2206             else { 
    2207                 GB_pop_transaction(GLOBAL_gb_main); 
    2208  
    2209                 ED4_get_and_jump_to_species(new_species_name); 
    2210                 ED4_ROOT->refresh_all_windows(1); 
    2211             } 
     2198            error = GB_end_transaction(GLOBAL_gb_main, error); 
     2199            if (!error) ED4_get_and_jump_to_species(new_species_name); 
    22122200        } 
    22132201 
  • branches/e4fix/EDIT4/ED4_root.cxx

    r8338 r8340  
    5353} 
    5454 
    55 ED4_returncode ED4_root::refresh_window_simple(int redraw) 
    56 { 
     55static ARB_ERROR request_terminal_refresh(ED4_base *base, AW_CL cl_level) { 
     56    ED4_level lev = ED4_level(cl_level); 
     57    if (lev == ED4_L_NO_LEVEL || (base->spec.level&lev) != 0) { 
     58        if (base->is_terminal()) { 
     59            ED4_terminal *term = base->to_terminal(); 
     60            term->set_refresh(); 
     61            term->parent->refresh_requested_by_child(); 
     62        } 
     63    } 
     64    return NULL; 
     65} 
     66 
     67void ED4_root::request_refresh_for_all_terminals() { 
     68    main_manager->route_down_hierarchy(request_terminal_refresh, ED4_L_NO_LEVEL).expect_no_error(); 
     69} 
     70 
     71void ED4_root::request_refresh_for_specific_terminals(ED4_level lev) { 
     72    main_manager->route_down_hierarchy(request_terminal_refresh, lev).expect_no_error(); 
     73} 
     74 
     75 
     76static ARB_ERROR request_sequence_refresh(ED4_base *base, AW_CL cl_consensi) { 
     77    ARB_ERROR error; 
     78    if (base->spec.level & ED4_L_SPECIES) { 
     79        bool consensi = bool(cl_consensi); 
     80        if (base->flag.is_consensus == consensi) { 
     81            error = base->to_manager()->route_down_hierarchy(request_terminal_refresh, ED4_L_SEQUENCE_STRING); 
     82        } 
     83    } 
     84    return error; 
     85} 
     86 
     87// if you want to refresh consensi AND sequences you may use request_refresh_for_specific_terminals(ED4_L_SEQUENCE_STRING) 
     88void ED4_root::request_refresh_for_consensus_terminals() { 
     89    main_manager->route_down_hierarchy(request_sequence_refresh, true).expect_no_error(); 
     90} 
     91void ED4_root::request_refresh_for_sequence_terminals() { 
     92    main_manager->route_down_hierarchy(request_sequence_refresh, false).expect_no_error(); 
     93} 
     94 
     95ED4_returncode ED4_root::refresh_window_simple(bool redraw) { 
    5796    e4_assert(!main_manager->update_info.delete_requested); 
     97    e4_assert(!main_manager->update_info.update_requested); 
    5898    e4_assert(!main_manager->update_info.resize); 
    5999 
     
    67107} 
    68108 
    69 ED4_returncode ED4_root::refresh_window(int redraw) // this function should only be used for window specific updates (i.e. cursor placement) 
    70 { 
     109void ED4_root::handle_update_requests(bool& redraw) { 
    71110    if (main_manager->update_info.delete_requested) { 
    72111        main_manager->delete_requested_children(); 
    73         redraw = 1; 
     112        redraw = true; 
     113    } 
     114 
     115    if (main_manager->update_info.update_requested) { 
     116        main_manager->update_requested_children(); 
     117        redraw = true; 
    74118    } 
    75119 
    76120    while (main_manager->update_info.resize) { 
    77121        main_manager->resize_requested_by_parent(); 
    78         redraw = 1; 
    79     } 
    80  
     122        redraw = true; 
     123    } 
     124} 
     125 
     126ED4_returncode ED4_root::refresh_window(bool redraw) { 
     127    // this function should only be used for window specific updates (i.e. cursor placement) 
     128    handle_update_requests(redraw); // @@@ problematic (causes refresh w/o win-context, clears flags w/o handling all windows) 
    81129    return refresh_window_simple(redraw); 
    82130} 
    83131 
    84 ED4_returncode ED4_root::refresh_all_windows(int redraw) { 
     132ED4_returncode ED4_root::refresh_all_windows(bool redraw) { 
     133    GB_transaction dummy(GLOBAL_gb_main); 
    85134    last_window_reached = 0; 
    86135 
    87     if (main_manager->update_info.delete_requested) { 
    88         main_manager->delete_requested_children(); 
    89         redraw = 1; 
    90     } 
    91  
    92     if (main_manager->update_info.update_requested) { 
    93         main_manager->update_requested_children(); 
    94         redraw = 1; 
    95     } 
    96  
    97     while (main_manager->update_info.resize) { 
    98         main_manager->resize_requested_by_parent(); 
    99         redraw = 1; 
    100     } 
    101  
     136    handle_update_requests(redraw); 
     137     
    102138    ED4_window *window = first_window; 
    103     GB_transaction dummy(GLOBAL_gb_main); 
    104139    while (window) { 
    105140        if (!window->next) last_window_reached = 1; 
     
    10331068#endif 
    10341069 
    1035 static void col_stat_activated(AW_window *) 
    1036 { 
    1037     ED4_ROOT->column_stat_initialized = 1; 
    1038     ED4_ROOT->column_stat_activated = 1; 
    1039     ED4_ROOT->refresh_all_windows(1); 
    1040 } 
    1041  
    1042 void ED4_activate_col_stat(AW_window *aww, AW_CL, AW_CL) { 
     1070inline void set_col_stat_activated_and_refresh(bool activated) { 
     1071    ED4_ROOT->column_stat_activated = activated; 
     1072    ED4_ROOT->request_refresh_for_sequence_terminals();  
     1073} 
     1074 
     1075static void col_stat_activated(AW_window *) { 
     1076    ED4_ROOT->column_stat_initialized  = 1; 
     1077    set_col_stat_activated_and_refresh(true); 
     1078} 
     1079 
     1080static void activate_col_stat(AW_window *aww, AW_CL, AW_CL) { 
    10431081    if (!ED4_ROOT->column_stat_initialized) { 
    10441082        AW_window *aww_st = STAT_create_main_window(ED4_ROOT->aw_root, ED4_ROOT->st_ml, (AW_CB0)col_stat_activated, (AW_window *)aww); 
    10451083        aww_st->show(); 
    1046         return; 
    10471084    } 
    10481085    else { // re-activate 
    1049         ED4_ROOT->column_stat_activated = 1; 
    1050         ED4_ROOT->refresh_all_windows(1); 
     1086        set_col_stat_activated_and_refresh(true); 
    10511087    } 
    10521088} 
    10531089static void disable_col_stat(AW_window *, AW_CL, AW_CL) { 
    10541090    if (ED4_ROOT->column_stat_initialized && ED4_ROOT->column_stat_activated) { 
    1055         ED4_ROOT->column_stat_activated = 0; 
    1056         ED4_ROOT->refresh_all_windows(1); 
     1091        set_col_stat_activated_and_refresh(false); 
    10571092    } 
    10581093} 
     
    15591594    awmm->insert_menu_topic("show_diff",     "Show only differences to selected", "d", "set_reference.hlp", AWM_ALL, ED4_set_reference_species, 0, 0); 
    15601595    SEP________________________SEP; 
    1561     awmm->insert_menu_topic("enable_col_stat",  "Activate column statistics", "v", "st_ml.hlp", AWM_EXP, ED4_activate_col_stat,          0, 0); 
    1562     awmm->insert_menu_topic("disable_col_stat", "Disable column statistics",  "i", "st_ml.hlp", AWM_EXP, disable_col_stat,               0, 0); 
     1596    awmm->insert_menu_topic("enable_col_stat",  "Activate column statistics", "v", "st_ml.hlp", AWM_EXP, activate_col_stat,                0, 0); 
     1597    awmm->insert_menu_topic("disable_col_stat", "Disable column statistics",  "i", "st_ml.hlp", AWM_EXP, disable_col_stat,                 0, 0); 
    15631598    awmm->insert_menu_topic("detail_col_stat",  "Toggle detailed Col.-Stat.", "c", "st_ml.hlp", AWM_EXP, ED4_toggle_detailed_column_stats, 0, 0); 
    1564     awmm->insert_menu_topic("dcs_threshold",    "Set threshold for D.c.s.",   "f", "st_ml.hlp", AWM_EXP, ED4_set_col_stat_threshold,     1, 0); 
     1599    awmm->insert_menu_topic("dcs_threshold",    "Set threshold for D.c.s.",   "f", "st_ml.hlp", AWM_EXP, ED4_set_col_stat_threshold,       0, 0); 
    15651600    SEP________________________SEP; 
    15661601    awmm->insert_menu_topic("visualize_SAI", "Visualize SAIs", "z", "visualizeSAI.hlp", AWM_ALL, AW_POPUP, (AW_CL)ED4_createVisualizeSAI_window, 0); 
  • branches/e4fix/EDIT4/ED4_search.cxx

    r8277 r8340  
    773773    } 
    774774 
    775     if (action & REFRESH_ALWAYS) { 
    776         bool old_update                        = ED4_update_global_cursor_awars_allowed; 
    777         ED4_update_global_cursor_awars_allowed = false; 
    778         ED4_ROOT->refresh_all_windows(1); 
    779         ED4_update_global_cursor_awars_allowed = old_update; 
    780     } 
    781  
     775    if (action & REFRESH_ALWAYS) ED4_ROOT->request_refresh_for_sequence_terminals(); 
    782776    root->awar(ED4_AWAR_SEARCH_RESULT_CHANGED)->touch(); // trigger refresh in SECEDIT 
    783777} 
  • branches/e4fix/EDIT4/ED4_terminal.cxx

    r8338 r8340  
    308308    } 
    309309 
    310     ED4_ROOT->refresh_all_windows(0); 
    311  
    312310    return ED4_R_OK; 
    313311} 
     
    399397} 
    400398 
     399void ED4_multi_species_manager::toggle_selected_species() { 
     400    if (all_are_selected()) deselect_all_species(); 
     401    else select_all_species(); 
     402 
     403    ED4_correctBlocktypeAfterSelection(); 
     404} 
     405 
    401406#if defined(DEBUG) && 1 
    402407static inline void dumpEvent(const char *where, AW_event *event) { 
     
    423428                        switch (ED4_ROOT->species_mode) { 
    424429                            case ED4_SM_KILL: { 
    425                                 if (tflag.selected) { 
    426                                     ED4_ROOT->remove_from_selected(this); 
    427                                 } 
     430                                if (tflag.selected) ED4_ROOT->remove_from_selected(this); 
    428431                                kill_object(); 
    429                                 ED4_ROOT->refresh_all_windows(0); 
    430432                                return ED4_R_BREAK; 
    431433                            } 
     
    474476                            to_bracket_terminal()->fold(); 
    475477                        } 
    476                         ED4_ROOT->refresh_all_windows(1); 
    477478                    } 
    478479                    else { 
     
    490491                        if (group) { 
    491492                            ED4_multi_species_manager *multi_man = group->to_group_manager()->get_defined_level(ED4_L_MULTI_SPECIES)->to_multi_species_manager(); 
    492                             multi_man->deselect_all_species(); 
    493                             ED4_correctBlocktypeAfterSelection(); 
    494                             ED4_ROOT->refresh_all_windows(0); 
     493                            multi_man->toggle_selected_species(); 
    495494                        } 
    496495                    } 
     
    500499                        if (parent->flag.is_consensus) { // click on consensus-name 
    501500                            ED4_multi_species_manager *multi_man = parent->get_parent(ED4_L_MULTI_SPECIES)->to_multi_species_manager(); 
    502                             int species = multi_man->get_no_of_species(); 
    503                             int selected = multi_man->get_no_of_selected_species(); 
    504  
    505                             if (selected==species) { // all species selected => deselect all 
    506                                 multi_man->deselect_all_species(); 
    507                             } 
    508                             else { // otherwise => select all 
    509                                 multi_man->select_all_species(); 
    510                             } 
    511  
    512                             ED4_correctBlocktypeAfterSelection(); 
    513                             ED4_ROOT->refresh_all_windows(0); 
    514                             return (ED4_R_BREAK); 
     501                            multi_man->toggle_selected_species(); 
     502                            // return (ED4_R_BREAK); 
    515503                        } 
    516504                        else if (species_man->flag.is_SAI) { 
     
    519507                        else { // click on species name 
    520508                            if (!tflag.selected) { // select if not selected 
    521                                 if (ED4_ROOT->add_to_selected(this) == ED4_R_OK) { 
    522                                     ED4_correctBlocktypeAfterSelection(); 
    523                                     ED4_ROOT->refresh_all_windows(0); 
    524                                 } 
     509                                if (ED4_ROOT->add_to_selected(this) == ED4_R_OK) ED4_correctBlocktypeAfterSelection(); 
    525510                            } 
    526511                            else { // deselect if already selected 
    527512                                ED4_ROOT->remove_from_selected(this); 
    528513                                ED4_correctBlocktypeAfterSelection(); 
    529                                 ED4_ROOT->refresh_all_windows(0); 
    530                                 return (ED4_R_BREAK);   // in case we were called by event_to selected() 
     514                                // return (ED4_R_BREAK);   // in case we were called by event_to selected() @@@ why?  
    531515                            } 
    532516                        } 
     
    538522                        ED4_setColumnblockCorner(event, to_sequence_terminal()); // mark columnblock 
    539523                        right_button_started_on_sequence_term = 1; 
    540                         ED4_ROOT->refresh_all_windows(0); 
    541524                    } 
    542525                    break; 
     
    593576                        ED4_no_dangerous_modes(); 
    594577                        ED4_setColumnblockCorner(event, to_sequence_terminal()); // mark columnblock 
    595                         ED4_ROOT->refresh_all_windows(0); 
    596578                    } 
    597579                    break; 
     
    654636                        ED4_no_dangerous_modes(); 
    655637                        ED4_setColumnblockCorner(event, to_sequence_terminal()); // mark columnblock 
    656                         ED4_ROOT->refresh_all_windows(0); 
    657638                    } 
    658639                    break; 
  • branches/e4fix/EDIT4/ED4_visualizeSAI.cxx

    r7811 r8340  
    8282static void setVisualizeSAI_cb(AW_root *awr) { 
    8383    ED4_ROOT->visualizeSAI = awr->awar(AWAR_SAI_ENABLE)->read_int(); 
    84     ED4_ROOT->refresh_all_windows(1); // refresh editor 
     84    ED4_ROOT->request_refresh_for_sequence_terminals(); 
    8585} 
    8686 
    8787static void setVisualizeSAI_options_cb(AW_root *awr) { 
    8888    ED4_ROOT->visualizeSAI_allSpecies = awr->awar(AWAR_SAI_ALL_SPECIES)->read_int(); 
    89     ED4_ROOT->refresh_all_windows(1); // refresh editor 
     89    ED4_ROOT->request_refresh_for_sequence_terminals(); 
    9090} 
    9191 
     
    185185        inCallback = old_inCallback; 
    186186 
    187         if (!inCallback) { 
    188             ED4_ROOT->refresh_all_windows(1); // refresh editor 
    189         } 
     187        if (!inCallback) ED4_ROOT->request_refresh_for_sequence_terminals(); 
    190188 
    191189        in_colorDefChanged_callback = false; 
     
    261259    free(clrTabName); 
    262260 
    263     if (!inCallback && clrDefinitionsChanged) { 
    264         ED4_ROOT->refresh_all_windows(1); // refresh editor 
    265     } 
     261    if (!inCallback && clrDefinitionsChanged) ED4_ROOT->request_refresh_for_sequence_terminals(); 
    266262} 
    267263 
     
    271267    { 
    272268        clrDefinitionsChanged = 1; 
    273         ED4_ROOT->refresh_all_windows(1); // refresh editor when current SAI is changed 
     269        ED4_ROOT->request_refresh_for_sequence_terminals(); 
    274270    } 
    275271} 
     
    313309 
    314310    if (!inCallback && clrDefinitionsChanged) { 
    315         ED4_ROOT->refresh_all_windows(1); // refresh editor 
    316311        // SAI changed notify Global SAI Awar AWAR_SAI_GLOBAL 
    317312        awr->awar(AWAR_SAI_GLOBAL)->write_string(saiName); 
     313        ED4_ROOT->request_refresh_for_sequence_terminals(); 
    318314    } 
    319315    free(saiName); 
  • branches/e4fix/EDIT4/ed4_class.hxx

    r8338 r8340  
    14621462    void ED4_ROOT() const { e4_assert(0); } // avoid ED4_root-members use global ED4_ROOT 
    14631463 
    1464     ED4_returncode refresh_window_simple(int redraw); 
     1464    ED4_returncode refresh_window_simple(bool redraw); 
     1465    void handle_update_requests(bool& redraw); 
    14651466 
    14661467    ED4_window *most_recently_used_window; 
     
    14981499    ed_key                  *edk; 
    14991500    ED4_Edit_String         *edit_string; 
    1500     int                      column_stat_activated; 
    1501     int                      column_stat_initialized; 
    1502     int                      visualizeSAI; 
    1503     int                      visualizeSAI_allSpecies; 
     1501    int                      column_stat_activated; // @@@ make bool 
     1502    int                      column_stat_initialized; // @@@ make bool 
     1503    int                      visualizeSAI; // @@@ make bool 
     1504    int                      visualizeSAI_allSpecies; // @@@ make bool 
    15041505    int                      temp_gc; 
    15051506    AW_font_group            font_group; 
     
    15221523    ED4_returncode resize_all(); 
    15231524 
    1524     ED4_returncode refresh_window(int redraw); 
    1525     ED4_returncode refresh_all_windows(int redraw); 
    1526  
    1527     inline void announce_deletion(ED4_base *object); // before deleting an object, use this to announce  
     1525    ED4_returncode refresh_window(bool redraw); 
     1526    ED4_returncode refresh_all_windows(bool redraw); 
     1527 
     1528    void request_refresh_for_all_terminals(); 
     1529    void request_refresh_for_specific_terminals(ED4_level lev); 
     1530    void request_refresh_for_consensus_terminals(); 
     1531    void request_refresh_for_sequence_terminals(); 
     1532     
     1533    inline void announce_deletion(ED4_base *object); // before deleting an object, use this to announce 
    15281534 
    15291535    // functions concerned with list of selected objects 
     
    16481654 
    16491655    // functions concerned with selection 
    1650     int         get_no_of_selected_species(); 
    1651     int         get_no_of_species(); 
     1656    int get_no_of_selected_species(); 
     1657    int get_no_of_species(); 
    16521658 
    16531659    void update_group_id(); 
    16541660 
    1655     void        invalidate_species_counters(); 
    1656     int         has_valid_counters() const      { return species!=-1 && selected_species!=-1; } 
    1657  
    1658     void        select_all_species(); 
    1659     void        deselect_all_species(); 
    1660     void        invert_selection_of_all_species(); 
    1661     void        select_marked_species(int select); 
    1662     void        mark_selected_species(int mark); 
     1661    void invalidate_species_counters(); 
     1662    int  has_valid_counters() const { return species != -1 && selected_species!=-1; } 
     1663    bool all_are_selected() const { e4_assert(has_valid_counters()); return species == selected_species; } 
     1664 
     1665    void select_all_species(); 
     1666    void deselect_all_species(); 
     1667    void invert_selection_of_all_species(); 
     1668    void select_marked_species(int select); 
     1669    void mark_selected_species(int mark); 
     1670 
     1671    void toggle_selected_species(); 
    16631672}; 
    16641673