📄 gw_qs_observer.c
字号:
show_active_line(15); swap_nodes(left, j); gw.set_color(A_node[j], grey2); for(int i = actual_l; i <= actual_r; i++) if(i != j) gw.set_color(A_node[i], ivory); Swaps++; update_status_window(); TL_ptr_run->load_text_with_display(LanguagePath + "swap2.txt"); TL_ptr_run->disable_all_buttons(); if(GotoLine == 11) { TL_ptr_run->enable_all_buttons(); TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine = 12)); wait_of(); } else TL_ptr_run->wait_with_timeout(AnimationDelay * 70);}void gw_qs_observer::on_12(alg_qsort&, int left, int j) { // first Quicksort call // firstQuicksortCall = true; if(Abort) return; show_active_line(16); TL_ptr_run->load_text_with_display(LanguagePath + "new_qsort1.txt"); TL_ptr_run->disable_all_buttons(); if (GotoLine == 12) { 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); }void gw_qs_observer::on_13(alg_qsort&, int i, int right) { // second Quicksort call // firstQuicksortCall = false; if(Abort) return; show_active_line(17); TL_ptr_run->load_text_with_display(LanguagePath + "new_qsort2.txt"); TL_ptr_run->disable_all_buttons(); if (GotoLine == 13) { 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);}void gw_qs_observer::on_finish(alg_qsort&) { zoom_to_interval(A_node[0], A_node[ArraySize - 1]); TL_ptr_run->enable_all_buttons(); TL_ptr_run->disable_button(1); TL_ptr_run->disable_button(2); TL_ptr_run->disable_button(3); TL_ptr_run->disable_button(4); TL_ptr_source->set_string_style("", 1, ""); TL_ptr_source->load_text_with_display(LanguagePath + "qsort.txt"); if(!Abort) { TL_ptr_run->load_text(LanguagePath + "finish.txt"); while(TL_ptr_run->open_with_read_button() != 0); } TL_ptr_run->close(); }// private functionsvoid gw_qs_observer::show_active_line(int i){ TL_ptr_source->set_string_style("\\red", i, "1\\"); TL_ptr_source->load_text_with_display(LanguagePath + "qsort.txt");} void gw_qs_observer::delay_panel(){ TL_ptr_run->disable_all_buttons(); window *wpt_run = TL_ptr_run->get_window_ptr(); panel speed_panel; speed_panel.text_item(""); speed_panel.int_item(delay_label, AnimationDelay, 1, 10); speed_panel.button("Ok", 0); while(speed_panel.open((*wpt_run), window::center, window::center) != 0); TL_ptr_run->set_button_label(2, delay_label + string("%d", AnimationDelay)); TL_ptr_run->enable_all_buttons();}void gw_qs_observer::wait_of() { bool Continue = false; SemiAuto = false; int but; while(!Abort && GotoLine != -1 && !Continue && (but = TL_ptr_run->read_button()) != 0) switch (but) { case 1 : { TL_ptr_run->disable_all_buttons(); window* wpt_run = TL_ptr_run->get_window_ptr(); string fn = "Goto_panel.button_labels"; ifstream in(LanguagePath + "win_and_panel_labels/" + fn); if(!in) { error_handler(0, "Can't open file : " + fn + " !"); return; } string Continue_stg = read_line(in); string Auto_stg = read_line(in); string Cancel_stg = read_line(in); int SaveGotoLine = GotoLine; bool SaveZoom = isZoom; panel goto_panel; goto_panel.text_item(""); //panel_item it = goto_panel.int_item(goto_label, GotoLine, 1, 13); goto_panel.bool_item(" Zoom", isZoom); goto_panel.button(Continue_stg, 0); goto_panel.button(Auto_stg, 1); goto_panel.button(Cancel_stg, 2); int but = goto_panel.open((*wpt_run), window::center, window::center); switch (but) { case 0 : { if(SaveGotoLine != GotoLine) SemiAuto = true; TL_ptr_run->set_button_label(1, goto_label + string("%d", GotoLine)); Continue = true; break; } case 1 : { GotoLine = -1; TL_ptr_run->set_button_label(1, Auto_stg); break; } case 2 : { GotoLine = SaveGotoLine; isZoom = SaveZoom; TL_ptr_run->enable_all_buttons(); break; } } if(!isZoom) zoom_to_interval(A_node[0], A_node[ArraySize-1]); break; } case 2 : { delay_panel(); break; } case 3 : { Abort = true; break; } case 4 : { TL_ptr_run->disable_all_buttons(); TextLoader W_help(520, 280); W_help.set_scrollbar(true); W_help.extract_frame_label(LanguagePath + "win_and_panel_labels/W_help.frame_label"); W_help.create_menu(LanguagePath + "win_and_panel_labels/W_help.button_labels"); W_help.load_text(LanguagePath + "help.txt"); W_help.display(); while(W_help.read_button() != 0); TL_ptr_run->enable_all_buttons(); break; } }}void gw_qs_observer::update_status_window(){ string str_actual_i; string str_actual_v; string str_A_int_i; if(actual_i != -1) { str_actual_i = string("%d", actual_i); str_A_int_i = string("%d", A_int[actual_i]); } string str_actual_j; string str_A_int_j; if(actual_j != -1) { str_actual_j = string("%d", actual_j); if(actual_j < ArraySize) str_A_int_j = string("%d", A_int[actual_j]); } if(actual_v != -1) str_actual_v = string("%d", A_int[actual_v]); VariableValue.clear(); VariableValue.append(string("%d", actual_l)); VariableValue.append(string("%d", actual_r)); VariableValue.append(str_actual_i); VariableValue.append(str_actual_j); VariableValue.append(str_actual_v); VariableValue.append(str_A_int_i); VariableValue.append(str_A_int_j); VariableValue.append(string("%d", Swaps)); VariableValue.append(string("%d", Compares)); VV_ptr_state->update_table(VariableValue);}void gw_qs_observer::swap_nodes(int i, int j){ node v = A_node[i]; node w = A_node[j]; graph& G = gw.get_graph(); window& W = gw.get_window(); node_array<point> pos(G); node u; forall_nodes(u,G) pos[u] = gw.get_position(u); double xv = pos[v].xcoord(); double yv = pos[v].ycoord(); double xw = pos[w].xcoord(); double yw = pos[w].ycoord(); double dy = 20; int xpix = W.real_to_pix(xw-xv); int ypix = W.real_to_pix(dy); gw.set_flush(true); pos[v] = point(xv,yv-dy); pos[w] = point(xw,yw-dy); gw.set_animation_steps(AnimationDelay + ypix * 1/4); gw.set_position(pos); pos[v] = point(xw,yw-dy); pos[w] = point(xv,yv-dy); gw.set_animation_steps(AnimationDelay + xpix * 1/4); gw.set_position(pos); pos[v] = point(xw,yw); pos[w] = point(xv,yv); gw.set_animation_steps(AnimationDelay + ypix * 1/4); gw.set_position(pos); A_node[i] = w; A_node[j] = v; }void gw_qs_observer::zoom_to_interval(node v, node w){ double delta_x = gw.get_xmax() - gw.get_xmin(); double delta_y = gw.get_ymax() - gw.get_ymin(); double f = delta_y / delta_x; point p = gw.get_position(v); point q = gw.get_position(w); double r = gw.get_node_radius1(); double x0 = p.xcoord() - 2 * r; double x1 = q.xcoord() + 2 * r; while ((x1 - x0) < (26 * r)) { x0 -= r; x1 += r; } double dy = f * (x1 - x0) / 2; double y0 = p.ycoord() - dy; double y1 = q.ycoord() + dy; gw.set_animation_steps(20); gw.zoom_area(x0, y0, x1, y1);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -