📄 gw_qs_observer.c
字号:
#include "gw_qs_observer.h"// public functionsvoid gw_qs_observer::on_start(alg_qsort&) { 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); 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 + "qsort.txt", gw_xmax + 20, gw_ymin); TL_ptr_run->set_scrollbar(true); 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->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 = 1)); 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("l"); VariableName.append("r"); VariableName.append("\\blue2 i"); VariableName.append("\\green2 j"); VariableName.append("\\red v"); VariableName.append("A[i]"); VariableName.append("A[j]"); VariableName.append("swaps"); VariableName.append("compares"); VariableValue.clear(); for(int 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_distance(0.5); VV_ptr_state->set_tupel_per_line(5); VV_ptr_state->set_fontsize(11); VV_ptr_state->create_table(VariableName, VariableValue); VV_ptr_state->display(gw_xmin, gw_ymax + 20);}void gw_qs_observer::on_1(alg_qsort&, int left, int right) { if(Abort) return; // attention: index over- or underflow possible // if(isZoom && left < ArraySize && right > 0) zoom_to_interval(A_node[left], A_node[right]); show_active_line(2); actual_v = -1; actual_j = -1; actual_i = -1; actual_l = left; actual_r = right; update_status_window(); TL_ptr_run->load_text_with_display(LanguagePath + "start.txt"); TL_ptr_run->disable_all_buttons(); 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_qs_observer::on_2(alg_qsort&, int left, int right) { if(Abort) return; show_active_line(4); Compares++; update_status_window(); // attention: index over- or underflow possible // if(left >= right) { if(right < 0) gw.set_color(A_node[left], grey2); else gw.set_color(A_node[right], grey2); if(GotoLine != -1 && !SemiAuto) GotoLine = firstQuicksortCall ? 13 : 1; } TL_ptr_run->load_text_with_display(LanguagePath + "comp_l_r.txt"); TL_ptr_run->disable_all_buttons(); if (GotoLine == 2) { TL_ptr_run->enable_all_buttons(); TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine = 3)); wait_of(); } else TL_ptr_run->wait_with_timeout(AnimationDelay * 70);}void gw_qs_observer::on_3(alg_qsort&, int i) { if(Abort) return; show_active_line(5); actual_i = i; update_status_window(); TL_ptr_run->load_text_with_display(LanguagePath + "new_i.txt"); TL_ptr_run->disable_all_buttons(); 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_qs_observer::on_4(alg_qsort&, int j) { if(Abort) return; show_active_line(6); actual_j = j; update_status_window(); TL_ptr_run->load_text_with_display(LanguagePath + "new_j.txt"); TL_ptr_run->disable_all_buttons(); 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_qs_observer::on_5(alg_qsort&, int v) { if(Abort) return; show_active_line(7); gw.set_color(A_node[v], red); actual_v = v; update_status_window(); TL_ptr_run->load_text_with_display(LanguagePath + "pivot.txt"); TL_ptr_run->disable_all_buttons(); if (GotoLine == 5) { TL_ptr_run->enable_all_buttons(); TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine = 6)); wait_of(); } else TL_ptr_run->wait_with_timeout(AnimationDelay * 70);}void gw_qs_observer::on_6(alg_qsort&) { if(Abort) return; show_active_line(8); TL_ptr_run->load_text_with_display(LanguagePath + "for.txt"); TL_ptr_run->disable_all_buttons(); 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);}void gw_qs_observer::on_7(alg_qsort&, int i, int v) { if(Abort) return; show_active_line(10); gw.set_color(A_node[i], blue2); gw.set_color(A_node[v], red); Compares = Compares + 2; actual_i = i; update_status_window(); TL_ptr_run->load_text_with_display(LanguagePath + "while1.txt"); TL_ptr_run->disable_all_buttons(); if(GotoLine == 7) { TL_ptr_run->enable_all_buttons(); GotoLine = A_int[i] >= A_int[v] || i >= actual_r ? 8 : 7; 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_qs_observer::on_8(alg_qsort& , int j, int v) { if(Abort) return; show_active_line(11); gw.set_color(A_node[j], green2); gw.set_color(A_node[v], red); Compares++; actual_j = j; update_status_window(); TL_ptr_run->load_text_with_display(LanguagePath + "while2.txt"); TL_ptr_run->disable_all_buttons(); if(GotoLine == 8) { TL_ptr_run->enable_all_buttons(); GotoLine = A_int[j] <= A_int[v] ? 9 : 8; 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_qs_observer::on_9(alg_qsort&, int i, int j) { if(Abort) return; show_active_line(12); Compares++; actual_j = j; actual_i = i; update_status_window(); TL_ptr_run->load_text_with_display(LanguagePath + "if_i_j.txt"); TL_ptr_run->disable_all_buttons(); if(GotoLine == 9) { TL_ptr_run->enable_all_buttons(); GotoLine = i >= j ? 11 : 10; 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_qs_observer::on_10(alg_qsort&, int i, int j) { if(Abort) return; show_active_line(13); swap_nodes(i, j); gw.set_color(A_node[j], green2); gw.set_color(A_node[i], blue2); Swaps++; update_status_window(); TL_ptr_run->load_text_with_display(LanguagePath + "swap1.txt"); TL_ptr_run->disable_all_buttons(); if(GotoLine == 10) { 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); }void gw_qs_observer::on_11(alg_qsort&, int left, int j) { if(Abort) return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -