# HG changeset patch # User John W. Eaton # Date 1389128504 18000 # Node ID f26d527c1a71c8a24bc4b2b9523a96858d1196a6 # Parent 0806c9e75e08a7a0f09a7f7c668004f5a6578c4d allow the gui editor to set breakpoints in class methods (bug #41126) * file-editor-tab.h, file-editor-tab.cc (bp_info::bp_info): Construct bp_info struct from file name and line number instead of individual struct components. Change all uses. Recognize class name in file names that match /dir/@class/fcn.m. diff -r 0806c9e75e08 -r f26d527c1a71 libgui/src/m-editor/file-editor-tab.cc --- a/libgui/src/m-editor/file-editor-tab.cc Tue Jan 07 15:00:11 2014 -0500 +++ b/libgui/src/m-editor/file-editor-tab.cc Tue Jan 07 16:01:44 2014 -0500 @@ -51,6 +51,8 @@ #include "file-editor-tab.h" #include "file-editor.h" +#include "file-ops.h" + #include "debug.h" #include "octave-qt-link.h" #include "version.h" @@ -616,17 +618,40 @@ bp_table::remove_all_breakpoints_in_file (info.function_name, true); } +file_editor_tab::bp_info::bp_info (const QString& fname, int l) + : line (l), file (fname.toStdString ()) +{ + QFileInfo file_info (fname); + + QString q_dir = file_info.absolutePath (); + QString q_function_name = file_info.fileName (); + + // We have to cut off the suffix, because octave appends it. + q_function_name.chop (file_info.suffix ().length () + 1); + + dir = q_dir.toStdString (); + function_name = q_function_name.toStdString (); + + // Is the last component of DIR @foo? If so, strip it and prepend it + // to the name of the function. + + size_t pos = dir.rfind (file_ops::dir_sep_chars ()); + + if (pos != std::string::npos && pos < dir.length () - 1) + { + if (dir[pos+1] == '@') + { + function_name = file_ops::concat (dir.substr (pos+1), function_name); + + dir = dir.substr (0, pos); + } + } +} + void file_editor_tab::request_add_breakpoint (int line) { - QFileInfo file_info (_file_name); - QString dir = file_info.absolutePath (); - QString function_name = file_info.fileName (); - - // We have to cut off the suffix, because octave appends it. - function_name.chop (file_info.suffix ().length () + 1); - - bp_info info (_file_name, dir, function_name, line+1); + bp_info info (_file_name, line+1); octave_link::post_event (this, &file_editor_tab::add_breakpoint_callback, info); @@ -635,14 +660,7 @@ void file_editor_tab::request_remove_breakpoint (int line) { - QFileInfo file_info (_file_name); - QString dir = file_info.absolutePath (); - QString function_name = file_info.fileName (); - - // We have to cut off the suffix, because octave appends it. - function_name.chop (file_info.suffix ().length () + 1); - - bp_info info (_file_name, dir, function_name, line+1); + bp_info info (_file_name, line+1); octave_link::post_event (this, &file_editor_tab::remove_breakpoint_callback, info); @@ -703,14 +721,7 @@ if (ID != this) return; - QFileInfo file_info (_file_name); - QString dir = file_info.absolutePath (); - QString function_name = file_info.fileName (); - - // We have to cut off the suffix, because octave appends it. - function_name.chop (file_info.suffix ().length () + 1); - - bp_info info (_file_name, dir, function_name, 0); + bp_info info (_file_name); octave_link::post_event (this, &file_editor_tab::remove_all_breakpoints_callback, info); diff -r 0806c9e75e08 -r f26d527c1a71 libgui/src/m-editor/file-editor-tab.h --- a/libgui/src/m-editor/file-editor-tab.h Tue Jan 07 15:00:11 2014 -0500 +++ b/libgui/src/m-editor/file-editor-tab.h Tue Jan 07 16:01:44 2014 -0500 @@ -165,15 +165,12 @@ struct bp_info { - bp_info (const QString& f, const QString& d, const QString& fn, int l) - : file (f.toStdString ()), dir (d.toStdString ()), - function_name (fn.toStdString ()), line (l) - { } + bp_info (const QString& fname, int l = 0); + int line; std::string file; std::string dir; std::string function_name; - int line; }; bool valid_file_name (const QString& file=QString ());