# HG changeset patch # User John W. Eaton # Date 1366378582 14400 # Node ID c1e90c7cfd3082f9c27f037197a53e02a1a6c254 # Parent cfa98328acc991ebbe77f73d006482ed96c60398 try harder to find editor tab widgets for files with multiple names * file-editor.h, file-editor.cc (file_editor::editor_tab_map_iterator, file_editor::editor_tab_map_const_iterator): New typedefs. (file_editor::find_tab_widget): New function. (file_editor::request_open_file, file_editor::check_conflict_save, file_editor::handle_delete_debugger_pointer_request): Use it. diff --git a/libgui/src/m-editor/file-editor.cc b/libgui/src/m-editor/file-editor.cc --- a/libgui/src/m-editor/file-editor.cc +++ b/libgui/src/m-editor/file-editor.cc @@ -39,6 +39,7 @@ #include #include "octave-link.h" +#include "utils.h" file_editor::file_editor (QWidget *p) : file_editor_interface (p) @@ -62,7 +63,7 @@ emit fetab_file_name_query (0); } QStringList fetFileNames; - for (std::map::const_iterator p = editor_tab_map.begin (); + for (editor_tab_map_const_iterator p = editor_tab_map.begin (); p != editor_tab_map.end (); p++) fetFileNames.append (p->first); @@ -167,6 +168,27 @@ fileDialog->show (); } +// Check whether this file is already open in the editor. +QWidget * +file_editor::find_tab_widget (const QString& file) const +{ + QWidget *retval = 0; + + for (editor_tab_map_const_iterator p = editor_tab_map.begin (); + p != editor_tab_map.end (); p++) + { + QString tab_file = p->first; + + if (same_file (file.toStdString (), tab_file.toStdString ())) + { + retval = p->second; + break; + } + } + + return retval; +} + void file_editor::request_open_file (const QString& openFileName, int line, bool debug_pointer, @@ -197,23 +219,24 @@ emit fetab_file_name_query (0); // Check whether this file is already open in the editor. - std::map::const_iterator p = editor_tab_map.find (openFileName); - if (p != editor_tab_map.end ()) + QWidget *tab = find_tab_widget (openFileName); + + if (tab) { - _tab_widget->setCurrentWidget (p->second); + _tab_widget->setCurrentWidget (tab); if (line > 0) { - emit fetab_goto_line (p->second, line); + emit fetab_goto_line (tab, line); if (debug_pointer) - emit fetab_insert_debugger_pointer (p->second, line-1); + emit fetab_insert_debugger_pointer (tab, line-1); if (breakpoint_marker) - emit fetab_do_breakpoint_marker (insert, p->second, line-1); + emit fetab_do_breakpoint_marker (insert, tab, line-1); } - emit fetab_set_focus (p->second); + emit fetab_set_focus (tab); } else { @@ -281,8 +304,10 @@ editor_tab_map.clear (); emit fetab_file_name_query (0); - std::map::const_iterator p = editor_tab_map.find (saveFileName); - if (p != editor_tab_map.end ()) + // Check whether this file is already open in the editor. + QWidget *tab = find_tab_widget (saveFileName); + + if (tab) { // Note: to overwrite the contents of some other file editor tab // with the same name requires identifying which file editor tab @@ -348,15 +373,16 @@ emit fetab_file_name_query (0); // Check whether this file is already open in the editor. - std::map::const_iterator p = editor_tab_map.find (file); - if (p != editor_tab_map.end ()) + QWidget *tab = find_tab_widget (file); + + if (tab) { - _tab_widget->setCurrentWidget (p->second); + _tab_widget->setCurrentWidget (tab); if (line > 0) - emit fetab_delete_debugger_pointer (p->second, line-1); + emit fetab_delete_debugger_pointer (tab, line-1); - emit fetab_set_focus (p->second); + emit fetab_set_focus (tab); } } } diff --git a/libgui/src/m-editor/file-editor.h b/libgui/src/m-editor/file-editor.h --- a/libgui/src/m-editor/file-editor.h +++ b/libgui/src/m-editor/file-editor.h @@ -49,6 +49,9 @@ public: + typedef std::map::iterator editor_tab_map_iterator; + typedef std::map::const_iterator editor_tab_map_const_iterator; + file_editor (QWidget *p); ~file_editor (); @@ -161,6 +164,8 @@ void save_file_as (QWidget *fetabID = 0); void mru_menu_update (); + QWidget *find_tab_widget (const QString& openFileName) const; + std::map editor_tab_map; QString ced;