- Timestamp:
- 25/01/12 19:14:54 (4 months ago)
- Location:
- branches/e4fix/EDIT4
- Files:
-
- 11 modified
-
ED4_ProteinViewer.cxx (modified) (1 diff)
-
ED4_base.cxx (modified) (2 diffs)
-
ED4_cursor.cxx (modified) (3 diffs)
-
ED4_manager.cxx (modified) (4 diffs)
-
ED4_mini_classes.cxx (modified) (2 diffs)
-
ED4_no_class.cxx (modified) (8 diffs)
-
ED4_root.cxx (modified) (4 diffs)
-
ED4_search.cxx (modified) (1 diff)
-
ED4_terminal.cxx (modified) (10 diffs)
-
ED4_visualizeSAI.cxx (modified) (5 diffs)
-
ed4_class.hxx (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/e4fix/EDIT4/ED4_ProteinViewer.cxx
r8339 r8340 402 402 } 403 403 // Refresh all windows 404 ED4_ROOT->refresh_all_windows(0);404 // ED4_ROOT->refresh_all_windows(0); 405 405 } 406 406 -
branches/e4fix/EDIT4/ED4_base.cxx
r8338 r8340 30 30 void ED4_manager::changed_by_database() { 31 31 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(); 42 33 } 43 34 … … 148 139 149 140 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() 154 143 } 155 144 else { -
branches/e4fix/EDIT4/ED4_cursor.cxx
r8338 r8340 670 670 if (name && name[0]) { 671 671 ED4_get_and_jump_to_species(name); 672 ED4_ROOT->refresh_all_windows(0);673 672 } 674 673 else { … … 679 678 void ED4_get_and_jump_to_current_from_menu(AW_window *aw, AW_CL cl, AW_CL) { 680 679 ED4_get_and_jump_to_current(aw, cl); 681 ED4_ROOT->refresh_all_windows(0);682 680 } 683 681 … … 775 773 776 774 #undef BUFFERSIZE 777 778 ED4_ROOT->refresh_all_windows(0);779 775 } 780 776 -
branches/e4fix/EDIT4/ED4_manager.cxx
r8338 r8340 13 13 #include "ed4_protein_2nd_structure.hxx" 14 14 15 // #define TEST_REFRESH_FLAG 16 15 #if defined(DEBUG) 16 #define TEST_REFRESH_FLAG 17 #endif 17 18 18 19 // ----------------------------------------------------------------- … … 259 260 GB_ERROR err = ED4_pfold_set_SAI(&ED4_ROOT->protstruct, GLOBAL_gb_main, ED4_ROOT->alignment_name, &ED4_ROOT->protstruct_len); 260 261 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(); 263 264 } 264 265 } … … 744 745 if (child->update_info.refresh==1 && update_info.refresh==0) { 745 746 printf("Forgotten refresh-flag in '%s' (son of '%s')\n", child->id, id); 747 fflush(stdout); 746 748 return 0; 747 749 } … … 931 933 e4_assert(refresh_flag_ok()); 932 934 #endif 933 #if defined(DEBUG) && 0934 printf("Show main_manager\n");935 #endif936 935 937 936 AW_device *device = current_device(); -
branches/e4fix/EDIT4/ED4_mini_classes.cxx
r8236 r8340 437 437 delete BK; BK = 0; // invalidate 438 438 439 ED4_ROOT->re fresh_all_windows(1);439 ED4_ROOT->request_refresh_for_consensus_terminals(); 440 440 } 441 441 … … 463 463 int show = root->awar(ED4_AWAR_CONSENSUS_SHOW)->read_int(); 464 464 ED4_ROOT->root_group_man->route_down_hierarchy(toggle_consensus_display, show).expect_no_error(); 465 ED4_ROOT->refresh_all_windows(1);466 465 } 467 466 -
branches/e4fix/EDIT4/ED4_no_class.cxx
r8338 r8340 328 328 error = edit_string->edit(work_info); 329 329 330 ED4_ROOT->main_manager->Show(1, 0); // @@@ temporary fix for worst-refresh problems330 ED4_ROOT->main_manager->Show(1, 0); // temporary fix for worst-refresh problems (@@@ fixme) 331 331 // ED4_ROOT->main_manager->Show(); // original version 332 332 … … 349 349 seq_term->results().searchAgain(); 350 350 } 351 ED4_ROOT->refresh_all_windows(0);352 351 } 353 352 … … 842 841 843 842 void 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); 845 845 GB_tell_server_dont_wait(GLOBAL_gb_main); 846 846 GB_commit_transaction(GLOBAL_gb_main); 847 847 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 851 void ED4_timer(AW_root *, AW_CL cd1, AW_CL cd2) { 853 852 ED4_timer_refresh(); 854 853 ED4_ROOT->aw_root->add_timed_callback(200, ED4_timer, cd1, cd2); … … 929 928 } 930 929 931 void ED4_set_col_stat_threshold(AW_window * /* aww */, AW_CL cl_do_refresh, AW_CL) {930 void ED4_set_col_stat_threshold(AW_window *, AW_CL, AW_CL) { 932 931 double default_threshold = 90.0; 933 932 if (ED4_columnStat_terminal::threshold_is_set()) { … … 946 945 else { 947 946 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); 951 948 } 952 949 free(input); … … 1027 1024 new_seq_man->resize_requested_by_child(); 1028 1025 } 1029 ED4_ROOT->refresh_all_windows(0);1030 1026 } 1031 1027 … … 1340 1336 1341 1337 ED4_ROOT->create_hierarchy(config_data_middle, config_data_top); 1342 ED4_ROOT->refresh_all_windows(1);1343 1338 1344 1339 free(config_data_middle); … … 2201 2196 } 2202 2197 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); 2212 2200 } 2213 2201 -
branches/e4fix/EDIT4/ED4_root.cxx
r8338 r8340 53 53 } 54 54 55 ED4_returncode ED4_root::refresh_window_simple(int redraw) 56 { 55 static 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 67 void 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 71 void 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 76 static 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) 88 void ED4_root::request_refresh_for_consensus_terminals() { 89 main_manager->route_down_hierarchy(request_sequence_refresh, true).expect_no_error(); 90 } 91 void ED4_root::request_refresh_for_sequence_terminals() { 92 main_manager->route_down_hierarchy(request_sequence_refresh, false).expect_no_error(); 93 } 94 95 ED4_returncode ED4_root::refresh_window_simple(bool redraw) { 57 96 e4_assert(!main_manager->update_info.delete_requested); 97 e4_assert(!main_manager->update_info.update_requested); 58 98 e4_assert(!main_manager->update_info.resize); 59 99 … … 67 107 } 68 108 69 ED4_returncode ED4_root::refresh_window(int redraw) // this function should only be used for window specific updates (i.e. cursor placement) 70 { 109 void ED4_root::handle_update_requests(bool& redraw) { 71 110 if (main_manager->update_info.delete_requested) { 72 111 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; 74 118 } 75 119 76 120 while (main_manager->update_info.resize) { 77 121 main_manager->resize_requested_by_parent(); 78 redraw = 1; 79 } 80 122 redraw = true; 123 } 124 } 125 126 ED4_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) 81 129 return refresh_window_simple(redraw); 82 130 } 83 131 84 ED4_returncode ED4_root::refresh_all_windows(int redraw) { 132 ED4_returncode ED4_root::refresh_all_windows(bool redraw) { 133 GB_transaction dummy(GLOBAL_gb_main); 85 134 last_window_reached = 0; 86 135 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 102 138 ED4_window *window = first_window; 103 GB_transaction dummy(GLOBAL_gb_main);104 139 while (window) { 105 140 if (!window->next) last_window_reached = 1; … … 1033 1068 #endif 1034 1069 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) { 1070 inline 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 1075 static void col_stat_activated(AW_window *) { 1076 ED4_ROOT->column_stat_initialized = 1; 1077 set_col_stat_activated_and_refresh(true); 1078 } 1079 1080 static void activate_col_stat(AW_window *aww, AW_CL, AW_CL) { 1043 1081 if (!ED4_ROOT->column_stat_initialized) { 1044 1082 AW_window *aww_st = STAT_create_main_window(ED4_ROOT->aw_root, ED4_ROOT->st_ml, (AW_CB0)col_stat_activated, (AW_window *)aww); 1045 1083 aww_st->show(); 1046 return;1047 1084 } 1048 1085 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); 1051 1087 } 1052 1088 } 1053 1089 static void disable_col_stat(AW_window *, AW_CL, AW_CL) { 1054 1090 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); 1057 1092 } 1058 1093 } … … 1559 1594 awmm->insert_menu_topic("show_diff", "Show only differences to selected", "d", "set_reference.hlp", AWM_ALL, ED4_set_reference_species, 0, 0); 1560 1595 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); 1563 1598 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); 1565 1600 SEP________________________SEP; 1566 1601 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 773 773 } 774 774 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(); 782 776 root->awar(ED4_AWAR_SEARCH_RESULT_CHANGED)->touch(); // trigger refresh in SECEDIT 783 777 } -
branches/e4fix/EDIT4/ED4_terminal.cxx
r8338 r8340 308 308 } 309 309 310 ED4_ROOT->refresh_all_windows(0);311 312 310 return ED4_R_OK; 313 311 } … … 399 397 } 400 398 399 void 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 401 406 #if defined(DEBUG) && 1 402 407 static inline void dumpEvent(const char *where, AW_event *event) { … … 423 428 switch (ED4_ROOT->species_mode) { 424 429 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); 428 431 kill_object(); 429 ED4_ROOT->refresh_all_windows(0);430 432 return ED4_R_BREAK; 431 433 } … … 474 476 to_bracket_terminal()->fold(); 475 477 } 476 ED4_ROOT->refresh_all_windows(1);477 478 } 478 479 else { … … 490 491 if (group) { 491 492 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(); 495 494 } 496 495 } … … 500 499 if (parent->flag.is_consensus) { // click on consensus-name 501 500 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); 515 503 } 516 504 else if (species_man->flag.is_SAI) { … … 519 507 else { // click on species name 520 508 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(); 525 510 } 526 511 else { // deselect if already selected 527 512 ED4_ROOT->remove_from_selected(this); 528 513 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? 531 515 } 532 516 } … … 538 522 ED4_setColumnblockCorner(event, to_sequence_terminal()); // mark columnblock 539 523 right_button_started_on_sequence_term = 1; 540 ED4_ROOT->refresh_all_windows(0);541 524 } 542 525 break; … … 593 576 ED4_no_dangerous_modes(); 594 577 ED4_setColumnblockCorner(event, to_sequence_terminal()); // mark columnblock 595 ED4_ROOT->refresh_all_windows(0);596 578 } 597 579 break; … … 654 636 ED4_no_dangerous_modes(); 655 637 ED4_setColumnblockCorner(event, to_sequence_terminal()); // mark columnblock 656 ED4_ROOT->refresh_all_windows(0);657 638 } 658 639 break; -
branches/e4fix/EDIT4/ED4_visualizeSAI.cxx
r7811 r8340 82 82 static void setVisualizeSAI_cb(AW_root *awr) { 83 83 ED4_ROOT->visualizeSAI = awr->awar(AWAR_SAI_ENABLE)->read_int(); 84 ED4_ROOT->re fresh_all_windows(1); // refresh editor84 ED4_ROOT->request_refresh_for_sequence_terminals(); 85 85 } 86 86 87 87 static void setVisualizeSAI_options_cb(AW_root *awr) { 88 88 ED4_ROOT->visualizeSAI_allSpecies = awr->awar(AWAR_SAI_ALL_SPECIES)->read_int(); 89 ED4_ROOT->re fresh_all_windows(1); // refresh editor89 ED4_ROOT->request_refresh_for_sequence_terminals(); 90 90 } 91 91 … … 185 185 inCallback = old_inCallback; 186 186 187 if (!inCallback) { 188 ED4_ROOT->refresh_all_windows(1); // refresh editor 189 } 187 if (!inCallback) ED4_ROOT->request_refresh_for_sequence_terminals(); 190 188 191 189 in_colorDefChanged_callback = false; … … 261 259 free(clrTabName); 262 260 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(); 266 262 } 267 263 … … 271 267 { 272 268 clrDefinitionsChanged = 1; 273 ED4_ROOT->re fresh_all_windows(1); // refresh editor when current SAI is changed269 ED4_ROOT->request_refresh_for_sequence_terminals(); 274 270 } 275 271 } … … 313 309 314 310 if (!inCallback && clrDefinitionsChanged) { 315 ED4_ROOT->refresh_all_windows(1); // refresh editor316 311 // SAI changed notify Global SAI Awar AWAR_SAI_GLOBAL 317 312 awr->awar(AWAR_SAI_GLOBAL)->write_string(saiName); 313 ED4_ROOT->request_refresh_for_sequence_terminals(); 318 314 } 319 315 free(saiName); -
branches/e4fix/EDIT4/ed4_class.hxx
r8338 r8340 1462 1462 void ED4_ROOT() const { e4_assert(0); } // avoid ED4_root-members use global ED4_ROOT 1463 1463 1464 ED4_returncode refresh_window_simple(int redraw); 1464 ED4_returncode refresh_window_simple(bool redraw); 1465 void handle_update_requests(bool& redraw); 1465 1466 1466 1467 ED4_window *most_recently_used_window; … … 1498 1499 ed_key *edk; 1499 1500 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 1504 1505 int temp_gc; 1505 1506 AW_font_group font_group; … … 1522 1523 ED4_returncode resize_all(); 1523 1524 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 1528 1534 1529 1535 // functions concerned with list of selected objects … … 1648 1654 1649 1655 // 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(); 1652 1658 1653 1659 void update_group_id(); 1654 1660 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(); 1663 1672 }; 1664 1673
