Changeset 8338
- Timestamp:
- 24/01/12 14:46:56 (4 months ago)
- Location:
- branches/e4fix/EDIT4
- Files:
-
- 9 modified
-
ED4_base.cxx (modified) (3 diffs)
-
ED4_cursor.cxx (modified) (1 diff)
-
ED4_manager.cxx (modified) (8 diffs)
-
ED4_nds.cxx (modified) (1 diff)
-
ED4_no_class.cxx (modified) (6 diffs)
-
ED4_root.cxx (modified) (8 diffs)
-
ED4_terminal.cxx (modified) (2 diffs)
-
ed4_class.hxx (modified) (12 diffs)
-
ed4_defs.hxx (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/e4fix/EDIT4/ED4_base.cxx
r8337 r8338 294 294 multi_species_manager->children->append_member(species_manager); 295 295 296 297 296 species_name_terminal = new ED4_species_name_terminal(group_name, 0, 0, MAXSPECIESWIDTH - BRACKETWIDTH, TERMINALHEIGHT, species_manager); 298 297 species_name_terminal->set_property((ED4_properties) (ED4_P_SELECTABLE | ED4_P_DRAGABLE | ED4_P_IS_HANDLE)); // only some terminals … … 319 318 multi_species_manager->children->append_member(group_spacer_terminal2); 320 319 320 multi_species_manager->update_requested_by_child(); 321 321 322 ED4_counter ++; 322 323 … … 634 635 635 636 636 void ED4_device_manager::generate_id_for_groups() { 637 for (int i=0; i<children->members(); i++) { 638 ED4_base *member = children->member(i); 639 if (member->is_area_manager()) { 640 member->to_area_manager()->get_defined_level(ED4_L_MULTI_SPECIES)->to_multi_species_manager()->generate_id_for_groups(); 641 } 642 } 643 } 644 645 void ED4_multi_species_manager::generate_id_for_groups() { 646 count_all_children_and_set_group_id(); 647 } 648 649 650 int ED4_multi_species_manager::count_all_children_and_set_group_id() // counts all species of a multi_species_manager 651 { 652 int counter = 0; 653 int i; 654 char *name; 655 656 for (i=0; i<children->members(); i++) { 657 ED4_base *member = children->member(i); 658 if (member->is_species_manager() && !member->flag.is_consensus) { 659 counter ++; 660 } 661 else if (member->is_group_manager()) { 662 counter += member->to_group_manager()->get_defined_level(ED4_L_MULTI_SPECIES)->to_multi_species_manager()->count_all_children_and_set_group_id(); 663 } 664 } 665 666 637 void ED4_multi_species_manager::update_group_id() { 667 638 ED4_base *consensus_name_terminal = get_consensus_terminal(); 668 639 if (consensus_name_terminal) { // top managers dont show consensus 669 name = (char*)GB_calloc(strlen(consensus_name_terminal->id)+10, sizeof(*name)); 670 671 for (i=0; consensus_name_terminal->id[i] != '(' && consensus_name_terminal->id[i] != '\0'; i++) { 672 name[i] = consensus_name_terminal->id[i]; 673 } 674 if (consensus_name_terminal->id[i] != '\0') { // skip space 640 e4_assert(has_valid_counters()); 641 642 const char *cntid = consensus_name_terminal->id; 643 char *name = (char*)GB_calloc(strlen(cntid)+10, sizeof(*name)); 644 645 int i; 646 for (i=0; cntid[i] != '(' && cntid[i] != '\0'; i++) { 647 name[i] = cntid[i]; 648 } 649 if (cntid[i] != '\0') { // skip space 675 650 i--; 676 651 } 677 652 name[i] = '\0'; 678 sprintf(name, "%s (%d)", name, counter);653 sprintf(name, "%s (%d)", name, species); 679 654 680 655 freeset(consensus_name_terminal->id, name); 681 } 682 return counter; 656 657 consensus_name_terminal->set_refresh(); 658 consensus_name_terminal->parent->refresh_requested_by_child(); 659 } 683 660 } 684 661 -
branches/e4fix/EDIT4/ED4_cursor.cxx
r8337 r8338 652 652 delete string; 653 653 654 insert_into_manager-> generate_id_for_groups();654 insert_into_manager->invalidate_species_counters(); 655 655 } 656 656 if (name_term) { -
branches/e4fix/EDIT4/ED4_manager.cxx
r8306 r8338 1208 1208 e4_assert(update_info.refresh); 1209 1209 1210 int i; 1211 1212 for (i=0; i<children->members(); i++) { 1210 for (int i=0; i<children->members(); i++) { 1213 1211 ED4_base *child = children->member(i); 1214 1212 … … 1240 1238 } 1241 1239 1240 void ED4_manager::update_requested_by_child() { 1241 if (!update_info.update_requested) { 1242 if (parent) parent->update_requested_by_child(); 1243 update_info.update_requested = 1; 1244 } 1245 } 1242 1246 void ED4_manager::delete_requested_by_child() { 1243 1247 if (!update_info.delete_requested) { … … 1246 1250 } 1247 1251 } 1248 1249 1252 void ED4_terminal::delete_requested_children() { 1250 1253 e4_assert(update_info.delete_requested); … … 1255 1258 unlink_from_parent(); 1256 1259 delete this; 1260 } 1261 1262 void ED4_manager::update_requested_children() { 1263 e4_assert(update_info.update_requested); 1264 1265 for (int i=0; i<children->members(); i++) { 1266 ED4_base *child = children->member(i); 1267 if (child->update_info.update_requested) { 1268 child->update_requested_children(); 1269 } 1270 } 1271 1272 update_info.update_requested = 0; 1273 } 1274 1275 void ED4_multi_species_manager::update_requested_children() { 1276 e4_assert(update_info.update_requested); 1277 ED4_manager::update_requested_children(); 1278 update_species_counters(); 1279 update_group_id(); 1280 1281 ED4_base *group_base = get_parent(ED4_L_GROUP); 1282 if (group_base) { 1283 e4_assert(group_base->is_group_manager()); 1284 e4_assert(!group_base->is_root_group_manager()); 1285 1286 ED4_group_manager *group_man = parent->to_group_manager(); 1287 ED4_base *bracket_base = group_man->get_defined_level(ED4_L_BRACKET); 1288 1289 if (bracket_base && bracket_base->is_bracket_terminal()) { 1290 ED4_bracket_terminal *bracket_term = bracket_base->to_bracket_terminal(); 1291 bracket_term->set_refresh(); 1292 bracket_term->parent->refresh_requested_by_child(); 1293 } 1294 } 1257 1295 } 1258 1296 … … 1277 1315 } 1278 1316 1317 void ED4_multi_species_manager::delete_requested_children() { 1318 e4_assert(update_info.delete_requested); 1319 invalidate_species_counters(); 1320 ED4_manager::delete_requested_children(); 1321 } 1322 1279 1323 void ED4_terminal::Delete() { 1280 1324 if (!tflag.deleted) { … … 1412 1456 selected_species = -1; 1413 1457 1414 set_refresh();1415 parent->refresh_requested_by_child();1416 1417 e4_assert(!parent->is_root_group_manager());1418 if (parent->is_group_manager()) {1419 ED4_group_manager *group_man = parent->to_group_manager();1420 ED4_base *base = group_man->get_defined_level(ED4_L_BRACKET);1421 1422 if (base && base->is_bracket_terminal()) {1423 ED4_bracket_terminal *bracket_term = base->to_bracket_terminal();1424 1425 bracket_term->set_refresh();1426 bracket_term->parent->refresh_requested_by_child();1427 }1428 }1429 1430 1458 ED4_base *pms = get_parent(ED4_L_MULTI_SPECIES); 1431 if (pms) {1432 pms->to_multi_species_manager()->invalidate_species_counters();1433 }1459 if (pms) pms->to_multi_species_manager()->invalidate_species_counters(); 1460 1461 update_requested_by_child(); 1434 1462 } 1435 1463 } … … 1450 1478 int species_diff = no_of_species-species; 1451 1479 int selected_diff = no_of_selected-selected_species; 1452 int quickSet = 1; 1453 1480 1481 int quickSet = 1; 1454 1482 if (species==-1 || selected_species==-1) { 1455 1483 quickSet = 0; 1456 1484 } 1457 1485 1458 species = no_of_species;1486 species = no_of_species; 1459 1487 selected_species = no_of_selected; 1460 1488 … … 1470 1498 ED4_multi_species_manager *parent_multi_species_man = ms->to_multi_species_manager(); 1471 1499 1472 if (!quickSet) { 1473 parent_multi_species_man->invalidate_species_counters(); 1474 } 1500 if (!quickSet) parent_multi_species_man->invalidate_species_counters(); 1475 1501 1476 1502 if (parent_multi_species_man->has_valid_counters()) { -
branches/e4fix/EDIT4/ED4_nds.cxx
r8275 r8338 55 55 if (int(refresh)) { 56 56 ED4_calc_terminal_extentions(); 57 { 58 ARB_ERROR error = ED4_ROOT->main_manager->route_down_hierarchy(update_terminal_extension); 59 aw_message_if(error); 60 } 57 ED4_ROOT->main_manager->route_down_hierarchy(update_terminal_extension).expect_no_error(); 61 58 ED4_gc_is_modified_cb(current_aww(), 0, 0); 62 59 } -
branches/e4fix/EDIT4/ED4_no_class.cxx
r8337 r8338 841 841 } 842 842 843 void ED4_timer_refresh() 844 { 843 void ED4_timer_refresh() { 845 844 GB_begin_transaction(GLOBAL_gb_main); // for callbacks from database 846 845 GB_tell_server_dont_wait(GLOBAL_gb_main); 847 846 GB_commit_transaction(GLOBAL_gb_main); 847 848 // @@@ need to ED4_ROOT->refresh_all_windows(0) here 848 849 } 849 850 … … 1060 1061 #define SIGNIFICANT_FIELD_CHARS 30 // length used to compare field contents (in createGroupFromSelected) 1061 1062 1062 static void createGroupFromSelected(GB_CSTR group_name, GB_CSTR field_name, GB_CSTR field_content) 1063 static void createGroupFromSelected(GB_CSTR group_name, GB_CSTR field_name, GB_CSTR field_content) { 1063 1064 // creates a new group named group_name 1064 1065 // if field_name==0 -> all selected species & subgroups are moved to this new group 1065 1066 // if field_name!=0 -> all selected species containing field_content in field field_name are moved to this new group 1066 { 1067 ED4_group_manager *group_manager = NULL; 1068 ED4_ROOT->main_manager->create_group(&group_manager, group_name); 1067 1068 ED4_group_manager *new_group_manager = NULL; 1069 ED4_ROOT->main_manager->create_group(&new_group_manager, group_name); 1070 1069 1071 ED4_manager *top_area = ED4_ROOT->main_manager->search_spec_child_rek(ED4_L_AREA)->to_manager(); 1070 ED4_multi_species_manager *multi_species_manager = top_area->search_spec_child_rek(ED4_L_MULTI_SPECIES)->to_multi_species_manager(); 1071 1072 group_manager->extension.position[Y_POS] = 2; 1073 ED4_base::touch_world_cache(); 1074 multi_species_manager->children->append_member(group_manager); 1075 group_manager->parent = (ED4_manager *) multi_species_manager; 1076 1077 multi_species_manager = group_manager->get_defined_level(ED4_L_MULTI_SPECIES)->to_multi_species_manager(); 1072 1073 { 1074 ED4_multi_species_manager *multi_species_manager = top_area->search_spec_child_rek(ED4_L_MULTI_SPECIES)->to_multi_species_manager(); 1075 1076 new_group_manager->extension.position[Y_POS] = 2; 1077 ED4_base::touch_world_cache(); 1078 multi_species_manager->children->append_member(new_group_manager); 1079 new_group_manager->parent = (ED4_manager *) multi_species_manager; 1080 } 1081 1082 ED4_multi_species_manager *new_multi_species_manager = new_group_manager->get_defined_level(ED4_L_MULTI_SPECIES)->to_multi_species_manager(); 1078 1083 1079 1084 ED4_list_elem *list_elem = ED4_ROOT->selected_objects.first(); … … 1111 1116 1112 1117 if (move_object) { 1113 object->parent->children->remove_member(object);1114 1115 1118 ED4_base *base = object->get_parent(ED4_L_MULTI_SPECIES); 1116 1119 if (base && base->is_multi_species_manager()) { … … 1118 1121 old_multi->invalidate_species_counters(); 1119 1122 } 1120 multi_species_manager->children->append_member(object); 1121 1122 object->parent = (ED4_manager *)multi_species_manager; 1123 1124 object->parent->children->remove_member(object); 1125 new_multi_species_manager->children->append_member(object); 1126 1127 object->parent = (ED4_manager *)new_multi_species_manager; 1123 1128 object->set_width(); 1124 1129 } … … 1127 1132 } 1128 1133 1129 group_manager->create_consensus(group_manager, NULL);1130 group_manager->get_defined_level(ED4_L_MULTI_SPECIES)->to_multi_species_manager()->count_all_children_and_set_group_id();1131 1134 new_group_manager->create_consensus(new_group_manager, NULL); 1135 new_multi_species_manager->invalidate_species_counters(); 1136 1132 1137 { 1133 ED4_bracket_terminal *bracket = group_manager->get_defined_level(ED4_L_BRACKET)->to_bracket_terminal();1138 ED4_bracket_terminal *bracket = new_group_manager->get_defined_level(ED4_L_BRACKET)->to_bracket_terminal(); 1134 1139 if (bracket) bracket->fold(); 1135 1140 } 1136 1141 1137 multi_species_manager->resize_requested_by_child(); 1138 1139 current_ed4w()->update_scrolled_rectangle(); 1140 current_device()->reset(); 1141 ED4_ROOT->refresh_all_windows(1); 1142 new_multi_species_manager->resize_requested_by_child(); 1142 1143 } 1143 1144 … … 1206 1207 int newlen = doneLen + field_content_len + 1; 1207 1208 char *newDone = (char*)malloc(newlen+1); 1208 GBS_global_string_to_buffer(newDone, newlen , "%s%s;", doneContents, field_content);1209 GBS_global_string_to_buffer(newDone, newlen+1, "%s%s;", doneContents, field_content); 1209 1210 freeset(doneContents, newDone); 1210 1211 doneLen = newlen; -
branches/e4fix/EDIT4/ED4_root.cxx
r8298 r8338 87 87 if (main_manager->update_info.delete_requested) { 88 88 main_manager->delete_requested_children(); 89 get_device_manager()->generate_id_for_groups(); // update group-counters 89 redraw = 1; 90 } 91 92 if (main_manager->update_info.update_requested) { 93 main_manager->update_requested_children(); 90 94 redraw = 1; 91 95 } … … 525 529 } 526 530 531 static ARB_ERROR force_group_update(ED4_base *base) { 532 if (base->is_multi_species_manager()) { 533 base->to_multi_species_manager()->update_requested_by_child(); 534 } 535 return NULL; 536 } 537 527 538 ED4_returncode ED4_root::create_hierarchy(char *area_string_middle, char *area_string_top) // creates internal hierarchy of editor 528 539 { … … 530 541 ED4_index y = 0, help = 0; 531 542 ED4_base *x_link, *y_link, *width_link, *height_link; 532 ED4_window *new_window;533 543 long total_no_of_species, total_no_of_groups, group_count, species_count; 534 544 … … 629 639 630 640 y += TOP_MID_SPACER_HEIGHT; // add top-mid_spacer_terminal height 631 632 top_multi_species_manager->generate_id_for_groups();633 641 } 634 642 … … 671 679 tree_terminal->extension.size[HEIGHT] = y - help; 672 680 673 mid_multi_species_manager->generate_id_for_groups(); 674 y += 10; // add top-mid_spacer_terminal height 681 y += 10; // add top-mid_spacer_terminal height 675 682 676 683 mid_bot_line_terminal = new ED4_line_terminal("Mid_Bot_Line_Terminal", 0, y, 0, 3, device_manager); // width will be set below … … 708 715 709 716 717 main_manager->route_down_hierarchy(force_group_update).expect_no_error(); 718 710 719 // build consensi 711 720 { … … 731 740 height_link = y_link; 732 741 733 new_window = first_window; 734 735 while (new_window) { 736 new_window->set_scrolled_rectangle(x_link, y_link, width_link, height_link); 737 new_window->aww->show(); 738 new_window->update_scrolled_rectangle(); 739 ED4_refresh_window(new_window->aww); 740 new_window = new_window->next; 741 } 742 743 aw_root->add_timed_callback(2000, ED4_timer, (AW_CL)0, (AW_CL)0); 742 ED4_window *win = first_window; 743 while (win) { 744 win->set_scrolled_rectangle(x_link, y_link, width_link, height_link); 745 win->aww->show(); 746 win->update_scrolled_rectangle(); 747 win = win->next; 748 } 749 750 aw_root->add_timed_callback(200, ED4_timer, (AW_CL)0, (AW_CL)0); 744 751 745 752 ED4_finish_and_show_notFoundMessage(); … … 1329 1336 } 1330 1337 1331 ED4_returncode ED4_root::generate_window(AW_device **device, ED4_window **new_window)1338 ED4_returncode ED4_root::generate_window(AW_device **device, ED4_window **new_window) 1332 1339 { 1333 1340 AW_window_menu_modes *awmm; -
branches/e4fix/EDIT4/ED4_terminal.cxx
r8337 r8338 632 632 633 633 if (member->is_area_manager()) { 634 member->to_area_manager()->get_defined_level(ED4_L_MULTI_SPECIES)->to_multi_species_manager()-> generate_id_for_groups();634 member->to_area_manager()->get_defined_level(ED4_L_MULTI_SPECIES)->to_multi_species_manager()->update_requested_by_child(); 635 635 } 636 636 } … … 673 673 return ED4_R_OK; 674 674 } 675 676 void ED4_terminal::update_requested_children() {} 675 677 676 678 bool ED4_terminal::calc_bounding_box() { -
branches/e4fix/EDIT4/ed4_class.hxx
r8337 r8338 1095 1095 1096 1096 // functions which refer to the object as a child, i.e. travelling down the hierarchy 1097 virtual ED4_returncode set_refresh (int clear=1)=0;1097 virtual ED4_returncode set_refresh(int clear=1)=0; 1098 1098 virtual ED4_returncode resize_requested_by_child()=0; 1099 virtual ED4_returncode resize_requested_by_parent()=0; 1099 virtual ED4_returncode resize_requested_by_parent()=0; // @@@ name is wrong! should be resize_requested_children! 1100 1100 1101 1101 virtual void delete_requested_children() = 0; 1102 1102 virtual void Delete() = 0; 1103 1104 inline void set_update(); 1105 virtual void update_requested_children() = 0; 1103 1106 1104 1107 virtual ED4_returncode calc_size_requested_by_parent()=0; … … 1106 1109 virtual ED4_returncode event_sent_by_parent(AW_event *event, AW_window *aww); 1107 1110 virtual ED4_returncode move_requested_by_child(ED4_move_info *moveinfo)=0; 1111 1108 1112 1109 1113 virtual ED4_returncode handle_move(ED4_move_info *moveinfo) = 0; … … 1204 1208 return const_cast<Class*>(const_cast<const ED4_base*>(this)->toName()); \ 1205 1209 } 1206 1210 1207 1211 #define E4B_DECL_CASTOP(name) E4B_DECL_CASTOP_helper(concat(ED4_,name), concat(to_,name), concat(is_,name)) 1208 1212 #define E4B_IMPL_CASTOP(name) E4B_IMPL_CASTOP_helper(concat(ED4_,name), concat(to_,name), concat(is_,name)) … … 1259 1263 virtual ED4_returncode resize_requested_by_parent(); 1260 1264 1265 virtual void update_requested_children(); 1266 1261 1267 virtual void delete_requested_children(); 1262 1268 virtual void Delete(); … … 1281 1287 virtual ED4_returncode refresh_requested_by_child(); 1282 1288 void delete_requested_by_child(); 1289 void update_requested_by_child(); 1283 1290 1284 1291 ED4_base *get_defined_level(ED4_level lev) const; … … 1327 1334 virtual ~ED4_manager(); 1328 1335 }; 1329 1330 1336 1331 1337 class ED4_terminal : public ED4_base { // derived from a Noncopyable … … 1362 1368 virtual ED4_returncode resize_requested_by_parent(); 1363 1369 1370 virtual void update_requested_children(); 1364 1371 virtual void delete_requested_children(); 1365 1372 virtual void Delete(); … … 1603 1610 ED4_device_manager (const char *id, AW_pos x, AW_pos y, AW_pos width, AW_pos height, ED4_manager *parent); 1604 1611 1605 void generate_id_for_groups();1606 1612 DECLARE_DUMP_FOR_LEAFCLASS(ED4_manager); 1607 1613 }; … … 1634 1640 DECLARE_DUMP_FOR_LEAFCLASS(ED4_manager); 1635 1641 1642 virtual void update_requested_children(); 1643 virtual void delete_requested_children(); 1644 1636 1645 int count_visible_children(); // is called by a multi_species_manager 1637 int count_all_children_and_set_group_id(); // counts all children of a parent1638 1646 ED4_terminal *get_consensus_terminal(); // returns the consensus-terminal or 0 1639 1647 ED4_species_manager *get_consensus_manager() const; // returns the consensus-manager or 0 … … 1643 1651 int get_no_of_species(); 1644 1652 1645 void generate_id_for_groups();1653 void update_group_id(); 1646 1654 1647 1655 void invalidate_species_counters(); … … 2114 2122 // ---------------------------------------------- 2115 2123 // inlines which need complete classdefs 2124 2125 inline void ED4_base::set_update() { 2126 if (!update_info.update_requested) { 2127 update_info.update_requested = 1; 2128 if (parent) parent->update_requested_by_child(); 2129 } 2130 } 2116 2131 2117 2132 inline bool ED4_terminal::setCursorTo(ED4_cursor *cursor, int seq_pos, bool unfoldGroups, ED4_CursorJumpType jump_type) { … … 2259 2274 #endif 2260 2275 2261 -
branches/e4fix/EDIT4/ed4_defs.hxx
r8333 r8338 324 324 unsigned int refresh_vertical_scrolling : 1; 325 325 unsigned int delete_requested : 1; 326 unsigned int update_requested : 1; 326 327 327 328 void set_clear_at_refresh(int value) {
