📄 gw_hs_observer.c
字号:
#include "gw_hs_observer.h"// public functions//void gw_hs_observer::on_start(alg_heapsort&) { int gw_xmin; int gw_xmax; int gw_ymin; int gw_ymax; (gw.get_window()).frame_box(gw_xmin, gw_ymin, gw_xmax, gw_ymax); AT_ptr_tree->extract_frame_label(LanguagePath + "win_and_panel_labels/W_tree.frame_label"); AT_ptr_tree->set_node_distance(2.2, 1.7); AT_ptr_tree->create_tree((*ap)); AT_ptr_tree->set_display_position(gw_xmin, gw_ymax + 20); int i; for(i = A_node.low(); i <= ArraySize; i++) gw.set_color(A_node[i], AT_ptr_tree->get_node_color(i)); TL_ptr_source->set_scrollbar(true); TL_ptr_source->set_bg_color(blue); TL_ptr_source->extract_frame_label(LanguagePath + "win_and_panel_labels/W_source.frame_label"); TL_ptr_source->load_text_with_display(LanguagePath + "heapsort.txt", gw_xmax + 20, gw_ymin); TL_ptr_run->extract_frame_label(LanguagePath + "win_and_panel_labels/W_run.frame_label"); TL_ptr_run->set_button_space(30); TL_ptr_run->set_scrollbar(true); TL_ptr_run->create_menu(LanguagePath + "win_and_panel_labels/W_run.button_labels"); TL_ptr_run->set_display_position(gw_xmin, gw_ymin - TL_ptr_run->get_window_height() - 47); goto_label = TL_ptr_run->get_button_label(1); // dirty menu effects // goto_label = goto_label.del(goto_label.length() - 3); TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine = 8)); delay_label = TL_ptr_run->get_button_label(2); // dirty menu effects // delay_label = delay_label.del(delay_label.length() - 3); TL_ptr_run->set_button_label(2, delay_label + string("%d ", AnimationDelay)); VariableName.clear(); VariableName.append("i"); VariableName.append("k"); VariableName.append("j"); VariableName.append("\\red A[k]"); VariableName.append("A[j]"); VariableName.append("A[j+1]"); VariableName.append("N"); VariableName.append("swaps"); VariableName.append("compares"); VariableValue.clear(); for(i = 0; i < VariableName.size(); i++) VariableValue.append(""); VV_ptr_state->extract_frame_label(LanguagePath + "win_and_panel_labels/W_state.frame_label"); VV_ptr_state->set_tupel_per_line(3); VV_ptr_state->set_fontsize(18); VV_ptr_state->create_table(VariableName, VariableValue); VV_ptr_state->display(gw_xmax+ 20, gw_ymin - AT_ptr_tree->get_window_height() - 27); }// function heapsort//void gw_hs_observer::on_1(alg_heapsort&, int N) { if(Abort) return; show_active_line(14); TL_ptr_run->load_text_with_display(LanguagePath + "start.txt"); AT_ptr_tree->display(); actual_N = N; update_status_window(); if(GotoLine == 8) { TL_ptr_run->enable_all_buttons(); TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine = 9)); wait_of(); } else TL_ptr_run->wait_with_timeout(AnimationDelay * 70);}void gw_hs_observer::on_2(alg_heapsort&, int i) { if(Abort) return; show_active_line(16); TL_ptr_run->load_text_with_display(LanguagePath + "for.txt"); actual_i = i; Compares++; update_status_window(); if(GotoLine == 9) { GotoLine = actual_i >= 1 ? 10 : 11; TL_ptr_run->enable_all_buttons(); TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine)); wait_of(); } else TL_ptr_run->wait_with_timeout(AnimationDelay * 70);}void gw_hs_observer::on_3(alg_heapsort&, int, int) { if(Abort) return; show_active_line(17); TL_ptr_run->load_text_with_display(LanguagePath + "heapify_call1.txt"); if(GotoLine == 10) { TL_ptr_run->enable_all_buttons(); TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine = 1)); wait_of(); } else TL_ptr_run->wait_with_timeout(AnimationDelay * 70);}// function heapify//void gw_hs_observer::on_4(alg_heapsort&, int k) { if(Abort) return; show_active_line(1); TL_ptr_run->load_text_with_display(LanguagePath + "heapify_call2.txt"); actual_i = -1; actual_k = k; update_status_window(); col_k = AT_ptr_tree->set_node_color(actual_k, red); gw.set_color(A_node[actual_k], red); if(GotoLine == 1) { TL_ptr_run->enable_all_buttons(); TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine = 2)); wait_of(); } else TL_ptr_run->wait_with_timeout(AnimationDelay * 70);}void gw_hs_observer::on_5(alg_heapsort&, int, int) { if(Abort) return; show_active_line(3); TL_ptr_run->load_text_with_display(LanguagePath + "while1.txt"); Compares++; update_status_window(); if(GotoLine == 2) { if(actual_k * 2 > actual_N) GotoLine = BuildHeap ? 9 : 11; else GotoLine = 3; TL_ptr_run->enable_all_buttons(); TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine)); wait_of(); } else TL_ptr_run->wait_with_timeout(AnimationDelay * 70); if(actual_k * 2 > actual_N) { if(isZoom) zoom_to_interval(A_node[1], A_node[actual_N]); if(GotoLine != -1 && !SemiAuto) GotoLine = BuildHeap ? 9 : 11; AT_ptr_tree->set_node_color(actual_k, col_k); gw.set_color(A_node[actual_k], col_k); actual_k = -1; actual_j = -1; } else if(GotoLine != -1 && !SemiAuto) GotoLine = 3;}void gw_hs_observer::on_6(alg_heapsort&, int j) { if(Abort) return; show_active_line(5); TL_ptr_run->load_text_with_display(LanguagePath + "new_j.txt"); actual_j = j; update_status_window(); col_j = AT_ptr_tree->get_node_color(actual_j); if(GotoLine == 3) { TL_ptr_run->enable_all_buttons(); TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine = 4)); wait_of(); } else TL_ptr_run->wait_with_timeout(AnimationDelay * 70);}void gw_hs_observer::on_7(alg_heapsort&, int N, int j) { if(Abort) return; if(isZoom) if(actual_j < actual_N) zoom_to_interval(A_node[actual_k], A_node[actual_j+1]); else zoom_to_interval(A_node[actual_k], A_node[actual_j+1]); show_active_line(6); TL_ptr_run->load_text_with_display(LanguagePath + "if1.txt"); actual_N = N; actual_j = j; if(actual_j < actual_N) { col_j = AT_ptr_tree->get_node_color(actual_j); col_marked = col_j == green2 ? green : blue; AT_ptr_tree->marked_edge(actual_j, actual_j + 1, ivory, 3); TL_ptr_run->wait_with_timeout(AnimationDelay * 100); AT_ptr_tree->demarked_edge(actual_j, actual_j + 1); if(A_int[actual_j] < A_int[actual_j+1]) actual_j++; AT_ptr_tree->set_node_color(actual_j, col_marked); gw.set_color(A_node[actual_j], col_marked); } Compares++; Compares++; update_status_window(); if(GotoLine == 4) { TL_ptr_run->enable_all_buttons(); TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine = 5)); wait_of(); } else TL_ptr_run->wait_with_timeout(AnimationDelay * 70);}void gw_hs_observer::on_8(alg_heapsort&, int, int) { if(Abort) return; show_active_line(7); TL_ptr_run->load_text_with_display(LanguagePath + "if2.txt"); if(A_int[actual_k] >= A_int[actual_j]) AT_ptr_tree->marked_edge(actual_k, actual_j, grey1, 3); else AT_ptr_tree->marked_edge(actual_k, actual_j, ivory, 3); TL_ptr_run->wait_with_timeout(AnimationDelay * 100); AT_ptr_tree->demarked_edge(actual_k, actual_j); Compares++; update_status_window(); if(GotoLine == 5) { if(A_int[actual_k] >= A_int[actual_j]) GotoLine = BuildHeap ? 9 : 11; else GotoLine = 6; TL_ptr_run->enable_all_buttons(); TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine)); wait_of(); } else TL_ptr_run->wait_with_timeout(AnimationDelay * 70); if(A_int[actual_k] >= A_int[actual_j]) { if(isZoom) zoom_to_interval(A_node[1], A_node[actual_N]); if(GotoLine != -1 && !SemiAuto) GotoLine = BuildHeap ? 9 : 11; AT_ptr_tree->set_node_color(actual_k, col_k); AT_ptr_tree->set_node_color(actual_j, col_j); gw.set_color(A_node[actual_k], col_k); gw.set_color(A_node[actual_j], col_j); actual_k = -1; actual_j = -1; } else if(GotoLine != -1 && !SemiAuto) GotoLine = 6;}void gw_hs_observer::on_9(alg_heapsort&, int, int) { if(Abort) return; show_active_line(8); TL_ptr_run->load_text_with_display(LanguagePath + "swap1.txt"); col_j = col_j == blue2 ? green2 : blue2; col_k = col_k == blue2 ? green2 : blue2; swap_nodes(actual_k,actual_j); AT_ptr_tree->set_node_color(actual_k, col_j); gw.set_color(A_node[actual_k], col_j); Swaps++; update_status_window(); if(GotoLine == 6) { TL_ptr_run->enable_all_buttons(); TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine = 7)); wait_of(); } else TL_ptr_run->wait_with_timeout(AnimationDelay * 70);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -