Mercurial > hg > octave-nkf
diff libgui/src/m-editor/file-editor-tab.cc @ 15402:7f423c6111c6
refactor GUI event handling to use new event_queue class
* octave-link.h, octave-link.cc (event_queue): Delete.
(gui_event_queue): New event_queue variable. Change all uses of
event_queue to user gui_event_queue instead.
(octave_link::handle_event): Delete.
(octave_link::post_event, octave_link::do_post_event): Provide methods
that work directly with member functions pointers and data.
* octave-event.h, octave-event.cc, octave-event-observer.h: Delete.
Delete all uses.
* libgui/src/module.mk (noinst_HEADERS): Delete octave-event.h and
octave-event-observer.h from the list.
(src_libgui_src_la_SOURCES): Delete octave-event.cc from the list.
* workspace-view.h, history-dockwidget.h, main-window.h:
Don't include octave-link.h.
* history-dockwidget.cc (history_dock_widget::handle_event): Delete.
(history_dock_widget::handle_event): New function adapted from
handle_event.
(history_dock_widget::request_history_model_update): Update for new
event callback mechanism.
* history-dockwidget.h: Update decls.
* file-editor-tab.cc (file_editor_tab::handle_event): Delete.
(file_editor_tab::run_file_callback,
file_editor_tab::add_breakpoint_callback,
file_editor_tab::remove_breakpoint_callback,
file_editor_tab::remove_all_breakpoints_callback):
New functions adapted from handle_event and corresponding octave_event
classes.
(file_editor_tab::request_add_breakpoint,
file_editor_tab::request_remove_breakpoint,
file_editor_tab::remove_all_breakpoints, file_editor_tab::run_file):
Update for new event callback mechanism.
* file-editor-tab.h: Update decls.
(file_editor_tab::bp_info): New nested struct.
* main-window.cc (main_window::handle_event): Delete.
(main_window::save_workspace_callback,
main_window::load_workspace_callback,
main_window::clear_workspace_callback,
main_window::clear_history_callback,
main_window::change_directory_callback,
main_window::debug_continue_callback,
main_window::debug_step_into_callback,
main_window::debug_step_over_callback,
main_window::debug_step_out_callback,
main_window::debug_quit_callback, main_window::exit_callback):
New functions.
(main_window::handle_save_workspace_request,
main_window::handle_load_workspace_request,
main_window::handle_clear_workspace_request,
main_window::handle_clear_history_request,
main_window::change_current_working_directory,
main_window::set_current_working_directory,
main_window::debug_continue, main_window::debug_step_into,
main_window::debug_step_over, main_window::debug_step_out,
main_window::debug_quit):
Update for new event callback mechanism.
* main-window.h: Update decls.
* workspace-model.cc (workspace_model::handle_event): Delete.
(workspace_model::update_workspace_callback): New function.
(workspace_model::request_update_workspace): Update for new event
callback mechanism.
* workspace-model.h: Update decls.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 17 Sep 2012 23:07:22 -0400 |
parents | f918db8102d5 |
children | 8ae34ffe5c1b |
line wrap: on
line diff
--- a/libgui/src/m-editor/file-editor-tab.cc +++ b/libgui/src/m-editor/file-editor-tab.cc @@ -24,12 +24,6 @@ #include <config.h> #endif -#include "file-editor-tab.h" -#include "file-editor.h" -#include "find-dialog.h" -#include "octave-link.h" - - #include <Qsci/qsciapis.h> // Not available in the Debian repos yet! // #include <Qsci/qscilexeroctave.h> @@ -46,8 +40,16 @@ #include <QTextStream> #include <QVBoxLayout> +#include "file-editor-tab.h" +#include "file-editor.h" +#include "find-dialog.h" +#include "octave-link.h" + +#include "debug.h" +#include "oct-env.h" + file_editor_tab::file_editor_tab(file_editor *fileEditor) - : QWidget ((QWidget*)fileEditor), octave_event_observer () + : QWidget ((QWidget*)fileEditor) { _file_editor = fileEditor; _file_name = ""; @@ -116,44 +118,6 @@ } void -file_editor_tab::handle_event (octave_event *e, bool accept) -{ - if (accept) - { - if (dynamic_cast<octave_run_file_event*> (e)) - { - // File was run successfully. - } - - if (octave_add_breakpoint_event *abe - = dynamic_cast<octave_add_breakpoint_event*> (e)) - { - // TODO: Check file. - _edit_area->markerAdd (abe->get_line (), breakpoint); - } - - if (octave_remove_breakpoint_event *rbe - = dynamic_cast<octave_remove_breakpoint_event*> (e)) - { - // TODO: Check file. - _edit_area->markerDelete (rbe->get_line (), breakpoint); - } - - if (dynamic_cast<octave_remove_all_breakpoints_event*> (e)) - { - _edit_area->markerDeleteAll (breakpoint); - } - } - else - { - if (dynamic_cast<octave_run_file_event*> (e)) - { - // Running file failed. - } - } -} - -void file_editor_tab::closeEvent (QCloseEvent *e) { if (_file_editor->get_main_window ()->is_closing ()) @@ -307,9 +271,10 @@ // We have to cut off the suffix, because octave appends it. function_name.chop (file_info.suffix ().length () + 1); - octave_link::post_event (new octave_add_breakpoint_event - (*this, path.toStdString (), - function_name.toStdString (), line)); + bp_info info (path, function_name, line); + + octave_link::post_event + (this, &file_editor_tab::add_breakpoint_callback, info); } void @@ -322,9 +287,10 @@ // We have to cut off the suffix, because octave appends it. function_name.chop (file_info.suffix ().length () + 1); - octave_link::post_event (new octave_remove_breakpoint_event - (*this, path.toStdString (), - function_name.toStdString (), line)); + bp_info info (path, function_name, line); + + octave_link::post_event + (this, &file_editor_tab::remove_breakpoint_callback, info); } void @@ -492,9 +458,10 @@ // We have to cut off the suffix, because octave appends it. function_name.chop (file_info.suffix ().length () + 1); - octave_link::post_event (new octave_remove_all_breakpoints_event - (*this, path.toStdString (), - function_name.toStdString ())); + bp_info info (path, function_name, 0); + + octave_link::post_event + (this, &file_editor_tab::remove_all_breakpoints_callback, info); } void @@ -749,8 +716,8 @@ _file_editor->terminal ()->sendText (QString ("cd \'%1\'\n%2\n") .arg(path).arg (function_name)); // TODO: Sending a run event crashes for long scripts. Find out why. - // octave_link::post_event (new octave_run_file_event - // (*this, _file_name.toStdString ())); + // octave_link::post_event + // (this, &file_editor_tab::run_file_callback, _file_name.toStdString ())); } void @@ -839,3 +806,61 @@ update_window_title (false); } + +void +file_editor_tab::run_file_callback (void) +{ + // Maybe someday we will do something here? +} + +void +file_editor_tab::add_breakpoint_callback (const bp_info& info) +{ + bp_table::intmap intmap; + intmap[0] = info.line + 1; + + std::string previous_directory = octave_env::get_current_directory (); + octave_env::chdir (info.path); + intmap = bp_table::add_breakpoint (info.function_name, intmap); + octave_env::chdir (previous_directory); + + if (intmap.size () > 0) + { + // FIXME -- Check file. + _edit_area->markerAdd (info.line, breakpoint); + } +} + +void +file_editor_tab::remove_breakpoint_callback (const bp_info& info) +{ + bp_table::intmap intmap; + intmap[0] = info.line; + + std::string previous_directory = octave_env::get_current_directory (); + octave_env::chdir (info.path); + bp_table::remove_breakpoint (info.function_name, intmap); + octave_env::chdir (previous_directory); + + // FIXME -- check result + bool success = true; + + if (success) + { + // FIXME -- check file. + _edit_area->markerDelete (info.line, breakpoint); + } +} + +void +file_editor_tab::remove_all_breakpoints_callback (const bp_info& info) +{ + bp_table::intmap intmap; + std::string previous_directory = octave_env::get_current_directory (); + octave_env::chdir (info.path); + intmap = bp_table::remove_all_breakpoints_in_file (info.function_name, true); + octave_env::chdir (previous_directory); + + if (intmap.size() > 0) + _edit_area->markerDeleteAll (breakpoint); +}