Mercurial > octave
diff libgui/src/m-editor/file-editor.cc @ 24716:2b3e0b570e77
move GUI file editor classes inside octave namespace
* file-editor-interface.h, file-editor-tab.cc, file-editor-tab.h,
file-editor.cc, file-editor.h, find-dialog.cc, find-dialog.h,
marker.cc, marker.h, octave-qscintilla.cc, octave-qscintilla.h,
octave-txt-lexer.cc, octave-txt-lexer.h:
Move classes inside octave namespace.
* main-window.cc, settings-dialog.cc: Update to namespace changes.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 09 Feb 2018 13:56:34 -0500 |
parents | 88bb3f086d9a |
children | 63b5ac6a5ee7 |
line wrap: on
line diff
--- a/libgui/src/m-editor/file-editor.cc Fri Feb 09 13:13:39 2018 -0500 +++ b/libgui/src/m-editor/file-editor.cc Fri Feb 09 13:56:34 2018 -0500 @@ -48,2358 +48,2252 @@ #include "octave-link.h" #include "utils.h" - -// Functions of the the reimplemented tab widget +namespace octave +{ + // Functions of the the reimplemented tab widget -file_editor_tab_widget::file_editor_tab_widget (QWidget *p) - : QTabWidget (p) -{ - tab_bar *bar = new tab_bar (this); + file_editor_tab_widget::file_editor_tab_widget (QWidget *p) + : QTabWidget (p) + { + tab_bar *bar = new tab_bar (this); - connect (bar, SIGNAL (close_current_tab_signal (bool)), - p->parent (), SLOT (request_close_file (bool))); + connect (bar, SIGNAL (close_current_tab_signal (bool)), + p->parent (), SLOT (request_close_file (bool))); - this->setTabBar (bar); + this->setTabBar (bar); - setTabsClosable (true); + setTabsClosable (true); #if defined (HAVE_QTABWIDGET_SETMOVABLE) - setMovable (true); + setMovable (true); #endif -} + } -tab_bar * -file_editor_tab_widget::get_tab_bar (void) const -{ - return qobject_cast<tab_bar *> (tabBar ()); -} + tab_bar * file_editor_tab_widget::get_tab_bar (void) const + { + return qobject_cast<tab_bar *> (tabBar ()); + } -// File editor + // File editor -file_editor::file_editor (QWidget *p) - : file_editor_interface (p) -{ - // Set current editing directory before construct because loaded - // files will change ced accordingly. - m_ced = QDir::currentPath (); + file_editor::file_editor (QWidget *p) + : file_editor_interface (p) + { + // Set current editing directory before construct because loaded + // files will change ced accordingly. + m_ced = QDir::currentPath (); - // set action that are later added by the main window to null, - // preventing access to them when they are still undefined - m_undo_action = nullptr; - m_copy_action = nullptr; - m_paste_action = nullptr; - m_selectall_action = nullptr; - m_closed = false; - m_no_focus = false; + // set action that are later added by the main window to null, + // preventing access to them when they are still undefined + m_undo_action = nullptr; + m_copy_action = nullptr; + m_paste_action = nullptr; + m_selectall_action = nullptr; + m_closed = false; + m_no_focus = false; - construct (); - - // actions that should also be available in the find dialog - m_fetab_actions << m_find_next_action; - m_fetab_actions << m_find_previous_action; + construct (); - setVisible (false); - setAcceptDrops (true); -} + // actions that should also be available in the find dialog + m_fetab_actions << m_find_next_action; + m_fetab_actions << m_find_previous_action; -file_editor::~file_editor (void) -{ - delete m_mru_file_menu; -} + setVisible (false); + setAcceptDrops (true); + } + + file_editor::~file_editor (void) + { + delete m_mru_file_menu; + } -// insert global actions, that should also be displayed in the editor window, -// into the editor's menu and/or toolbar -void -file_editor::insert_global_actions (QList<QAction*> shared_actions) -{ - // actions/menus that have to be added to the toolbar or the menu - QAction *open_action = shared_actions.at (OPEN_ACTION); - QAction *new_action = shared_actions.at (NEW_SCRIPT_ACTION); - QAction *new_fcn_action = shared_actions.at (NEW_FUNCTION_ACTION); - m_fileMenu->insertAction (m_mru_file_menu->menuAction (), open_action); - m_fileMenu->insertAction (open_action, new_fcn_action); - m_fileMenu->insertAction (new_fcn_action, new_action); - m_tool_bar->insertAction (m_popdown_mru_action, open_action); - m_tool_bar->insertAction (open_action, new_action); + // insert global actions, that should also be displayed in the editor window, + // into the editor's menu and/or toolbar + void file_editor::insert_global_actions (QList<QAction*> shared_actions) + { + // actions/menus that have to be added to the toolbar or the menu + QAction *open_action = shared_actions.at (OPEN_ACTION); + QAction *new_action = shared_actions.at (NEW_SCRIPT_ACTION); + QAction *new_fcn_action = shared_actions.at (NEW_FUNCTION_ACTION); + m_fileMenu->insertAction (m_mru_file_menu->menuAction (), open_action); + m_fileMenu->insertAction (open_action, new_fcn_action); + m_fileMenu->insertAction (new_fcn_action, new_action); + m_tool_bar->insertAction (m_popdown_mru_action, open_action); + m_tool_bar->insertAction (open_action, new_action); - // actions that are additionally enabled/disabled later by the editor - // undo - m_undo_action = shared_actions.at (UNDO_ACTION); - m_tool_bar->insertAction (m_redo_action,m_undo_action); - m_edit_menu->insertAction (m_redo_action,m_undo_action); - // copy - m_copy_action = shared_actions.at (COPY_ACTION); - m_tool_bar->insertAction (m_cut_action,m_copy_action); - m_edit_menu->insertAction (m_cut_action,m_copy_action); - // select all - m_selectall_action = shared_actions.at (SELECTALL_ACTION); - m_edit_menu->insertAction (m_find_action,m_selectall_action); - m_edit_menu->insertSeparator (m_find_action); - // paste - m_paste_action = shared_actions.at (PASTE_ACTION); - m_tool_bar->insertAction (m_find_action,m_paste_action); - m_edit_menu->insertAction (m_selectall_action,m_paste_action); - m_edit_menu->insertSeparator (m_selectall_action); - // find files - m_find_files_action = shared_actions.at (FIND_FILES_ACTION); - m_edit_menu->insertAction (m_find_action, m_find_files_action); -} + // actions that are additionally enabled/disabled later by the editor + // undo + m_undo_action = shared_actions.at (UNDO_ACTION); + m_tool_bar->insertAction (m_redo_action,m_undo_action); + m_edit_menu->insertAction (m_redo_action,m_undo_action); + // copy + m_copy_action = shared_actions.at (COPY_ACTION); + m_tool_bar->insertAction (m_cut_action,m_copy_action); + m_edit_menu->insertAction (m_cut_action,m_copy_action); + // select all + m_selectall_action = shared_actions.at (SELECTALL_ACTION); + m_edit_menu->insertAction (m_find_action,m_selectall_action); + m_edit_menu->insertSeparator (m_find_action); + // paste + m_paste_action = shared_actions.at (PASTE_ACTION); + m_tool_bar->insertAction (m_find_action,m_paste_action); + m_edit_menu->insertAction (m_selectall_action,m_paste_action); + m_edit_menu->insertSeparator (m_selectall_action); + // find files + m_find_files_action = shared_actions.at (FIND_FILES_ACTION); + m_edit_menu->insertAction (m_find_action, m_find_files_action); + } -void -file_editor::handle_enter_debug_mode (void) -{ - m_run_action->setEnabled (false); - m_run_action->setShortcut (QKeySequence ()); -} + void file_editor::handle_enter_debug_mode (void) + { + m_run_action->setEnabled (false); + m_run_action->setShortcut (QKeySequence ()); + } -void -file_editor::handle_exit_debug_mode (void) -{ - m_run_action->setEnabled (true); - shortcut_manager::set_shortcut (m_run_action, "editor_run:run_file"); -} + void file_editor::handle_exit_debug_mode (void) + { + m_run_action->setEnabled (true); + shortcut_manager::set_shortcut (m_run_action, "editor_run:run_file"); + } -void -file_editor::check_actions (void) -{ - bool have_tabs = m_tab_widget->count () > 0; + void file_editor::check_actions (void) + { + bool have_tabs = m_tab_widget->count () > 0; - m_edit_cmd_menu->setEnabled (have_tabs); - m_edit_fmt_menu->setEnabled (have_tabs); - m_edit_nav_menu->setEnabled (have_tabs); + m_edit_cmd_menu->setEnabled (have_tabs); + m_edit_fmt_menu->setEnabled (have_tabs); + m_edit_nav_menu->setEnabled (have_tabs); - m_comment_selection_action->setEnabled (have_tabs); - m_uncomment_selection_action->setEnabled (have_tabs); - m_comment_var_selection_action->setEnabled (have_tabs); - m_indent_selection_action->setEnabled (have_tabs); - m_unindent_selection_action->setEnabled (have_tabs); - m_smart_indent_line_or_selection_action->setEnabled (have_tabs); + m_comment_selection_action->setEnabled (have_tabs); + m_uncomment_selection_action->setEnabled (have_tabs); + m_comment_var_selection_action->setEnabled (have_tabs); + m_indent_selection_action->setEnabled (have_tabs); + m_unindent_selection_action->setEnabled (have_tabs); + m_smart_indent_line_or_selection_action->setEnabled (have_tabs); - m_context_help_action->setEnabled (have_tabs); - m_context_doc_action->setEnabled (have_tabs); + m_context_help_action->setEnabled (have_tabs); + m_context_doc_action->setEnabled (have_tabs); - m_view_editor_menu->setEnabled (have_tabs); - m_zoom_in_action->setEnabled (have_tabs); - m_zoom_out_action->setEnabled (have_tabs); - m_zoom_normal_action->setEnabled (have_tabs); + m_view_editor_menu->setEnabled (have_tabs); + m_zoom_in_action->setEnabled (have_tabs); + m_zoom_out_action->setEnabled (have_tabs); + m_zoom_normal_action->setEnabled (have_tabs); - m_find_action->setEnabled (have_tabs); - m_find_next_action->setEnabled (have_tabs); - m_find_previous_action->setEnabled (have_tabs); - m_print_action->setEnabled (have_tabs); - m_run_action->setEnabled (have_tabs); + m_find_action->setEnabled (have_tabs); + m_find_next_action->setEnabled (have_tabs); + m_find_previous_action->setEnabled (have_tabs); + m_print_action->setEnabled (have_tabs); + m_run_action->setEnabled (have_tabs); - m_edit_function_action->setEnabled (have_tabs); - m_save_action->setEnabled (have_tabs); - m_save_as_action->setEnabled (have_tabs); - m_close_action->setEnabled (have_tabs); - m_close_all_action->setEnabled (have_tabs); - m_close_others_action->setEnabled (have_tabs && m_tab_widget->count () > 1); -} + m_edit_function_action->setEnabled (have_tabs); + m_save_action->setEnabled (have_tabs); + m_save_as_action->setEnabled (have_tabs); + m_close_action->setEnabled (have_tabs); + m_close_all_action->setEnabled (have_tabs); + m_close_others_action->setEnabled (have_tabs && m_tab_widget->count () > 1); + } -// empty_script determines whether we have to create an empty script -// 1. At startup, when the editor has to be (really) visible -// (Here we can not use the visibility changed signal) -// 2. When the editor becomes visible when octave is running -void -file_editor::empty_script (bool startup, bool visible) -{ - QSettings *settings = resource_manager::get_settings (); - if (settings->value ("useCustomFileEditor",false).toBool ()) - return; // do not open an empty script in the external editor + // empty_script determines whether we have to create an empty script + // 1. At startup, when the editor has to be (really) visible + // (Here we can not use the visibility changed signal) + // 2. When the editor becomes visible when octave is running + void file_editor::empty_script (bool startup, bool visible) + { + QSettings *settings = resource_manager::get_settings (); + if (settings->value ("useCustomFileEditor",false).toBool ()) + return; // do not open an empty script in the external editor - bool real_visible; + bool real_visible; - if (startup) - real_visible = isVisible (); - else - real_visible = visible; + if (startup) + real_visible = isVisible (); + else + real_visible = visible; - if (! real_visible || m_tab_widget->count () > 0) - return; + if (! real_visible || m_tab_widget->count () > 0) + return; - if (startup && ! isFloating ()) - { - // check is editor is really visible or hidden between tabbed widgets - QList<QTabBar *> tab_list = main_win ()->findChildren<QTabBar *>(); + if (startup && ! isFloating ()) + { + // check is editor is really visible or hidden between tabbed widgets + QList<QTabBar *> tab_list = main_win ()->findChildren<QTabBar *>(); - bool in_tab = false; - int i = 0; - while ((i < tab_list.count ()) && (! in_tab)) - { - QTabBar *tab = tab_list.at (i); - i++; + bool in_tab = false; + int i = 0; + while ((i < tab_list.count ()) && (! in_tab)) + { + QTabBar *tab = tab_list.at (i); + i++; - int j = 0; - while ((j < tab->count ()) && (! in_tab)) - { - // check all tabs for the editor - if (tab->tabText (j) == windowTitle ()) - { - // editor is in this tab widget - in_tab = true; - int top = tab->currentIndex (); - if (top > -1 && tab->tabText (top) == windowTitle ()) - real_visible = true; // and is the current tab - else - return; // not current tab -> not visible - } - j++; - } - } - } + int j = 0; + while ((j < tab->count ()) && (! in_tab)) + { + // check all tabs for the editor + if (tab->tabText (j) == windowTitle ()) + { + // editor is in this tab widget + in_tab = true; + int top = tab->currentIndex (); + if (top > -1 && tab->tabText (top) == windowTitle ()) + real_visible = true; // and is the current tab + else + return; // not current tab -> not visible + } + j++; + } + } + } - request_new_file (""); -} + request_new_file (""); + } -void -file_editor::restore_session (QSettings *settings) -{ - //restore previous session - if (! settings->value ("editor/restoreSession", true).toBool ()) - return; + void file_editor::restore_session (QSettings *settings) + { + //restore previous session + if (! settings->value ("editor/restoreSession", true).toBool ()) + return; - // get the data from the settings file - QStringList sessionFileNames = settings->value ("editor/savedSessionTabs", - QStringList ()).toStringList (); - QStringList session_encodings = settings->value ("editor/saved_session_encodings", - QStringList ()).toStringList (); - QStringList session_index = settings->value ("editor/saved_session_tab_index", - QStringList ()).toStringList (); + // get the data from the settings file + QStringList sessionFileNames + = settings->value ("editor/savedSessionTabs", + QStringList ()).toStringList (); - // fill a list of the struct and sort it (depending on index) - QList<session_data> s_data; + QStringList session_encodings + = settings->value ("editor/saved_session_encodings", + QStringList ()).toStringList (); - bool do_encoding = (session_encodings.count () == sessionFileNames.count ()); - bool do_index = (session_index.count () == sessionFileNames.count ()); + QStringList session_index + = settings->value ("editor/saved_session_tab_index", + QStringList ()).toStringList (); - for (int n = 0; n < sessionFileNames.count (); ++n) - { - QFileInfo file = QFileInfo (sessionFileNames.at (n)); - if (! file.exists ()) - continue; + // fill a list of the struct and sort it (depending on index) + QList<session_data> s_data; + + bool do_encoding = (session_encodings.count () == sessionFileNames.count ()); + bool do_index = (session_index.count () == sessionFileNames.count ()); - session_data item = { QString (), sessionFileNames.at (n), QString ()}; - if (do_index) - item.index = session_index.at (n); - if (do_encoding) - item.encoding = session_encodings.at (n); + for (int n = 0; n < sessionFileNames.count (); ++n) + { + QFileInfo file = QFileInfo (sessionFileNames.at (n)); + if (! file.exists ()) + continue; - s_data << item; - } - - qSort (s_data); + session_data item = { QString (), sessionFileNames.at (n), QString ()}; + if (do_index) + item.index = session_index.at (n); + if (do_encoding) + item.encoding = session_encodings.at (n); - // finally open the file with the desired encoding in the desired order - for (int n = 0; n < s_data.count (); ++n) - request_open_file (s_data.at (n).file_name, s_data.at (n).encoding); -} + s_data << item; + } + + qSort (s_data); -void -file_editor::focus (void) -{ - if (m_no_focus) - return; // No focus for the editor if external open/close request + // finally open the file with the desired encoding in the desired order + for (int n = 0; n < s_data.count (); ++n) + request_open_file (s_data.at (n).file_name, s_data.at (n).encoding); + } - octave_dock_widget::focus (); + void file_editor::focus (void) + { + if (m_no_focus) + return; // No focus for the editor if external open/close request - // set focus to current tab - QWidget *fileEditorTab = m_tab_widget->currentWidget (); - if (fileEditorTab) - emit fetab_set_focus (fileEditorTab); -} + octave_dock_widget::focus (); -void -file_editor::set_focus (QWidget *fet) -{ - octave_dock_widget::focus (); + // set focus to current tab + QWidget *fileEditorTab = m_tab_widget->currentWidget (); + if (fileEditorTab) + emit fetab_set_focus (fileEditorTab); + } - // set focus to desired tab - if (fet) - m_tab_widget->setCurrentWidget (fet); -} + void file_editor::set_focus (QWidget *fet) + { + octave_dock_widget::focus (); -// function enabling/disabling the menu accelerators depending on the -// focus of the editor -void -file_editor::enable_menu_shortcuts (bool enable) -{ - QHash<QMenu*, QStringList>::const_iterator i = m_hash_menu_text.constBegin (); + // set focus to desired tab + if (fet) + m_tab_widget->setCurrentWidget (fet); + } - while (i != m_hash_menu_text.constEnd ()) - { - i.key ()->setTitle (i.value ().at (! enable)); - ++i; - } + // function enabling/disabling the menu accelerators depending on the + // focus of the editor + void file_editor::enable_menu_shortcuts (bool enable) + { + QHash<QMenu*, QStringList>::const_iterator i = m_hash_menu_text.constBegin (); + + while (i != m_hash_menu_text.constEnd ()) + { + i.key ()->setTitle (i.value ().at (! enable)); + ++i; + } - // when editor loses focus, enable the actions, which are always active - // in the main window due to missing info on selected text and undo actions - if (! enable && m_copy_action && m_undo_action) - { - m_copy_action->setEnabled (true); - m_undo_action->setEnabled (true); - } -} + // when editor loses focus, enable the actions, which are always active + // in the main window due to missing info on selected text and undo actions + if (! enable && m_copy_action && m_undo_action) + { + m_copy_action->setEnabled (true); + m_undo_action->setEnabled (true); + } + } -bool -file_editor::check_closing (void) -{ - // When the application or the editor is closing and the user wants to close - // all files in the latter case all editor tabs are checked whether - // they need to be saved. During these ckecked the tabs are not closed - // since the user might cancel closing octave during one of these saving - // dialogs. Therefore, saving the session for restoring at next start - // is not done before the application is definitely closing - - // Have all file editor tabs signal what their filenames are. - m_editor_tab_map.clear (); - emit fetab_file_name_query (nullptr); - - // Save all tabs with confirmation. - file_editor_tab::reset_cancel (); - emit fetab_check_modified_file (); + bool file_editor::check_closing (void) + { + // When the application or the editor is closing and the user wants to close + // all files in the latter case all editor tabs are checked whether + // they need to be saved. During these ckecked the tabs are not closed + // since the user might cancel closing octave during one of these saving + // dialogs. Therefore, saving the session for restoring at next start + // is not done before the application is definitely closing - // If there was a cancellation, make the already saved/discarded tabs - // recovering from the exit by removing the read-only state and by - // recovering the debugger breakpoints. Finally return false in order to - // cancel closing the application or the editor - if (file_editor_tab::was_cancelled ()) - { - emit fetab_recover_from_exit (); - return false; - } + // Have all file editor tabs signal what their filenames are. + m_editor_tab_map.clear (); + emit fetab_file_name_query (nullptr); + + // Save all tabs with confirmation. + file_editor_tab::reset_cancel (); + emit fetab_check_modified_file (); - // Here, the application or the editor will be closed -> store the session - - // Save open files for restoring in next session; this only is possible - QSettings *settings = resource_manager::get_settings (); + // If there was a cancellation, make the already saved/discarded tabs + // recovering from the exit by removing the read-only state and by + // recovering the debugger breakpoints. Finally return false in order to + // cancel closing the application or the editor + if (file_editor_tab::was_cancelled ()) + { + emit fetab_recover_from_exit (); + return false; + } - // save filenames (even if last session will not be restored next time) - // together with encoding and the tab index - QStringList fetFileNames; - QStringList fet_encodings; - QStringList fet_index; + // Here, the application or the editor will be closed -> store the session + + // Save open files for restoring in next session; this only is possible + QSettings *settings = resource_manager::get_settings (); + + // save filenames (even if last session will not be restored next time) + // together with encoding and the tab index + QStringList fetFileNames; + QStringList fet_encodings; + QStringList fet_index; - // save all open tabs before they are definitely closed - for (editor_tab_map_const_iterator p = m_editor_tab_map.begin (); - p != m_editor_tab_map.end (); p++) - { - QString file_name = p->first; // get file name of tab - if (! file_name.isEmpty ()) // do not append unnamed files - { - fetFileNames.append (file_name); - fet_encodings.append (m_editor_tab_map[file_name].encoding); - QString index; - fet_index.append (index.setNum - (m_tab_widget->indexOf (m_editor_tab_map[file_name].fet_ID))); - } - } - - settings->setValue ("editor/savedSessionTabs", fetFileNames); - settings->setValue ("editor/saved_session_encodings", fet_encodings); - settings->setValue ("editor/saved_session_tab_index", fet_index); - settings->sync (); + // save all open tabs before they are definitely closed + for (editor_tab_map_const_iterator p = m_editor_tab_map.begin (); + p != m_editor_tab_map.end (); p++) + { + QString file_name = p->first; // get file name of tab + if (! file_name.isEmpty ()) // do not append unnamed files + { + fetFileNames.append (file_name); + fet_encodings.append (m_editor_tab_map[file_name].encoding); + QString index; + fet_index.append (index.setNum + (m_tab_widget->indexOf (m_editor_tab_map[file_name].fet_ID))); + } + } - // Finally close all the tabs and return indication that we can exit - // the application or close the editor - for (int i = m_tab_widget->count () - 1; i >= 0; i--) - { - // backwards loop since m_tab_widget->count () changes during the loop - delete m_tab_widget->widget (i); - m_tab_widget->removeTab (i); - } - - return true; -} + settings->setValue ("editor/savedSessionTabs", fetFileNames); + settings->setValue ("editor/saved_session_encodings", fet_encodings); + settings->setValue ("editor/saved_session_tab_index", fet_index); + settings->sync (); -void -file_editor::request_new_file (const QString& commands) -{ - // Custom editor? If yes, we can only call the editor without passing - // some initial contents and even without being sure a new file is opened - if (call_custom_editor ()) - return; + // Finally close all the tabs and return indication that we can exit + // the application or close the editor + for (int i = m_tab_widget->count () - 1; i >= 0; i--) + { + // backwards loop since m_tab_widget->count () changes during the loop + delete m_tab_widget->widget (i); + m_tab_widget->removeTab (i); + } - // New file isn't a file_editor_tab function since the file - // editor tab has yet to be created and there is no object to - // pass a signal to. Hence, functionality is here. + return true; + } + + void file_editor::request_new_file (const QString& commands) + { + // Custom editor? If yes, we can only call the editor without passing + // some initial contents and even without being sure a new file is opened + if (call_custom_editor ()) + return; - file_editor_tab *fileEditorTab = new file_editor_tab (m_ced); - if (fileEditorTab) - { - add_file_editor_tab (fileEditorTab, ""); // new tab with empty title - fileEditorTab->new_file (commands); // title is updated here - focus (); // focus editor and new tab - } -} + // New file isn't a file_editor_tab function since the file + // editor tab has yet to be created and there is no object to + // pass a signal to. Hence, functionality is here. -void -file_editor::request_close_file (bool) -{ - file_editor_tab *editor_tab - = static_cast<file_editor_tab *> (m_tab_widget->currentWidget ()); - editor_tab->conditional_close (); -} + file_editor_tab *fileEditorTab = new file_editor_tab (m_ced); + if (fileEditorTab) + { + add_file_editor_tab (fileEditorTab, ""); // new tab with empty title + fileEditorTab->new_file (commands); // title is updated here + focus (); // focus editor and new tab + } + } -void -file_editor::request_close_all_files (bool) -{ - file_editor_tab *editor_tab; + void file_editor::request_close_file (bool) + { + file_editor_tab *editor_tab + = static_cast<file_editor_tab *> (m_tab_widget->currentWidget ()); + editor_tab->conditional_close (); + } - // loop over all tabs starting from last one otherwise deletion changes index - for (int index = m_tab_widget->count ()-1; index >= 0; index--) - { - editor_tab = static_cast<file_editor_tab *> (m_tab_widget->widget (index)); - editor_tab->conditional_close (); - } -} + void file_editor::request_close_all_files (bool) + { + file_editor_tab *editor_tab; -void -file_editor::request_close_other_files (bool) -{ - file_editor_tab *editor_tab; - QWidget *tabID = m_tab_widget->currentWidget (); + // loop over all tabs starting from last one otherwise deletion changes index + for (int index = m_tab_widget->count ()-1; index >= 0; index--) + { + editor_tab = static_cast<file_editor_tab *> (m_tab_widget->widget (index)); + editor_tab->conditional_close (); + } + } - // loop over all tabs starting from last one otherwise deletion changes index - for (int index = m_tab_widget->count ()-1; index >= 0; index--) - { - if (tabID != m_tab_widget->widget (index)) - { - editor_tab - = static_cast<file_editor_tab *> (m_tab_widget->widget (index)); - editor_tab->conditional_close (); - } - } -} + void file_editor::request_close_other_files (bool) + { + file_editor_tab *editor_tab; + QWidget *tabID = m_tab_widget->currentWidget (); + + // loop over all tabs starting from last one otherwise deletion changes index + for (int index = m_tab_widget->count ()-1; index >= 0; index--) + { + if (tabID != m_tab_widget->widget (index)) + { + editor_tab + = static_cast<file_editor_tab *> (m_tab_widget->widget (index)); + editor_tab->conditional_close (); + } + } + } -// open a file from the mru list -void -file_editor::request_mru_open_file (QAction *action) -{ - if (action) - { - request_open_file (action->data ().toStringList ().at (0), - action->data ().toStringList ().at (1)); - } -} + // open a file from the mru list + void file_editor::request_mru_open_file (QAction *action) + { + if (action) + { + request_open_file (action->data ().toStringList ().at (0), + action->data ().toStringList ().at (1)); + } + } -void -file_editor::request_print_file (bool) -{ - emit fetab_print_file (m_tab_widget->currentWidget ()); -} + void file_editor::request_print_file (bool) + { + emit fetab_print_file (m_tab_widget->currentWidget ()); + } -void -file_editor::request_redo (bool) -{ - emit fetab_scintilla_command (m_tab_widget->currentWidget (), - QsciScintillaBase::SCI_REDO); -} - -void -file_editor::request_cut (bool) -{ - emit fetab_scintilla_command (m_tab_widget->currentWidget (), - QsciScintillaBase::SCI_CUT); -} + void file_editor::request_redo (bool) + { + emit fetab_scintilla_command (m_tab_widget->currentWidget (), + QsciScintillaBase::SCI_REDO); + } -void -file_editor::request_context_help (bool) -{ - emit fetab_context_help (m_tab_widget->currentWidget (), false); -} + void file_editor::request_cut (bool) + { + emit fetab_scintilla_command (m_tab_widget->currentWidget (), + QsciScintillaBase::SCI_CUT); + } -void -file_editor::request_context_doc (bool) -{ - emit fetab_context_help (m_tab_widget->currentWidget (), true); -} - -void -file_editor::request_context_edit (bool) -{ - emit fetab_context_edit (m_tab_widget->currentWidget ()); -} + void file_editor::request_context_help (bool) + { + emit fetab_context_help (m_tab_widget->currentWidget (), false); + } -void -file_editor::request_save_file (bool) -{ - emit fetab_save_file (m_tab_widget->currentWidget ()); -} + void file_editor::request_context_doc (bool) + { + emit fetab_context_help (m_tab_widget->currentWidget (), true); + } + + void file_editor::request_context_edit (bool) + { + emit fetab_context_edit (m_tab_widget->currentWidget ()); + } -void -file_editor::request_save_file_as (bool) -{ - emit fetab_save_file_as (m_tab_widget->currentWidget ()); -} + void file_editor::request_save_file (bool) + { + emit fetab_save_file (m_tab_widget->currentWidget ()); + } -void -file_editor::request_run_file (bool) -{ - emit fetab_run_file (m_tab_widget->currentWidget ()); -} + void file_editor::request_save_file_as (bool) + { + emit fetab_save_file_as (m_tab_widget->currentWidget ()); + } -void -file_editor::request_context_run (bool) -{ - emit fetab_context_run (m_tab_widget->currentWidget ()); -} + void file_editor::request_run_file (bool) + { + emit fetab_run_file (m_tab_widget->currentWidget ()); + } -void -file_editor::request_toggle_bookmark (bool) -{ - emit fetab_toggle_bookmark (m_tab_widget->currentWidget ()); -} + void file_editor::request_context_run (bool) + { + emit fetab_context_run (m_tab_widget->currentWidget ()); + } -void -file_editor::request_next_bookmark (bool) -{ - emit fetab_next_bookmark (m_tab_widget->currentWidget ()); -} + void file_editor::request_toggle_bookmark (bool) + { + emit fetab_toggle_bookmark (m_tab_widget->currentWidget ()); + } -void -file_editor::request_previous_bookmark (bool) -{ - emit fetab_previous_bookmark (m_tab_widget->currentWidget ()); -} + void file_editor::request_next_bookmark (bool) + { + emit fetab_next_bookmark (m_tab_widget->currentWidget ()); + } + + void file_editor::request_previous_bookmark (bool) + { + emit fetab_previous_bookmark (m_tab_widget->currentWidget ()); + } -void -file_editor::request_remove_bookmark (bool) -{ - emit fetab_remove_bookmark (m_tab_widget->currentWidget ()); -} + void file_editor::request_remove_bookmark (bool) + { + emit fetab_remove_bookmark (m_tab_widget->currentWidget ()); + } -void -file_editor::request_move_match_brace (bool) -{ - emit fetab_move_match_brace (m_tab_widget->currentWidget (), false); -} + void file_editor::request_move_match_brace (bool) + { + emit fetab_move_match_brace (m_tab_widget->currentWidget (), false); + } -void -file_editor::request_sel_match_brace (bool) -{ - emit fetab_move_match_brace (m_tab_widget->currentWidget (), true); -} + void file_editor::request_sel_match_brace (bool) + { + emit fetab_move_match_brace (m_tab_widget->currentWidget (), true); + } -// FIXME: What should this do with conditional breakpoints? -void -file_editor::request_toggle_breakpoint (bool) -{ - emit fetab_toggle_breakpoint (m_tab_widget->currentWidget ()); -} + // FIXME: What should this do with conditional breakpoints? + void file_editor::request_toggle_breakpoint (bool) + { + emit fetab_toggle_breakpoint (m_tab_widget->currentWidget ()); + } + + void file_editor::request_next_breakpoint (bool) + { + emit fetab_next_breakpoint (m_tab_widget->currentWidget ()); + } -void -file_editor::request_next_breakpoint (bool) -{ - emit fetab_next_breakpoint (m_tab_widget->currentWidget ()); -} + void file_editor::request_previous_breakpoint (bool) + { + emit fetab_previous_breakpoint (m_tab_widget->currentWidget ()); + } -void -file_editor::request_previous_breakpoint (bool) -{ - emit fetab_previous_breakpoint (m_tab_widget->currentWidget ()); -} + void file_editor::request_remove_breakpoint (bool) + { + emit fetab_remove_all_breakpoints (m_tab_widget->currentWidget ()); + } -void -file_editor::request_remove_breakpoint (bool) -{ - emit fetab_remove_all_breakpoints (m_tab_widget->currentWidget ()); -} + // slots for Edit->Commands actions + void file_editor::request_delete_start_word (bool) + { + emit fetab_scintilla_command (m_tab_widget->currentWidget (), + QsciScintillaBase::SCI_DELWORDLEFT); + } -// slots for Edit->Commands actions -void -file_editor::request_delete_start_word (bool) -{ - emit fetab_scintilla_command (m_tab_widget->currentWidget (), - QsciScintillaBase::SCI_DELWORDLEFT); -} + void file_editor::request_delete_end_word (bool) + { + emit fetab_scintilla_command (m_tab_widget->currentWidget (), + QsciScintillaBase::SCI_DELWORDRIGHT); + } -void -file_editor::request_delete_end_word (bool) -{ - emit fetab_scintilla_command (m_tab_widget->currentWidget (), - QsciScintillaBase::SCI_DELWORDRIGHT); -} + void file_editor::request_delete_start_line (bool) + { + emit fetab_scintilla_command (m_tab_widget->currentWidget (), + QsciScintillaBase::SCI_DELLINELEFT); + } + + void file_editor::request_delete_end_line (bool) + { + emit fetab_scintilla_command (m_tab_widget->currentWidget (), + QsciScintillaBase::SCI_DELLINERIGHT); + } -void -file_editor::request_delete_start_line (bool) -{ - emit fetab_scintilla_command (m_tab_widget->currentWidget (), - QsciScintillaBase::SCI_DELLINELEFT); -} + void file_editor::request_delete_line (bool) + { + emit fetab_scintilla_command (m_tab_widget->currentWidget (), + QsciScintillaBase::SCI_LINEDELETE); + } -void -file_editor::request_delete_end_line (bool) -{ - emit fetab_scintilla_command (m_tab_widget->currentWidget (), - QsciScintillaBase::SCI_DELLINERIGHT); -} + void file_editor::request_copy_line (bool) + { + emit fetab_scintilla_command (m_tab_widget->currentWidget (), + QsciScintillaBase::SCI_LINECOPY); + } -void -file_editor::request_delete_line (bool) -{ - emit fetab_scintilla_command (m_tab_widget->currentWidget (), - QsciScintillaBase::SCI_LINEDELETE); -} + void file_editor::request_cut_line (bool) + { + emit fetab_scintilla_command (m_tab_widget->currentWidget (), + QsciScintillaBase::SCI_LINECUT); + } -void -file_editor::request_copy_line (bool) -{ - emit fetab_scintilla_command (m_tab_widget->currentWidget (), - QsciScintillaBase::SCI_LINECOPY); -} + void file_editor::request_duplicate_selection (bool) + { + emit fetab_scintilla_command (m_tab_widget->currentWidget (), + QsciScintillaBase::SCI_SELECTIONDUPLICATE); + } -void -file_editor::request_cut_line (bool) -{ - emit fetab_scintilla_command (m_tab_widget->currentWidget (), - QsciScintillaBase::SCI_LINECUT); -} + void file_editor::request_transpose_line (bool) + { + emit fetab_scintilla_command (m_tab_widget->currentWidget (), + QsciScintillaBase::SCI_LINETRANSPOSE); + } + + void file_editor::request_comment_selected_text (bool) + { + emit fetab_comment_selected_text (m_tab_widget->currentWidget (), false); + } -void -file_editor::request_duplicate_selection (bool) -{ - emit fetab_scintilla_command (m_tab_widget->currentWidget (), - QsciScintillaBase::SCI_SELECTIONDUPLICATE); -} + void file_editor::request_uncomment_selected_text (bool) + { + emit fetab_uncomment_selected_text (m_tab_widget->currentWidget ()); + } -void -file_editor::request_transpose_line (bool) -{ - emit fetab_scintilla_command (m_tab_widget->currentWidget (), - QsciScintillaBase::SCI_LINETRANSPOSE); -} + void file_editor::request_comment_var_selected_text (bool) + { + emit fetab_comment_selected_text (m_tab_widget->currentWidget (), true); + } -void -file_editor::request_comment_selected_text (bool) -{ - emit fetab_comment_selected_text (m_tab_widget->currentWidget (), false); -} + // slots for Edit->Format actions + void file_editor::request_upper_case (bool) + { + emit fetab_scintilla_command (m_tab_widget->currentWidget (), + QsciScintillaBase::SCI_UPPERCASE); + } -void -file_editor::request_uncomment_selected_text (bool) -{ - emit fetab_uncomment_selected_text (m_tab_widget->currentWidget ()); -} + void file_editor::request_lower_case (bool) + { + emit fetab_scintilla_command (m_tab_widget->currentWidget (), + QsciScintillaBase::SCI_LOWERCASE); + } -void -file_editor::request_comment_var_selected_text (bool) -{ - emit fetab_comment_selected_text (m_tab_widget->currentWidget (), true); -} + void file_editor::request_indent_selected_text (bool) + { + emit fetab_indent_selected_text (m_tab_widget->currentWidget ()); + } + + void file_editor::request_unindent_selected_text (bool) + { + emit fetab_unindent_selected_text (m_tab_widget->currentWidget ()); + } -// slots for Edit->Format actions -void -file_editor::request_upper_case (bool) -{ - emit fetab_scintilla_command (m_tab_widget->currentWidget (), - QsciScintillaBase::SCI_UPPERCASE); -} -void -file_editor::request_lower_case (bool) -{ - emit fetab_scintilla_command (m_tab_widget->currentWidget (), - QsciScintillaBase::SCI_LOWERCASE); -} -void -file_editor::request_indent_selected_text (bool) -{ - emit fetab_indent_selected_text (m_tab_widget->currentWidget ()); -} + void file_editor::request_smart_indent_line_or_selected_text () + { + emit fetab_smart_indent_line_or_selected_text (m_tab_widget->currentWidget ()); + } -void -file_editor::request_unindent_selected_text (bool) -{ - emit fetab_unindent_selected_text (m_tab_widget->currentWidget ()); -} + void file_editor::request_conv_eol_windows (bool) + { + emit fetab_convert_eol (m_tab_widget->currentWidget (), + QsciScintilla::EolWindows); + } + void + file_editor::request_conv_eol_unix (bool) + { + emit fetab_convert_eol (m_tab_widget->currentWidget (), + QsciScintilla::EolUnix); + } + + void file_editor::request_conv_eol_mac (bool) + { + emit fetab_convert_eol (m_tab_widget->currentWidget (), + QsciScintilla::EolMac); + } -void -file_editor::request_smart_indent_line_or_selected_text () -{ - emit fetab_smart_indent_line_or_selected_text (m_tab_widget->currentWidget ()); -} + void file_editor::request_find (bool) + { + emit fetab_find (m_tab_widget->currentWidget (), m_fetab_actions); + } + + void file_editor::request_find_next (bool) + { + emit fetab_find_next (m_tab_widget->currentWidget ()); + } -void -file_editor::request_conv_eol_windows (bool) -{ - emit fetab_convert_eol (m_tab_widget->currentWidget (), - QsciScintilla::EolWindows); -} -void -file_editor::request_conv_eol_unix (bool) -{ - emit fetab_convert_eol (m_tab_widget->currentWidget (), - QsciScintilla::EolUnix); -} -void -file_editor::request_conv_eol_mac (bool) -{ - emit fetab_convert_eol (m_tab_widget->currentWidget (), - QsciScintilla::EolMac); -} + void file_editor::request_find_previous (bool) + { + emit fetab_find_previous (m_tab_widget->currentWidget ()); + } -void -file_editor::request_find (bool) -{ - emit fetab_find (m_tab_widget->currentWidget (), m_fetab_actions); -} + void file_editor::request_goto_line (bool) + { + emit fetab_goto_line (m_tab_widget->currentWidget ()); + } + + void file_editor::request_completion (bool) + { + emit fetab_completion (m_tab_widget->currentWidget ()); + } -void -file_editor::request_find_next (bool) -{ - emit fetab_find_next (m_tab_widget->currentWidget ()); -} - -void -file_editor::request_find_previous (bool) -{ - emit fetab_find_previous (m_tab_widget->currentWidget ()); -} - -void -file_editor::request_goto_line (bool) -{ - emit fetab_goto_line (m_tab_widget->currentWidget ()); -} + void file_editor::handle_file_name_changed (const QString& fname, + const QString& tip) + { + QObject *fileEditorTab = sender (); + if (fileEditorTab) + { + for (int i = 0; i < m_tab_widget->count (); i++) + { + if (m_tab_widget->widget (i) == fileEditorTab) + { + m_tab_widget->setTabText (i, fname); + m_tab_widget->setTabToolTip (i, tip); + } + } + } + } -void -file_editor::request_completion (bool) -{ - emit fetab_completion (m_tab_widget->currentWidget ()); -} + void file_editor::handle_tab_close_request (int index) + { + file_editor_tab *editor_tab + = static_cast<file_editor_tab *> (m_tab_widget->widget (index)); + editor_tab->conditional_close (); + } -void -file_editor::handle_file_name_changed (const QString& fname, - const QString& tip) -{ - QObject *fileEditorTab = sender (); - if (fileEditorTab) - { - for (int i = 0; i < m_tab_widget->count (); i++) - { - if (m_tab_widget->widget (i) == fileEditorTab) - { - m_tab_widget->setTabText (i, fname); - m_tab_widget->setTabToolTip (i, tip); - } - } - } -} + void + file_editor::handle_tab_remove_request (void) + { + QObject *fileEditorTab = sender (); + if (fileEditorTab) + { + for (int i = 0; i < m_tab_widget->count (); i++) + { + if (m_tab_widget->widget (i) == fileEditorTab) + { + m_tab_widget->removeTab (i); + // Deleting sender is dodgy, but works because the signal + // is the last item in the sender's routines. + delete fileEditorTab; + break; + } + } + } + check_actions (); -void -file_editor::handle_tab_close_request (int index) -{ - file_editor_tab *editor_tab - = static_cast<file_editor_tab *> (m_tab_widget->widget (index)); - editor_tab->conditional_close (); -} + focus (); // focus stays in editor when tab is closed + + } + + void file_editor::handle_add_filename_to_list (const QString& fileName, + const QString& encoding, QWidget *ID) + { + // Should we allow multiple tabs for a single file? + m_editor_tab_map[fileName].fet_ID = ID; + m_editor_tab_map[fileName].encoding = encoding; + } -void -file_editor::handle_tab_remove_request (void) -{ - QObject *fileEditorTab = sender (); - if (fileEditorTab) - { - for (int i = 0; i < m_tab_widget->count (); i++) - { - if (m_tab_widget->widget (i) == fileEditorTab) - { - m_tab_widget->removeTab (i); - // Deleting sender is dodgy, but works because the signal - // is the last item in the sender's routines. - delete fileEditorTab; - break; - } - } - } - check_actions (); + // context menu of edit area + void file_editor::active_tab_changed (int index) + { + emit fetab_change_request (m_tab_widget->widget (index)); + } - focus (); // focus stays in editor when tab is closed - -} + void file_editor::handle_editor_state_changed (bool copy_available, + bool is_octave_file) + { + // In case there is some scenario where traffic could be coming from + // all the file editor tabs, just process info from the current active tab. + if (sender () == m_tab_widget->currentWidget ()) + { + if (m_copy_action) + m_copy_action->setEnabled (copy_available); + m_cut_action->setEnabled (copy_available); + m_run_selection_action->setEnabled (copy_available); + m_run_action->setEnabled (is_octave_file); -void -file_editor::handle_add_filename_to_list (const QString& fileName, - const QString& encoding, QWidget *ID) -{ - // Should we allow multiple tabs for a single file? - m_editor_tab_map[fileName].fet_ID = ID; - m_editor_tab_map[fileName].encoding = encoding; -} + setFocusProxy (m_tab_widget->currentWidget ()); + } + } -// context menu of edit area -void -file_editor::active_tab_changed (int index) -{ - emit fetab_change_request (m_tab_widget->widget (index)); -} + void file_editor::handle_mru_add_file (const QString& file_name, + const QString& encoding) + { + int index; + while ((index = m_mru_files.indexOf (file_name)) >= 0) + { + m_mru_files.removeAt (index); + m_mru_files_encodings.removeAt (index); + } + + m_mru_files.prepend (file_name); + m_mru_files_encodings.prepend (encoding); -void -file_editor::handle_editor_state_changed (bool copy_available, - bool is_octave_file) -{ - // In case there is some scenario where traffic could be coming from - // all the file editor tabs, just process info from the current active tab. - if (sender () == m_tab_widget->currentWidget ()) - { - if (m_copy_action) - m_copy_action->setEnabled (copy_available); - m_cut_action->setEnabled (copy_available); - m_run_selection_action->setEnabled (copy_available); - m_run_action->setEnabled (is_octave_file); + mru_menu_update (); + } + + void file_editor::check_conflict_save (const QString& saveFileName, + bool remove_on_success) + { + // Check whether this file is already open in the editor. + QWidget *tab = find_tab_widget (saveFileName); - setFocusProxy (m_tab_widget->currentWidget ()); - } -} + if (tab) + { + // Note: to overwrite the contents of some other file editor tab + // with the same name requires identifying which file editor tab + // that is (not too difficult) then close that tab. Of course, + // that could trigger another dialog box if the file editor tab + // with the same name has modifications in it. This could become + // somewhat confusing to the user. For now, opt to do nothing. -void -file_editor::handle_mru_add_file (const QString& file_name, - const QString& encoding) -{ - int index; - while ((index = m_mru_files.indexOf (file_name)) >= 0) - { - m_mru_files.removeAt (index); - m_mru_files_encodings.removeAt (index); - } + // Create a NonModal message about error. + QMessageBox *msgBox + = new QMessageBox (QMessageBox::Critical, tr ("Octave Editor"), + tr ("File not saved! A file with the selected name\n%1\n" + "is already open in the editor"). + arg (saveFileName), + QMessageBox::Ok, nullptr); - m_mru_files.prepend (file_name); - m_mru_files_encodings.prepend (encoding); + msgBox->setWindowModality (Qt::NonModal); + msgBox->setAttribute (Qt::WA_DeleteOnClose); + msgBox->show (); - mru_menu_update (); -} + return; + } -void -file_editor::check_conflict_save (const QString& saveFileName, - bool remove_on_success) -{ - // Check whether this file is already open in the editor. - QWidget *tab = find_tab_widget (saveFileName); + QObject *saveFileObject = sender (); + QWidget *saveFileWidget = nullptr; - if (tab) - { - // Note: to overwrite the contents of some other file editor tab - // with the same name requires identifying which file editor tab - // that is (not too difficult) then close that tab. Of course, - // that could trigger another dialog box if the file editor tab - // with the same name has modifications in it. This could become - // somewhat confusing to the user. For now, opt to do nothing. - - // Create a NonModal message about error. - QMessageBox *msgBox - = new QMessageBox (QMessageBox::Critical, tr ("Octave Editor"), - tr ("File not saved! A file with the selected name\n%1\n" - "is already open in the editor"). - arg (saveFileName), - QMessageBox::Ok, nullptr); + for (int i = 0; i < m_tab_widget->count (); i++) + { + if (m_tab_widget->widget (i) == saveFileObject) + { + saveFileWidget = m_tab_widget->widget (i); + break; + } + } + if (! saveFileWidget) + { + // Create a NonModal message about error. + QMessageBox *msgBox + = new QMessageBox (QMessageBox::Critical, tr ("Octave Editor"), + tr ("The associated file editor tab has disappeared."), + QMessageBox::Ok, nullptr); - msgBox->setWindowModality (Qt::NonModal); - msgBox->setAttribute (Qt::WA_DeleteOnClose); - msgBox->show (); + msgBox->setWindowModality (Qt::NonModal); + msgBox->setAttribute (Qt::WA_DeleteOnClose); + msgBox->show (); + + return; + } - return; - } + // Can save without conflict, have the file editor tab do so. + emit fetab_save_file (saveFileWidget, saveFileName, remove_on_success); + } - QObject *saveFileObject = sender (); - QWidget *saveFileWidget = nullptr; + void file_editor::handle_insert_debugger_pointer_request (const QString& file, + int line) + { + request_open_file (file, QString (), line, true); // default encoding + } - for (int i = 0; i < m_tab_widget->count (); i++) - { - if (m_tab_widget->widget (i) == saveFileObject) - { - saveFileWidget = m_tab_widget->widget (i); - break; - } - } - if (! saveFileWidget) - { - // Create a NonModal message about error. - QMessageBox *msgBox - = new QMessageBox (QMessageBox::Critical, tr ("Octave Editor"), - tr ("The associated file editor tab has disappeared."), - QMessageBox::Ok, nullptr); + void file_editor::handle_delete_debugger_pointer_request (const QString& file, + int line) + { + if (! file.isEmpty ()) + { + // Check whether this file is already open in the editor. + QWidget *tab = find_tab_widget (file); - msgBox->setWindowModality (Qt::NonModal); - msgBox->setAttribute (Qt::WA_DeleteOnClose); - msgBox->show (); - - return; - } + if (tab) + { + m_tab_widget->setCurrentWidget (tab); - // Can save without conflict, have the file editor tab do so. - emit fetab_save_file (saveFileWidget, saveFileName, remove_on_success); -} + if (line > 0) + emit fetab_delete_debugger_pointer (tab, line); -void -file_editor::handle_insert_debugger_pointer_request (const QString& file, - int line) -{ - request_open_file (file, QString (), line, true); // default encoding -} + emit fetab_set_focus (tab); + } + } + } -void -file_editor::handle_delete_debugger_pointer_request (const QString& file, - int line) -{ - if (! file.isEmpty ()) - { - // Check whether this file is already open in the editor. - QWidget *tab = find_tab_widget (file); + void file_editor::handle_update_breakpoint_marker_request (bool insert, + const QString& file, + int line, + const QString& cond) + { + request_open_file (file, QString (), line, false, true, insert, cond); + } - if (tab) - { - m_tab_widget->setCurrentWidget (tab); + void file_editor::handle_edit_file_request (const QString& file) + { + request_open_file (file); + } - if (line > 0) - emit fetab_delete_debugger_pointer (tab, line); - - emit fetab_set_focus (tab); - } - } -} + // Slot used for signals indicating that a file was changed/rename or + // is going to be deleted/renamed + void file_editor::handle_file_remove (const QString& old_name, + const QString& new_name) + { + // Clear old lsit of files to reload + m_tmp_closed_files.clear (); -void -file_editor::handle_update_breakpoint_marker_request (bool insert, - const QString& file, - int line, - const QString& cond) -{ - request_open_file (file, QString (), line, false, true, insert, cond); -} + // Check if old name is a file or directory + QFileInfo old (old_name); + if (old.isDir ()) + { + // Call the function which handles directories and return + handle_dir_remove (old_name, new_name); + return; + } -void -file_editor::handle_edit_file_request (const QString& file) -{ - request_open_file (file); -} + // Is old file open? + file_editor_tab *editor_tab + = static_cast<file_editor_tab *> (find_tab_widget (old_name)); -// Slot used for signals indicating that a file was changed/rename or -// is going to be deleted/renamed -void -file_editor::handle_file_remove (const QString& old_name, - const QString& new_name) -{ - // Clear old lsit of files to reload - m_tmp_closed_files.clear (); + if (editor_tab) + { + // Yes, close it silently + m_no_focus = true; // Remember for not focussing editor + editor_tab->file_has_changed (QString (), true); // Close the tab + m_no_focus = false; // Back to normal + + m_tmp_closed_files << old_name; // for reloading if error removing - // Check if old name is a file or directory - QFileInfo old (old_name); - if (old.isDir ()) - { - // Call the function which handles directories and return - handle_dir_remove (old_name, new_name); - return; - } + if (! new_name.isEmpty ()) + m_tmp_closed_files << new_name; // store new name + else + m_tmp_closed_files << ""; // no new name, just removing this file - // Is old file open? - file_editor_tab *editor_tab - = static_cast<file_editor_tab *> (find_tab_widget (old_name)); - - if (editor_tab) - { - // Yes, close it silently - m_no_focus = true; // Remember for not focussing editor - editor_tab->file_has_changed (QString (), true); // Close the tab - m_no_focus = false; // Back to normal - - m_tmp_closed_files << old_name; // for reloading if error removing + // Get and store the related encoding + for (editor_tab_map_const_iterator p = m_editor_tab_map.begin (); + p != m_editor_tab_map.end (); p++) + { + if (editor_tab == p->second.fet_ID) + { + m_tmp_closed_files << p->second.encoding; + break; + } + } + } + } - if (! new_name.isEmpty ()) - m_tmp_closed_files << new_name; // store new name - else - m_tmp_closed_files << ""; // no new name, just removing this file + // Slot for signal indicating that a file was renamed + void file_editor::handle_file_renamed (bool load_new) + { + m_no_focus = true; // Remember for not focussing editor + for (int i = 0; i < m_tmp_closed_files.count (); i = i + 3) + { + if (! m_tmp_closed_files.at (i + load_new).isEmpty ()) + request_open_file (m_tmp_closed_files.at (i + load_new), + m_tmp_closed_files.at (i+2)); + } + m_no_focus = false; // Back to normal focus + } - // Get and store the related encoding - for (editor_tab_map_const_iterator p = m_editor_tab_map.begin (); - p != m_editor_tab_map.end (); p++) - { - if (editor_tab == p->second.fet_ID) - { - m_tmp_closed_files << p->second.encoding; - break; - } - } - } -} + void file_editor::notice_settings (const QSettings *settings) + { + int icon_size_settings = settings->value ("toolbar_icon_size",0).toInt (); + QStyle *st = style (); + int icon_size = st->pixelMetric (QStyle::PM_ToolBarIconSize); -// Slot for signal indicating that a file was renamed -void -file_editor::handle_file_renamed (bool load_new) -{ - m_no_focus = true; // Remember for not focussing editor - for (int i = 0; i < m_tmp_closed_files.count (); i = i + 3) - { - if (! m_tmp_closed_files.at (i + load_new).isEmpty ()) - request_open_file (m_tmp_closed_files.at (i + load_new), - m_tmp_closed_files.at (i+2)); - } - m_no_focus = false; // Back to normal focus -} + if (icon_size_settings == 1) + icon_size = st->pixelMetric (QStyle::PM_LargeIconSize); + else if (icon_size_settings == -1) + icon_size = st->pixelMetric (QStyle::PM_SmallIconSize); + + m_tool_bar->setIconSize (QSize (icon_size,icon_size)); + + int tab_width_min = settings->value ("editor/notebook_tab_width_min", 160) + .toInt (); + int tab_width_max = settings->value ("editor/notebook_tab_width_max", 300) + .toInt (); -void -file_editor::notice_settings (const QSettings *settings) -{ - int icon_size_settings = settings->value ("toolbar_icon_size",0).toInt (); - QStyle *st = style (); - int icon_size = st->pixelMetric (QStyle::PM_ToolBarIconSize); + if (settings->value ("editor/longWindowTitle", false).toBool ()) + { + QString style_sheet = QString ("QTabBar::tab " + "{min-width: %1px; max-width: %2px;}") + .arg (tab_width_min).arg (tab_width_max); + m_tab_widget->setElideMode (Qt::ElideLeft); + m_tab_widget->setStyleSheet (style_sheet); + } + else + m_tab_widget->setElideMode (Qt::ElideNone); - if (icon_size_settings == 1) - icon_size = st->pixelMetric (QStyle::PM_LargeIconSize); - else if (icon_size_settings == -1) - icon_size = st->pixelMetric (QStyle::PM_SmallIconSize); - - m_tool_bar->setIconSize (QSize (icon_size,icon_size)); - - int tab_width_min = settings->value ("editor/notebook_tab_width_min", 160) - .toInt (); - int tab_width_max = settings->value ("editor/notebook_tab_width_max", 300) - .toInt (); + m_tab_widget->setUsesScrollButtons (true); - if (settings->value ("editor/longWindowTitle", false).toBool ()) - { - QString style_sheet = QString ("QTabBar::tab " - "{min-width: %1px; max-width: %2px;}") - .arg (tab_width_min).arg (tab_width_max); - m_tab_widget->setElideMode (Qt::ElideLeft); - m_tab_widget->setStyleSheet (style_sheet); - } - else - m_tab_widget->setElideMode (Qt::ElideNone); + bool show_it; + show_it = settings->value ("editor/showLineNumbers",true).toBool (); + m_show_linenum_action->setChecked (show_it); + show_it = settings->value ("editor/show_white_space",false).toBool (); + m_show_whitespace_action->setChecked (show_it); + show_it = settings->value ("editor/show_eol_chars",false).toBool (); + m_show_eol_action->setChecked (show_it); + show_it = settings->value ("editor/show_indent_guides",false).toBool (); + m_show_indguide_action->setChecked (show_it); + show_it = settings->value ("editor/long_line_marker",true).toBool (); + m_show_longline_action->setChecked (show_it); - m_tab_widget->setUsesScrollButtons (true); + show_it = settings->value ("editor/show_toolbar",true).toBool (); + m_show_toolbar_action->setChecked (show_it); + m_tool_bar->setVisible (show_it); + show_it = settings->value ("editor/show_edit_status_bar",true).toBool (); + m_show_statusbar_action->setChecked (show_it); + show_it = settings->value ("editor/show_hscroll_bar",true).toBool (); + m_show_hscrollbar_action->setChecked (show_it); - bool show_it; - show_it = settings->value ("editor/showLineNumbers",true).toBool (); - m_show_linenum_action->setChecked (show_it); - show_it = settings->value ("editor/show_white_space",false).toBool (); - m_show_whitespace_action->setChecked (show_it); - show_it = settings->value ("editor/show_eol_chars",false).toBool (); - m_show_eol_action->setChecked (show_it); - show_it = settings->value ("editor/show_indent_guides",false).toBool (); - m_show_indguide_action->setChecked (show_it); - show_it = settings->value ("editor/long_line_marker",true).toBool (); - m_show_longline_action->setChecked (show_it); + set_shortcuts (); + + // Relay signal to file editor tabs. + emit fetab_settings_changed (settings); + } + + void file_editor::set_shortcuts (void) + { + // Shortcuts also available in the main window, as well as the realted + // ahotcuts, are defined in main_window and added to the editor - show_it = settings->value ("editor/show_toolbar",true).toBool (); - m_show_toolbar_action->setChecked (show_it); - m_tool_bar->setVisible (show_it); - show_it = settings->value ("editor/show_edit_status_bar",true).toBool (); - m_show_statusbar_action->setChecked (show_it); - show_it = settings->value ("editor/show_hscroll_bar",true).toBool (); - m_show_hscrollbar_action->setChecked (show_it); - - set_shortcuts (); - - // Relay signal to file editor tabs. - emit fetab_settings_changed (settings); -} + // File menu + shortcut_manager::set_shortcut (m_edit_function_action, "editor_file:edit_function"); + shortcut_manager::set_shortcut (m_save_action, "editor_file:save"); + shortcut_manager::set_shortcut (m_save_as_action, "editor_file:save_as"); + shortcut_manager::set_shortcut (m_close_action, "editor_file:close"); + shortcut_manager::set_shortcut (m_close_all_action, "editor_file:close_all"); + shortcut_manager::set_shortcut (m_close_others_action, "editor_file:close_other"); + shortcut_manager::set_shortcut (m_print_action, "editor_file:print"); -void -file_editor::set_shortcuts (void) -{ - // Shortcuts also available in the main window, as well as the realted - // ahotcuts, are defined in main_window and added to the editor + // Edit menu + shortcut_manager::set_shortcut (m_redo_action, "editor_edit:redo"); + shortcut_manager::set_shortcut (m_cut_action, "editor_edit:cut"); + shortcut_manager::set_shortcut (m_find_action, "editor_edit:find_replace"); + shortcut_manager::set_shortcut (m_find_next_action, "editor_edit:find_next"); + shortcut_manager::set_shortcut (m_find_previous_action, "editor_edit:find_previous"); - // File menu - shortcut_manager::set_shortcut (m_edit_function_action, "editor_file:edit_function"); - shortcut_manager::set_shortcut (m_save_action, "editor_file:save"); - shortcut_manager::set_shortcut (m_save_as_action, "editor_file:save_as"); - shortcut_manager::set_shortcut (m_close_action, "editor_file:close"); - shortcut_manager::set_shortcut (m_close_all_action, "editor_file:close_all"); - shortcut_manager::set_shortcut (m_close_others_action, "editor_file:close_other"); - shortcut_manager::set_shortcut (m_print_action, "editor_file:print"); + shortcut_manager::set_shortcut (m_delete_start_word_action, "editor_edit:delete_start_word"); + shortcut_manager::set_shortcut (m_delete_end_word_action, "editor_edit:delete_end_word"); + shortcut_manager::set_shortcut (m_delete_start_line_action, "editor_edit:delete_start_line"); + shortcut_manager::set_shortcut (m_delete_end_line_action, "editor_edit:delete_end_line"); + shortcut_manager::set_shortcut (m_delete_line_action, "editor_edit:delete_line"); + shortcut_manager::set_shortcut (m_copy_line_action, "editor_edit:copy_line"); + shortcut_manager::set_shortcut (m_cut_line_action, "editor_edit:cut_line"); + shortcut_manager::set_shortcut (m_duplicate_selection_action, "editor_edit:duplicate_selection"); + shortcut_manager::set_shortcut (m_transpose_line_action, "editor_edit:transpose_line"); + shortcut_manager::set_shortcut (m_comment_selection_action, "editor_edit:comment_selection"); + shortcut_manager::set_shortcut (m_uncomment_selection_action, "editor_edit:uncomment_selection"); + shortcut_manager::set_shortcut (m_comment_var_selection_action, "editor_edit:comment_var_selection"); - // Edit menu - shortcut_manager::set_shortcut (m_redo_action, "editor_edit:redo"); - shortcut_manager::set_shortcut (m_cut_action, "editor_edit:cut"); - shortcut_manager::set_shortcut (m_find_action, "editor_edit:find_replace"); - shortcut_manager::set_shortcut (m_find_next_action, "editor_edit:find_next"); - shortcut_manager::set_shortcut (m_find_previous_action, "editor_edit:find_previous"); + shortcut_manager::set_shortcut (m_upper_case_action, "editor_edit:upper_case"); + shortcut_manager::set_shortcut (m_lower_case_action, "editor_edit:lower_case"); + shortcut_manager::set_shortcut (m_indent_selection_action, "editor_edit:indent_selection"); + shortcut_manager::set_shortcut (m_unindent_selection_action, "editor_edit:unindent_selection"); + shortcut_manager::set_shortcut (m_smart_indent_line_or_selection_action, "editor_edit:smart_indent_line_or_selection"); + shortcut_manager::set_shortcut (m_completion_action, "editor_edit:completion_list"); + shortcut_manager::set_shortcut (m_goto_line_action, "editor_edit:goto_line"); + shortcut_manager::set_shortcut (m_move_to_matching_brace, "editor_edit:move_to_brace"); + shortcut_manager::set_shortcut (m_sel_to_matching_brace, "editor_edit:select_to_brace"); + shortcut_manager::set_shortcut (m_toggle_bookmark_action, "editor_edit:toggle_bookmark"); + shortcut_manager::set_shortcut (m_next_bookmark_action, "editor_edit:next_bookmark"); + shortcut_manager::set_shortcut (m_previous_bookmark_action, "editor_edit:previous_bookmark"); + shortcut_manager::set_shortcut (m_remove_bookmark_action, "editor_edit:remove_bookmark"); + shortcut_manager::set_shortcut (m_preferences_action, "editor_edit:preferences"); + shortcut_manager::set_shortcut (m_styles_preferences_action, "editor_edit:styles_preferences"); - shortcut_manager::set_shortcut (m_delete_start_word_action, "editor_edit:delete_start_word"); - shortcut_manager::set_shortcut (m_delete_end_word_action, "editor_edit:delete_end_word"); - shortcut_manager::set_shortcut (m_delete_start_line_action, "editor_edit:delete_start_line"); - shortcut_manager::set_shortcut (m_delete_end_line_action, "editor_edit:delete_end_line"); - shortcut_manager::set_shortcut (m_delete_line_action, "editor_edit:delete_line"); - shortcut_manager::set_shortcut (m_copy_line_action, "editor_edit:copy_line"); - shortcut_manager::set_shortcut (m_cut_line_action, "editor_edit:cut_line"); - shortcut_manager::set_shortcut (m_duplicate_selection_action, "editor_edit:duplicate_selection"); - shortcut_manager::set_shortcut (m_transpose_line_action, "editor_edit:transpose_line"); - shortcut_manager::set_shortcut (m_comment_selection_action, "editor_edit:comment_selection"); - shortcut_manager::set_shortcut (m_uncomment_selection_action, "editor_edit:uncomment_selection"); - shortcut_manager::set_shortcut (m_comment_var_selection_action, "editor_edit:comment_var_selection"); + shortcut_manager::set_shortcut (m_conv_eol_windows_action, "editor_edit:conv_eol_winows"); + shortcut_manager::set_shortcut (m_conv_eol_unix_action, "editor_edit:conv_eol_unix"); + shortcut_manager::set_shortcut (m_conv_eol_mac_action, "editor_edit:conv_eol_mac"); - shortcut_manager::set_shortcut (m_upper_case_action, "editor_edit:upper_case"); - shortcut_manager::set_shortcut (m_lower_case_action, "editor_edit:lower_case"); - shortcut_manager::set_shortcut (m_indent_selection_action, "editor_edit:indent_selection"); - shortcut_manager::set_shortcut (m_unindent_selection_action, "editor_edit:unindent_selection"); - shortcut_manager::set_shortcut (m_smart_indent_line_or_selection_action, "editor_edit:smart_indent_line_or_selection"); - shortcut_manager::set_shortcut (m_completion_action, "editor_edit:completion_list"); - shortcut_manager::set_shortcut (m_goto_line_action, "editor_edit:goto_line"); - shortcut_manager::set_shortcut (m_move_to_matching_brace, "editor_edit:move_to_brace"); - shortcut_manager::set_shortcut (m_sel_to_matching_brace, "editor_edit:select_to_brace"); - shortcut_manager::set_shortcut (m_toggle_bookmark_action, "editor_edit:toggle_bookmark"); - shortcut_manager::set_shortcut (m_next_bookmark_action, "editor_edit:next_bookmark"); - shortcut_manager::set_shortcut (m_previous_bookmark_action, "editor_edit:previous_bookmark"); - shortcut_manager::set_shortcut (m_remove_bookmark_action, "editor_edit:remove_bookmark"); - shortcut_manager::set_shortcut (m_preferences_action, "editor_edit:preferences"); - shortcut_manager::set_shortcut (m_styles_preferences_action, "editor_edit:styles_preferences"); + // View menu + shortcut_manager::set_shortcut (m_show_linenum_action, "editor_view:show_line_numbers"); + shortcut_manager::set_shortcut (m_show_whitespace_action, "editor_view:show_white_spaces"); + shortcut_manager::set_shortcut (m_show_eol_action, "editor_view:show_eol_chars"); + shortcut_manager::set_shortcut (m_show_indguide_action, "editor_view:show_ind_guides"); + shortcut_manager::set_shortcut (m_show_longline_action, "editor_view:show_long_line"); + shortcut_manager::set_shortcut (m_show_toolbar_action, "editor_view:show_toolbar"); + shortcut_manager::set_shortcut (m_show_statusbar_action, "editor_view:show_statusbar"); + shortcut_manager::set_shortcut (m_show_hscrollbar_action, "editor_view:show_hscrollbar"); + shortcut_manager::set_shortcut (m_zoom_in_action, "editor_view:zoom_in"); + shortcut_manager::set_shortcut (m_zoom_out_action, "editor_view:zoom_out"); + shortcut_manager::set_shortcut (m_zoom_normal_action, "editor_view:zoom_normal"); - shortcut_manager::set_shortcut (m_conv_eol_windows_action, "editor_edit:conv_eol_winows"); - shortcut_manager::set_shortcut (m_conv_eol_unix_action, "editor_edit:conv_eol_unix"); - shortcut_manager::set_shortcut (m_conv_eol_mac_action, "editor_edit:conv_eol_mac"); + // Debug menu + shortcut_manager::set_shortcut (m_toggle_breakpoint_action, "editor_debug:toggle_breakpoint"); + shortcut_manager::set_shortcut (m_next_breakpoint_action, "editor_debug:next_breakpoint"); + shortcut_manager::set_shortcut (m_previous_breakpoint_action, "editor_debug:previous_breakpoint"); + shortcut_manager::set_shortcut (m_remove_all_breakpoints_action, "editor_debug:remove_breakpoints"); + + // Run menu + shortcut_manager::set_shortcut (m_run_action, "editor_run:run_file"); + shortcut_manager::set_shortcut (m_run_selection_action, "editor_run:run_selection"); - // View menu - shortcut_manager::set_shortcut (m_show_linenum_action, "editor_view:show_line_numbers"); - shortcut_manager::set_shortcut (m_show_whitespace_action, "editor_view:show_white_spaces"); - shortcut_manager::set_shortcut (m_show_eol_action, "editor_view:show_eol_chars"); - shortcut_manager::set_shortcut (m_show_indguide_action, "editor_view:show_ind_guides"); - shortcut_manager::set_shortcut (m_show_longline_action, "editor_view:show_long_line"); - shortcut_manager::set_shortcut (m_show_toolbar_action, "editor_view:show_toolbar"); - shortcut_manager::set_shortcut (m_show_statusbar_action, "editor_view:show_statusbar"); - shortcut_manager::set_shortcut (m_show_hscrollbar_action, "editor_view:show_hscrollbar"); - shortcut_manager::set_shortcut (m_zoom_in_action, "editor_view:zoom_in"); - shortcut_manager::set_shortcut (m_zoom_out_action, "editor_view:zoom_out"); - shortcut_manager::set_shortcut (m_zoom_normal_action, "editor_view:zoom_normal"); + // Help menu + shortcut_manager::set_shortcut (m_context_help_action, "editor_help:help_keyword"); + shortcut_manager::set_shortcut (m_context_doc_action, "editor_help:doc_keyword"); + + // Tab navigation without menu entries + shortcut_manager::set_shortcut (m_switch_left_tab_action, "editor_tabs:switch_left_tab"); + shortcut_manager::set_shortcut (m_switch_right_tab_action, "editor_tabs:switch_right_tab"); + shortcut_manager::set_shortcut (m_move_tab_left_action, "editor_tabs:move_tab_left"); + shortcut_manager::set_shortcut (m_move_tab_right_action, "editor_tabs:move_tab_right"); + + } - // Debug menu - shortcut_manager::set_shortcut (m_toggle_breakpoint_action, "editor_debug:toggle_breakpoint"); - shortcut_manager::set_shortcut (m_next_breakpoint_action, "editor_debug:next_breakpoint"); - shortcut_manager::set_shortcut (m_previous_breakpoint_action, "editor_debug:previous_breakpoint"); - shortcut_manager::set_shortcut (m_remove_all_breakpoints_action, "editor_debug:remove_breakpoints"); - - // Run menu - shortcut_manager::set_shortcut (m_run_action, "editor_run:run_file"); - shortcut_manager::set_shortcut (m_run_selection_action, "editor_run:run_selection"); + // This slot is a reimplementation of the virtual slot in octave_dock_widget. + // We need this for creating an empty script when the editor has no open files + // and is made visible + void file_editor::handle_visibility (bool visible) + { + if (m_closed && visible) + { + m_closed = false; + QSettings *settings = resource_manager::get_settings (); + restore_session (settings); + } - // Help menu - shortcut_manager::set_shortcut (m_context_help_action, "editor_help:help_keyword"); - shortcut_manager::set_shortcut (m_context_doc_action, "editor_help:doc_keyword"); + empty_script (false, visible); + + if (visible && ! isFloating ()) + focus (); - // Tab navigation without menu entries - shortcut_manager::set_shortcut (m_switch_left_tab_action, "editor_tabs:switch_left_tab"); - shortcut_manager::set_shortcut (m_switch_right_tab_action, "editor_tabs:switch_right_tab"); - shortcut_manager::set_shortcut (m_move_tab_left_action, "editor_tabs:move_tab_left"); - shortcut_manager::set_shortcut (m_move_tab_right_action, "editor_tabs:move_tab_right"); + } -} + void file_editor::update_octave_directory (const QString& dir) + { + m_ced = dir; + emit fetab_set_directory (m_ced); // for save dialog + } -// This slot is a reimplementation of the virtual slot in octave_dock_widget. -// We need this for creating an empty script when the editor has no open files -// and is made visible -void -file_editor::handle_visibility (bool visible) -{ - if (m_closed && visible) - { - m_closed = false; - QSettings *settings = resource_manager::get_settings (); - restore_session (settings); - } + void file_editor::copyClipboard (void) + { + if (editor_tab_has_focus ()) + emit fetab_scintilla_command (m_tab_widget->currentWidget (), + QsciScintillaBase::SCI_COPY); + } - empty_script (false, visible); - - if (visible && ! isFloating ()) - focus (); - -} + void file_editor::pasteClipboard (void) + { + if (editor_tab_has_focus ()) + emit fetab_scintilla_command (m_tab_widget->currentWidget (), + QsciScintillaBase::SCI_PASTE); + } -void -file_editor::update_octave_directory (const QString& dir) -{ - m_ced = dir; - emit fetab_set_directory (m_ced); // for save dialog -} - -void -file_editor::copyClipboard (void) -{ - if (editor_tab_has_focus ()) - emit fetab_scintilla_command (m_tab_widget->currentWidget (), - QsciScintillaBase::SCI_COPY); -} + void file_editor::selectAll (void) + { + if (editor_tab_has_focus ()) + emit fetab_scintilla_command (m_tab_widget->currentWidget (), + QsciScintillaBase::SCI_SELECTALL); + } -void -file_editor::pasteClipboard (void) -{ - if (editor_tab_has_focus ()) - emit fetab_scintilla_command (m_tab_widget->currentWidget (), - QsciScintillaBase::SCI_PASTE); -} + void file_editor::do_undo (void) + { + if (editor_tab_has_focus ()) + emit fetab_scintilla_command (m_tab_widget->currentWidget (), + QsciScintillaBase::SCI_UNDO); + } -void -file_editor::selectAll (void) -{ - if (editor_tab_has_focus ()) - emit fetab_scintilla_command (m_tab_widget->currentWidget (), - QsciScintillaBase::SCI_SELECTALL); -} + // Open a file, if not already open, and mark the current execution location + // and/or a breakpoint with condition cond. + void file_editor::request_open_file (const QString& openFileName, + const QString& encoding, + int line, bool debug_pointer, + bool breakpoint_marker, bool insert, + const QString& cond) + { + if (call_custom_editor (openFileName, line)) + return; // custom editor called -void -file_editor::do_undo (void) -{ - if (editor_tab_has_focus ()) - emit fetab_scintilla_command (m_tab_widget->currentWidget (), - QsciScintillaBase::SCI_UNDO); -} + if (openFileName.isEmpty ()) + { + // This happens if edit is calles without an argument + // Open eitor with empty edit area instead (as new file would do) + request_new_file (""); + } + else + { + // Check whether this file is already open in the editor. + QWidget *tab = find_tab_widget (openFileName); -// Open a file, if not already open, and mark the current execution location -// and/or a breakpoint with condition cond. -void -file_editor::request_open_file (const QString& openFileName, - const QString& encoding, - int line, bool debug_pointer, - bool breakpoint_marker, bool insert, - const QString& cond) -{ - if (call_custom_editor (openFileName, line)) - return; // custom editor called + if (tab) + { + m_tab_widget->setCurrentWidget (tab); - if (openFileName.isEmpty ()) - { - // This happens if edit is calles without an argument - // Open eitor with empty edit area instead (as new file would do) - request_new_file (""); - } - else - { - // Check whether this file is already open in the editor. - QWidget *tab = find_tab_widget (openFileName); + if (line > 0) + { + if (insert) + emit fetab_goto_line (tab, line); - if (tab) - { - m_tab_widget->setCurrentWidget (tab); + if (debug_pointer) + emit fetab_insert_debugger_pointer (tab, line); - if (line > 0) - { - if (insert) - emit fetab_goto_line (tab, line); - - if (debug_pointer) - emit fetab_insert_debugger_pointer (tab, line); - - if (breakpoint_marker) - emit fetab_do_breakpoint_marker (insert, tab, line, cond); - } + if (breakpoint_marker) + emit fetab_do_breakpoint_marker (insert, tab, line, cond); + } - if (! ((breakpoint_marker || debug_pointer) && is_editor_console_tabbed ())) - { - emit fetab_set_focus (tab); - focus (); - } - } - else - { - file_editor_tab *fileEditorTab = nullptr; - // Reuse <unnamed> tab if it hasn't yet been modified. - bool reusing = false; - tab = find_tab_widget (""); - if (tab) - { - fileEditorTab = static_cast<file_editor_tab *>(tab); - if (fileEditorTab->qsci_edit_area ()->isModified ()) - fileEditorTab = nullptr; - else - reusing = true; - } + if (! ((breakpoint_marker || debug_pointer) && is_editor_console_tabbed ())) + { + emit fetab_set_focus (tab); + focus (); + } + } + else + { + file_editor_tab *fileEditorTab = nullptr; + // Reuse <unnamed> tab if it hasn't yet been modified. + bool reusing = false; + tab = find_tab_widget (""); + if (tab) + { + fileEditorTab = static_cast<file_editor_tab *>(tab); + if (fileEditorTab->qsci_edit_area ()->isModified ()) + fileEditorTab = nullptr; + else + reusing = true; + } - // If <unnamed> was absent or modified, create a new tab. - if (! fileEditorTab) - fileEditorTab = new file_editor_tab (); + // If <unnamed> was absent or modified, create a new tab. + if (! fileEditorTab) + fileEditorTab = new file_editor_tab (); - if (fileEditorTab) - { - fileEditorTab->set_encoding (encoding); - QString result = fileEditorTab->load_file (openFileName); - if (result == "") - { - // Supply empty title then have the file_editor_tab update - // with full or short name. - if (! reusing) - add_file_editor_tab (fileEditorTab, ""); - fileEditorTab->update_window_title (false); - // file already loaded, add file to mru list here - QFileInfo file_info = QFileInfo (openFileName); - handle_mru_add_file (file_info.canonicalFilePath (), - encoding); + if (fileEditorTab) + { + fileEditorTab->set_encoding (encoding); + QString result = fileEditorTab->load_file (openFileName); + if (result == "") + { + // Supply empty title then have the file_editor_tab update + // with full or short name. + if (! reusing) + add_file_editor_tab (fileEditorTab, ""); + fileEditorTab->update_window_title (false); + // file already loaded, add file to mru list here + QFileInfo file_info = QFileInfo (openFileName); + handle_mru_add_file (file_info.canonicalFilePath (), + encoding); - if (line > 0) - { - if (insert) - emit fetab_goto_line (fileEditorTab, line); + if (line > 0) + { + if (insert) + emit fetab_goto_line (fileEditorTab, line); - if (debug_pointer) - emit fetab_insert_debugger_pointer (fileEditorTab, - line); - if (breakpoint_marker) - emit fetab_do_breakpoint_marker (insert, fileEditorTab, - line, cond); - } - } - else - { - delete fileEditorTab; + if (debug_pointer) + emit fetab_insert_debugger_pointer (fileEditorTab, + line); + if (breakpoint_marker) + emit fetab_do_breakpoint_marker (insert, fileEditorTab, + line, cond); + } + } + else + { + delete fileEditorTab; - if (QFile::exists (openFileName)) - { - // File not readable: - // create a NonModal message about error. - QMessageBox *msgBox - = new QMessageBox (QMessageBox::Critical, - tr ("Octave Editor"), - tr ("Could not open file\n%1\nfor read: %2."). - arg (openFileName).arg (result), - QMessageBox::Ok, this); + if (QFile::exists (openFileName)) + { + // File not readable: + // create a NonModal message about error. + QMessageBox *msgBox + = new QMessageBox (QMessageBox::Critical, + tr ("Octave Editor"), + tr ("Could not open file\n%1\nfor read: %2."). + arg (openFileName).arg (result), + QMessageBox::Ok, this); - msgBox->setWindowModality (Qt::NonModal); - msgBox->setAttribute (Qt::WA_DeleteOnClose); - msgBox->show (); - } - else - { - // File does not exist, should it be created? - bool create_file = true; - QMessageBox *msgBox; - QSettings *settings = resource_manager::get_settings (); + msgBox->setWindowModality (Qt::NonModal); + msgBox->setAttribute (Qt::WA_DeleteOnClose); + msgBox->show (); + } + else + { + // File does not exist, should it be created? + bool create_file = true; + QMessageBox *msgBox; + QSettings *settings = resource_manager::get_settings (); - if (! settings->value ("editor/create_new_file", false).toBool ()) - { - msgBox = new QMessageBox (QMessageBox::Question, - tr ("Octave Editor"), - tr ("File\n%1\ndoes not exist. " - "Do you want to create it?").arg (openFileName), - QMessageBox::NoButton,nullptr); - QPushButton *create_button = - msgBox->addButton (tr ("Create"), QMessageBox::YesRole); - msgBox->addButton (tr ("Cancel"), QMessageBox::RejectRole); - msgBox->setDefaultButton (create_button); - msgBox->exec (); + if (! settings->value ("editor/create_new_file", false).toBool ()) + { + msgBox = new QMessageBox (QMessageBox::Question, + tr ("Octave Editor"), + tr ("File\n%1\ndoes not exist. " + "Do you want to create it?").arg (openFileName), + QMessageBox::NoButton,nullptr); + QPushButton *create_button = + msgBox->addButton (tr ("Create"), QMessageBox::YesRole); + msgBox->addButton (tr ("Cancel"), QMessageBox::RejectRole); + msgBox->setDefaultButton (create_button); + msgBox->exec (); - QAbstractButton *clicked_button = msgBox->clickedButton (); - if (clicked_button != create_button) - create_file = false; + QAbstractButton *clicked_button = msgBox->clickedButton (); + if (clicked_button != create_button) + create_file = false; + + delete msgBox; + } - delete msgBox; - } + if (create_file) + { + // create the file and call the editor again + QFile file (openFileName); + if (! file.open (QIODevice::WriteOnly)) + { + // error opening the file + msgBox = new QMessageBox (QMessageBox::Critical, + tr ("Octave Editor"), + tr ("Could not open file\n%1\nfor write: %2."). + arg (openFileName).arg (file.errorString ()), + QMessageBox::Ok, this); - if (create_file) - { - // create the file and call the editor again - QFile file (openFileName); - if (! file.open (QIODevice::WriteOnly)) - { - // error opening the file - msgBox = new QMessageBox (QMessageBox::Critical, - tr ("Octave Editor"), - tr ("Could not open file\n%1\nfor write: %2."). - arg (openFileName).arg (file.errorString ()), - QMessageBox::Ok, this); - - msgBox->setWindowModality (Qt::NonModal); - msgBox->setAttribute (Qt::WA_DeleteOnClose); - msgBox->show (); - } - else - { - file.close (); - request_open_file (openFileName); - } - } - } - } - } + msgBox->setWindowModality (Qt::NonModal); + msgBox->setAttribute (Qt::WA_DeleteOnClose); + msgBox->show (); + } + else + { + file.close (); + request_open_file (openFileName); + } + } + } + } + } - if (! ((breakpoint_marker || debug_pointer) && is_editor_console_tabbed ())) - { - // really show editor and the current editor tab - focus (); - emit file_loaded_signal (); - } - } - } -} + if (! ((breakpoint_marker || debug_pointer) && is_editor_console_tabbed ())) + { + // really show editor and the current editor tab + focus (); + emit file_loaded_signal (); + } + } + } + } -void -file_editor::request_preferences (bool) -{ - emit request_settings_dialog ("editor"); -} + void file_editor::request_preferences (bool) + { + emit request_settings_dialog ("editor"); + } + + void file_editor::request_styles_preferences (bool) + { + emit request_settings_dialog ("editor_styles"); + } -void -file_editor::request_styles_preferences (bool) -{ - emit request_settings_dialog ("editor_styles"); -} + void file_editor::show_line_numbers (bool) + { + toggle_preference ("editor/showLineNumbers",true); + } -void -file_editor::show_line_numbers (bool) -{ - toggle_preference ("editor/showLineNumbers",true); -} + void file_editor::show_white_space (bool) + { + toggle_preference ("editor/show_white_space",false); + } -void -file_editor::show_white_space (bool) -{ - toggle_preference ("editor/show_white_space",false); -} + void file_editor::show_eol_chars (bool) + { + toggle_preference ("editor/show_eol_chars",false); + } -void -file_editor::show_eol_chars (bool) -{ - toggle_preference ("editor/show_eol_chars",false); -} + void file_editor::show_indent_guides (bool) + { + toggle_preference ("editor/show_indent_guides",false); + } + + void file_editor::show_long_line (bool) + { + toggle_preference ("editor/long_line_marker",true); + } -void -file_editor::show_indent_guides (bool) -{ - toggle_preference ("editor/show_indent_guides",false); -} + void file_editor::show_toolbar (bool) + { + toggle_preference ("editor/show_toolbar",true); + } -void -file_editor::show_long_line (bool) -{ - toggle_preference ("editor/long_line_marker",true); -} + void file_editor::show_statusbar (bool) + { + toggle_preference ("editor/show_edit_status_bar",true); + } -void -file_editor::show_toolbar (bool) -{ - toggle_preference ("editor/show_toolbar",true); -} + void file_editor::show_hscrollbar (bool) + { + toggle_preference ("editor/show_hscroll_bar",true); + } -void -file_editor::show_statusbar (bool) -{ - toggle_preference ("editor/show_edit_status_bar",true); -} + void file_editor::zoom_in (bool) + { + emit fetab_zoom_in (m_tab_widget->currentWidget ()); + } + + void file_editor::zoom_out (bool) + { + emit fetab_zoom_out (m_tab_widget->currentWidget ()); + } -void -file_editor::show_hscrollbar (bool) -{ - toggle_preference ("editor/show_hscroll_bar",true); -} + void file_editor::zoom_normal (bool) + { + emit fetab_zoom_normal (m_tab_widget->currentWidget ()); + } -void -file_editor::zoom_in (bool) -{ - emit fetab_zoom_in (m_tab_widget->currentWidget ()); -} + // slots for tab navigation + void file_editor::switch_left_tab (void) + { + switch_tab (-1); + } -void -file_editor::zoom_out (bool) -{ - emit fetab_zoom_out (m_tab_widget->currentWidget ()); -} + void file_editor::switch_right_tab (void) + { + switch_tab (1); + } -void -file_editor::zoom_normal (bool) -{ - emit fetab_zoom_normal (m_tab_widget->currentWidget ()); -} + void file_editor::move_tab_left (void) + { +#if defined (HAVE_QTABWIDGET_SETMOVABLE) + switch_tab (-1, true); +#endif + } -// slots for tab navigation -void -file_editor::switch_left_tab (void) -{ - switch_tab (-1); -} + void file_editor::move_tab_right (void) + { +#if defined (HAVE_QTABWIDGET_SETMOVABLE) + switch_tab (1, true); +#endif + } -void -file_editor::switch_right_tab (void) -{ - switch_tab (1); -} + void file_editor::create_context_menu (QMenu *menu) + { + // remove all standard actions from scintilla + QList<QAction *> all_actions = menu->actions (); + QAction *a; + + foreach (a, all_actions) + menu->removeAction (a); -void -file_editor::move_tab_left (void) -{ -#if defined (HAVE_QTABWIDGET_SETMOVABLE) - switch_tab (-1, true); -#endif -} - -void -file_editor::move_tab_right (void) -{ -#if defined (HAVE_QTABWIDGET_SETMOVABLE) - switch_tab (1, true); -#endif -} + // add editor's actions with icons and customized shortcuts + menu->addAction (m_undo_action); + menu->addAction (m_redo_action); + menu->addSeparator (); + menu->addAction (m_cut_action); + menu->addAction (m_copy_action); + menu->addAction (m_paste_action); + menu->addSeparator (); + menu->addAction (m_selectall_action); + menu->addSeparator (); + menu->addAction (m_run_selection_action); + } -void -file_editor::create_context_menu (QMenu *menu) -{ - // remove all standard actions from scintilla - QList<QAction *> all_actions = menu->actions (); - QAction *a; - - foreach (a, all_actions) - menu->removeAction (a); + void file_editor::edit_status_update (bool undo, bool redo) + { + if (m_undo_action) + m_undo_action->setEnabled (undo); + m_redo_action->setEnabled (redo); + } - // add editor's actions with icons and customized shortcuts - menu->addAction (m_undo_action); - menu->addAction (m_redo_action); - menu->addSeparator (); - menu->addAction (m_cut_action); - menu->addAction (m_copy_action); - menu->addAction (m_paste_action); - menu->addSeparator (); - menu->addAction (m_selectall_action); - menu->addSeparator (); - menu->addAction (m_run_selection_action); -} - -void -file_editor::edit_status_update (bool undo, bool redo) -{ - if (m_undo_action) - m_undo_action->setEnabled (undo); - m_redo_action->setEnabled (redo); -} + // handler for the close event + void file_editor::closeEvent (QCloseEvent *e) + { + QSettings *settings = resource_manager::get_settings (); + if (settings->value ("editor/hiding_closes_files",false).toBool ()) + { + if (check_closing ()) + { + // all tabs are closed without cancelling, + // store closing state for restoring session when shown again + m_closed = true; + e->accept (); + } + else + e->ignore (); + } + else + e->accept (); + } -// handler for the close event -void -file_editor::closeEvent (QCloseEvent *e) -{ - QSettings *settings = resource_manager::get_settings (); - if (settings->value ("editor/hiding_closes_files",false).toBool ()) - { - if (check_closing ()) - { - // all tabs are closed without cancelling, - // store closing state for restoring session when shown again - m_closed = true; - e->accept (); - } - else - e->ignore (); - } - else - e->accept (); -} + void file_editor::dragEnterEvent (QDragEnterEvent *e) + { + if (e->mimeData ()->hasUrls ()) + { + e->acceptProposedAction (); + } + } + + void file_editor::dropEvent (QDropEvent *e) + { + if (e->mimeData ()->hasUrls ()) + { + foreach (QUrl url, e->mimeData ()->urls ()) + request_open_file (url.toLocalFile ()); + } + } -void -file_editor::dragEnterEvent (QDragEnterEvent *e) -{ - if (e->mimeData ()->hasUrls ()) - { - e->acceptProposedAction (); - } -} + bool file_editor::is_editor_console_tabbed (void) + { + octave::main_window *w = static_cast<octave::main_window *>(main_win ()); + QList<QDockWidget *> w_list = w->tabifiedDockWidgets (this); + QDockWidget *console = + static_cast<QDockWidget *> (w->get_dock_widget_list ().at (0)); -void -file_editor::dropEvent (QDropEvent *e) -{ - if (e->mimeData ()->hasUrls ()) - { - foreach (QUrl url, e->mimeData ()->urls ()) - request_open_file (url.toLocalFile ()); - } -} + for (int i = 0; i < w_list.count (); i++) + { + if (w_list.at (i) == console) + return true; + } + + return false; + } + + void file_editor::construct (void) + { + QWidget *editor_widget = new QWidget (this); + + // FIXME: what was the intended purpose of this unused variable? + // QStyle *editor_style = QApplication::style (); -bool -file_editor::is_editor_console_tabbed (void) -{ - octave::main_window *w = static_cast<octave::main_window *>(main_win ()); - QList<QDockWidget *> w_list = w->tabifiedDockWidgets (this); - QDockWidget *console = - static_cast<QDockWidget *> (w->get_dock_widget_list ().at (0)); + // Menu bar: do not set it native, required in MacOS and Ubuntu Unity (Qt5) + // for a visible menu bar in the editor widget. This property is ignored + // on other platforms. + m_menu_bar = new QMenuBar (editor_widget); + m_menu_bar->setNativeMenuBar (false); - for (int i = 0; i < w_list.count (); i++) - { - if (w_list.at (i) == console) - return true; - } + m_tool_bar = new QToolBar (editor_widget); + m_tool_bar->setMovable (true); + + m_tab_widget = new file_editor_tab_widget (editor_widget); - return false; -} + // the mru-list and an empty array of actions + QSettings *settings = resource_manager::get_settings (); + m_mru_files = settings->value ("editor/mru_file_list").toStringList (); + m_mru_files_encodings = settings->value ("editor/mru_file_encodings") + .toStringList (); -void -file_editor::construct (void) -{ - QWidget *editor_widget = new QWidget (this); - - // FIXME: what was the intended purpose of this unused variable? - // QStyle *editor_style = QApplication::style (); + if (m_mru_files_encodings.count () != m_mru_files.count ()) + { + // encodings don't have the same count -> do not use them! + m_mru_files_encodings = QStringList (); + for (int i = 0; i < m_mru_files.count (); i++) + m_mru_files_encodings << QString (); + } - // Menu bar: do not set it native, required in MacOS and Ubuntu Unity (Qt5) - // for a visible menu bar in the editor widget. This property is ignored - // on other platforms. - m_menu_bar = new QMenuBar (editor_widget); - m_menu_bar->setNativeMenuBar (false); + for (int i = 0; i < MaxMRUFiles; ++i) + { + m_mru_file_actions[i] = new QAction (this); + m_mru_file_actions[i]->setVisible (false); + } - m_tool_bar = new QToolBar (editor_widget); - m_tool_bar->setMovable (true); + // menu bar - m_tab_widget = new file_editor_tab_widget (editor_widget); + // file menu - // the mru-list and an empty array of actions - QSettings *settings = resource_manager::get_settings (); - m_mru_files = settings->value ("editor/mru_file_list").toStringList (); - m_mru_files_encodings = settings->value ("editor/mru_file_encodings") - .toStringList (); + m_fileMenu = add_menu (m_menu_bar, tr ("&File")); - if (m_mru_files_encodings.count () != m_mru_files.count ()) - { - // encodings don't have the same count -> do not use them! - m_mru_files_encodings = QStringList (); - for (int i = 0; i < m_mru_files.count (); i++) - m_mru_files_encodings << QString (); - } + // new and open menus are inserted later by the main window + m_mru_file_menu = new QMenu (tr ("&Recent Editor Files"), m_fileMenu); + for (int i = 0; i < MaxMRUFiles; ++i) + m_mru_file_menu->addAction (m_mru_file_actions[i]); + m_fileMenu->addMenu (m_mru_file_menu); + + m_fileMenu->addSeparator (); + + m_edit_function_action = add_action (m_fileMenu, QIcon (), + tr ("&Edit Function"), SLOT (request_context_edit (bool))); + + m_fileMenu->addSeparator (); - for (int i = 0; i < MaxMRUFiles; ++i) - { - m_mru_file_actions[i] = new QAction (this); - m_mru_file_actions[i]->setVisible (false); - } + m_save_action = add_action (m_fileMenu, resource_manager::icon ("document-save"), + tr ("&Save File"), SLOT (request_save_file (bool))); + m_save_as_action = add_action (m_fileMenu, resource_manager::icon ("document-save-as"), + tr ("Save File &As..."), SLOT (request_save_file_as (bool))); - // menu bar - - // file menu + m_fileMenu->addSeparator (); - m_fileMenu = add_menu (m_menu_bar, tr ("&File")); + m_close_action = add_action (m_fileMenu, resource_manager::icon ("window-close",false), + tr ("&Close"), SLOT (request_close_file (bool))); + m_close_all_action = add_action (m_fileMenu, resource_manager::icon ("window-close",false), + tr ("Close All"), SLOT (request_close_all_files (bool))); + m_close_others_action = add_action (m_fileMenu, resource_manager::icon ("window-close",false), + tr ("Close Other Files"), SLOT (request_close_other_files (bool))); - // new and open menus are inserted later by the main window - m_mru_file_menu = new QMenu (tr ("&Recent Editor Files"), m_fileMenu); - for (int i = 0; i < MaxMRUFiles; ++i) - m_mru_file_menu->addAction (m_mru_file_actions[i]); - m_fileMenu->addMenu (m_mru_file_menu); + m_fileMenu->addSeparator (); - m_fileMenu->addSeparator (); + m_print_action = add_action (m_fileMenu, resource_manager::icon ("document-print"), + tr ("Print..."), SLOT (request_print_file (bool))); - m_edit_function_action = add_action (m_fileMenu, QIcon (), - tr ("&Edit Function"), SLOT (request_context_edit (bool))); + // edit menu (undo, copy, paste and select all later via main window) + + m_edit_menu = add_menu (m_menu_bar, tr ("&Edit")); - m_fileMenu->addSeparator (); + m_redo_action = add_action (m_edit_menu, resource_manager::icon ("edit-redo"), + tr ("&Redo"), SLOT (request_redo (bool))); + m_redo_action->setEnabled (false); - m_save_action = add_action (m_fileMenu, resource_manager::icon ("document-save"), - tr ("&Save File"), SLOT (request_save_file (bool))); - m_save_as_action = add_action (m_fileMenu, resource_manager::icon ("document-save-as"), - tr ("Save File &As..."), SLOT (request_save_file_as (bool))); + m_edit_menu->addSeparator (); - m_fileMenu->addSeparator (); + m_cut_action = add_action (m_edit_menu, resource_manager::icon ("edit-cut"), + tr ("Cu&t"), SLOT (request_cut (bool))); + m_cut_action->setEnabled (false); - m_close_action = add_action (m_fileMenu, resource_manager::icon ("window-close",false), - tr ("&Close"), SLOT (request_close_file (bool))); - m_close_all_action = add_action (m_fileMenu, resource_manager::icon ("window-close",false), - tr ("Close All"), SLOT (request_close_all_files (bool))); - m_close_others_action = add_action (m_fileMenu, resource_manager::icon ("window-close",false), - tr ("Close Other Files"), SLOT (request_close_other_files (bool))); + m_find_action = add_action (m_edit_menu, resource_manager::icon ("edit-find-replace"), + tr ("&Find and Replace..."), SLOT (request_find (bool))); + + m_find_next_action = add_action (m_edit_menu, QIcon (), + tr ("Find &Next..."), SLOT (request_find_next (bool))); - m_fileMenu->addSeparator (); + m_find_previous_action = add_action (m_edit_menu, QIcon (), + tr ("Find &Previous..."), SLOT (request_find_previous (bool))); - m_print_action = add_action (m_fileMenu, resource_manager::icon ("document-print"), - tr ("Print..."), SLOT (request_print_file (bool))); + m_edit_menu->addSeparator (); - // edit menu (undo, copy, paste and select all later via main window) - - m_edit_menu = add_menu (m_menu_bar, tr ("&Edit")); + m_edit_cmd_menu = m_edit_menu->addMenu (tr ("&Commands")); - m_redo_action = add_action (m_edit_menu, resource_manager::icon ("edit-redo"), - tr ("&Redo"), SLOT (request_redo (bool))); - m_redo_action->setEnabled (false); + m_delete_line_action = add_action (m_edit_cmd_menu, QIcon (), + tr ("Delete Line"), SLOT (request_delete_line (bool))); + m_copy_line_action = add_action (m_edit_cmd_menu, QIcon (), + tr ("Copy Line"), SLOT (request_copy_line (bool))); + m_cut_line_action = add_action (m_edit_cmd_menu, QIcon (), + tr ("Cut Line"), SLOT (request_cut_line (bool))); - m_edit_menu->addSeparator (); - - m_cut_action = add_action (m_edit_menu, resource_manager::icon ("edit-cut"), - tr ("Cu&t"), SLOT (request_cut (bool))); - m_cut_action->setEnabled (false); + m_edit_cmd_menu->addSeparator (); - m_find_action = add_action (m_edit_menu, resource_manager::icon ("edit-find-replace"), - tr ("&Find and Replace..."), SLOT (request_find (bool))); - - m_find_next_action = add_action (m_edit_menu, QIcon (), - tr ("Find &Next..."), SLOT (request_find_next (bool))); + m_delete_start_word_action = add_action (m_edit_cmd_menu, QIcon (), + tr ("Delete to Start of Word"), SLOT (request_delete_start_word (bool))); + m_delete_end_word_action = add_action (m_edit_cmd_menu, QIcon (), + tr ("Delete to End of Word"), SLOT (request_delete_end_word (bool))); + m_delete_start_line_action = add_action (m_edit_cmd_menu, QIcon (), + tr ("Delete to Start of Line"), SLOT (request_delete_start_line (bool))); + m_delete_end_line_action = add_action (m_edit_cmd_menu, QIcon (), + tr ("Delete to End of Line"), SLOT (request_delete_end_line (bool))); - m_find_previous_action = add_action (m_edit_menu, QIcon (), - tr ("Find &Previous..."), SLOT (request_find_previous (bool))); + m_edit_cmd_menu->addSeparator (); - m_edit_menu->addSeparator (); + m_duplicate_selection_action = add_action (m_edit_cmd_menu, QIcon (), + tr ("Duplicate Selection/Line"), SLOT (request_duplicate_selection (bool))); + m_transpose_line_action = add_action (m_edit_cmd_menu, QIcon (), + tr ("Transpose Line"), SLOT (request_transpose_line (bool))); - m_edit_cmd_menu = m_edit_menu->addMenu (tr ("&Commands")); + m_edit_cmd_menu->addSeparator (); - m_delete_line_action = add_action (m_edit_cmd_menu, QIcon (), - tr ("Delete Line"), SLOT (request_delete_line (bool))); - m_copy_line_action = add_action (m_edit_cmd_menu, QIcon (), - tr ("Copy Line"), SLOT (request_copy_line (bool))); - m_cut_line_action = add_action (m_edit_cmd_menu, QIcon (), - tr ("Cut Line"), SLOT (request_cut_line (bool))); + m_completion_action = add_action (m_edit_cmd_menu, QIcon (), + tr ("&Show Completion List"), SLOT (request_completion (bool))); - m_edit_cmd_menu->addSeparator (); + m_edit_fmt_menu = m_edit_menu->addMenu (tr ("&Format")); - m_delete_start_word_action = add_action (m_edit_cmd_menu, QIcon (), - tr ("Delete to Start of Word"), SLOT (request_delete_start_word (bool))); - m_delete_end_word_action = add_action (m_edit_cmd_menu, QIcon (), - tr ("Delete to End of Word"), SLOT (request_delete_end_word (bool))); - m_delete_start_line_action = add_action (m_edit_cmd_menu, QIcon (), - tr ("Delete to Start of Line"), SLOT (request_delete_start_line (bool))); - m_delete_end_line_action = add_action (m_edit_cmd_menu, QIcon (), - tr ("Delete to End of Line"), SLOT (request_delete_end_line (bool))); + m_upper_case_action = add_action (m_edit_fmt_menu, QIcon (), + tr ("&Uppercase Selection"), SLOT (request_upper_case (bool))); + m_lower_case_action = add_action (m_edit_fmt_menu, QIcon (), + tr ("&Lowercase Selection"), SLOT (request_lower_case (bool))); + + m_edit_fmt_menu->addSeparator (); - m_edit_cmd_menu->addSeparator (); - - m_duplicate_selection_action = add_action (m_edit_cmd_menu, QIcon (), - tr ("Duplicate Selection/Line"), SLOT (request_duplicate_selection (bool))); - m_transpose_line_action = add_action (m_edit_cmd_menu, QIcon (), - tr ("Transpose Line"), SLOT (request_transpose_line (bool))); + m_comment_selection_action = add_action (m_edit_fmt_menu, QIcon (), + tr ("&Comment"), SLOT (request_comment_selected_text (bool))); + m_uncomment_selection_action = add_action (m_edit_fmt_menu, QIcon (), + tr ("&Uncomment"), SLOT (request_uncomment_selected_text (bool))); + m_comment_var_selection_action = add_action (m_edit_fmt_menu, QIcon (), + tr ("Comment (Choosing String)"), SLOT (request_comment_var_selected_text (bool))); - m_edit_cmd_menu->addSeparator (); - - m_completion_action = add_action (m_edit_cmd_menu, QIcon (), - tr ("&Show Completion List"), SLOT (request_completion (bool))); - - m_edit_fmt_menu = m_edit_menu->addMenu (tr ("&Format")); + m_edit_fmt_menu->addSeparator (); - m_upper_case_action = add_action (m_edit_fmt_menu, QIcon (), - tr ("&Uppercase Selection"), SLOT (request_upper_case (bool))); - m_lower_case_action = add_action (m_edit_fmt_menu, QIcon (), - tr ("&Lowercase Selection"), SLOT (request_lower_case (bool))); + m_indent_selection_action = add_action (m_edit_fmt_menu, QIcon (), + tr ("&Indent Selection Rigidly"), SLOT (request_indent_selected_text (bool))); + m_unindent_selection_action = add_action (m_edit_fmt_menu, QIcon (), + tr ("&Unindent Selection Rigidly"), SLOT (request_unindent_selected_text (bool))); - m_edit_fmt_menu->addSeparator (); + m_smart_indent_line_or_selection_action + = add_action (m_edit_fmt_menu, QIcon (), + tr ("Indent Code"), SLOT (request_smart_indent_line_or_selected_text (void))); + + m_edit_fmt_menu->addSeparator (); - m_comment_selection_action = add_action (m_edit_fmt_menu, QIcon (), - tr ("&Comment"), SLOT (request_comment_selected_text (bool))); - m_uncomment_selection_action = add_action (m_edit_fmt_menu, QIcon (), - tr ("&Uncomment"), SLOT (request_uncomment_selected_text (bool))); - m_comment_var_selection_action = add_action (m_edit_fmt_menu, QIcon (), - tr ("Comment (Choosing String)"), SLOT (request_comment_var_selected_text (bool))); - - m_edit_fmt_menu->addSeparator (); + m_conv_eol_windows_action = add_action (m_edit_fmt_menu, QIcon (), + tr ("Convert Line Endings to &Windows (CRLF)"), + SLOT (request_conv_eol_windows (bool))); + m_conv_eol_unix_action = add_action (m_edit_fmt_menu, QIcon (), + tr ("Convert Line Endings to &Unix (LF)"), + SLOT (request_conv_eol_unix (bool))); + m_conv_eol_mac_action = add_action (m_edit_fmt_menu, QIcon (), + tr ("Convert Line Endings to &Mac (CR)"), + SLOT (request_conv_eol_mac (bool))); - m_indent_selection_action = add_action (m_edit_fmt_menu, QIcon (), - tr ("&Indent Selection Rigidly"), SLOT (request_indent_selected_text (bool))); - m_unindent_selection_action = add_action (m_edit_fmt_menu, QIcon (), - tr ("&Unindent Selection Rigidly"), SLOT (request_unindent_selected_text (bool))); + m_edit_nav_menu = m_edit_menu->addMenu (tr ("Navi&gation")); + + m_goto_line_action = add_action (m_edit_nav_menu, QIcon (), + tr ("Go &to Line..."), SLOT (request_goto_line (bool))); - m_smart_indent_line_or_selection_action - = add_action (m_edit_fmt_menu, QIcon (), - tr ("Indent Code"), SLOT (request_smart_indent_line_or_selected_text (void))); + m_edit_cmd_menu->addSeparator (); - m_edit_fmt_menu->addSeparator (); + m_move_to_matching_brace = add_action (m_edit_nav_menu, QIcon (), + tr ("Move to Matching Brace"), SLOT (request_move_match_brace (bool))); + m_sel_to_matching_brace = add_action (m_edit_nav_menu, QIcon (), + tr ("Select to Matching Brace"), SLOT (request_sel_match_brace (bool))); - m_conv_eol_windows_action = add_action (m_edit_fmt_menu, QIcon (), - tr ("Convert Line Endings to &Windows (CRLF)"), - SLOT (request_conv_eol_windows (bool))); - m_conv_eol_unix_action = add_action (m_edit_fmt_menu, QIcon (), - tr ("Convert Line Endings to &Unix (LF)"), - SLOT (request_conv_eol_unix (bool))); - m_conv_eol_mac_action = add_action (m_edit_fmt_menu, QIcon (), - tr ("Convert Line Endings to &Mac (CR)"), - SLOT (request_conv_eol_mac (bool))); + m_edit_nav_menu->addSeparator (); - m_edit_nav_menu = m_edit_menu->addMenu (tr ("Navi&gation")); + m_next_bookmark_action = add_action (m_edit_nav_menu, QIcon (), + tr ("&Next Bookmark"), SLOT (request_next_bookmark (bool))); + m_previous_bookmark_action = add_action (m_edit_nav_menu, QIcon (), + tr ("Pre&vious Bookmark"), SLOT (request_previous_bookmark (bool))); + m_toggle_bookmark_action = add_action (m_edit_nav_menu, QIcon (), + tr ("Toggle &Bookmark"), SLOT (request_toggle_bookmark (bool))); + m_remove_bookmark_action = add_action (m_edit_nav_menu, QIcon (), + tr ("&Remove All Bookmarks"), SLOT (request_remove_bookmark (bool))); - m_goto_line_action = add_action (m_edit_nav_menu, QIcon (), - tr ("Go &to Line..."), SLOT (request_goto_line (bool))); + m_edit_menu->addSeparator (); - m_edit_cmd_menu->addSeparator (); + m_preferences_action = add_action (m_edit_menu, resource_manager::icon ("preferences-system"), + tr ("&Preferences..."), SLOT (request_preferences (bool))); + m_styles_preferences_action = add_action (m_edit_menu, resource_manager::icon ("preferences-system"), + tr ("&Styles Preferences..."), SLOT (request_styles_preferences (bool))); - m_move_to_matching_brace = add_action (m_edit_nav_menu, QIcon (), - tr ("Move to Matching Brace"), SLOT (request_move_match_brace (bool))); - m_sel_to_matching_brace = add_action (m_edit_nav_menu, QIcon (), - tr ("Select to Matching Brace"), SLOT (request_sel_match_brace (bool))); + // view menu - m_edit_nav_menu->addSeparator (); + QMenu *view_menu = add_menu (m_menu_bar, tr ("&View")); + + m_view_editor_menu = view_menu->addMenu (tr ("&Editor")); - m_next_bookmark_action = add_action (m_edit_nav_menu, QIcon (), - tr ("&Next Bookmark"), SLOT (request_next_bookmark (bool))); - m_previous_bookmark_action = add_action (m_edit_nav_menu, QIcon (), - tr ("Pre&vious Bookmark"), SLOT (request_previous_bookmark (bool))); - m_toggle_bookmark_action = add_action (m_edit_nav_menu, QIcon (), - tr ("Toggle &Bookmark"), SLOT (request_toggle_bookmark (bool))); - m_remove_bookmark_action = add_action (m_edit_nav_menu, QIcon (), - tr ("&Remove All Bookmarks"), SLOT (request_remove_bookmark (bool))); + m_show_linenum_action = add_action (m_view_editor_menu, QIcon (), + tr ("Show &Line Numbers"), SLOT (show_line_numbers (bool))); + m_show_linenum_action->setCheckable (true); - m_edit_menu->addSeparator (); + m_show_whitespace_action = add_action (m_view_editor_menu, QIcon (), + tr ("Show &Whitespace Characters"), SLOT (show_white_space (bool))); + m_show_whitespace_action->setCheckable (true); - m_preferences_action = add_action (m_edit_menu, resource_manager::icon ("preferences-system"), - tr ("&Preferences..."), SLOT (request_preferences (bool))); - m_styles_preferences_action = add_action (m_edit_menu, resource_manager::icon ("preferences-system"), - tr ("&Styles Preferences..."), SLOT (request_styles_preferences (bool))); + m_show_eol_action = add_action (m_view_editor_menu, QIcon (), + tr ("Show Line &Endings"), SLOT (show_eol_chars (bool))); + m_show_eol_action->setCheckable (true); - // view menu - - QMenu *view_menu = add_menu (m_menu_bar, tr ("&View")); - - m_view_editor_menu = view_menu->addMenu (tr ("&Editor")); + m_show_indguide_action = add_action (m_view_editor_menu, QIcon (), + tr ("Show &Indentation Guides"), SLOT (show_indent_guides (bool))); + m_show_indguide_action->setCheckable (true); - m_show_linenum_action = add_action (m_view_editor_menu, QIcon (), - tr ("Show &Line Numbers"), SLOT (show_line_numbers (bool))); - m_show_linenum_action->setCheckable (true); + m_show_longline_action = add_action (m_view_editor_menu, QIcon (), + tr ("Show Long Line &Marker"), SLOT (show_long_line (bool))); + m_show_longline_action->setCheckable (true); - m_show_whitespace_action = add_action (m_view_editor_menu, QIcon (), - tr ("Show &Whitespace Characters"), SLOT (show_white_space (bool))); - m_show_whitespace_action->setCheckable (true); + m_view_editor_menu->addSeparator (); + + m_show_toolbar_action = add_action (m_view_editor_menu, QIcon (), + tr ("Show &Toolbar"), SLOT (show_toolbar (bool))); + m_show_toolbar_action->setCheckable (true); - m_show_eol_action = add_action (m_view_editor_menu, QIcon (), - tr ("Show Line &Endings"), SLOT (show_eol_chars (bool))); - m_show_eol_action->setCheckable (true); + m_show_statusbar_action = add_action (m_view_editor_menu, QIcon (), + tr ("Show &Statusbar"), SLOT (show_statusbar (bool))); + m_show_statusbar_action->setCheckable (true); - m_show_indguide_action = add_action (m_view_editor_menu, QIcon (), - tr ("Show &Indentation Guides"), SLOT (show_indent_guides (bool))); - m_show_indguide_action->setCheckable (true); + m_show_hscrollbar_action = add_action (m_view_editor_menu, QIcon (), + tr ("Show &Horizontal Scrollbar"), SLOT (show_hscrollbar (bool))); + m_show_hscrollbar_action->setCheckable (true); - m_show_longline_action = add_action (m_view_editor_menu, QIcon (), - tr ("Show Long Line &Marker"), SLOT (show_long_line (bool))); - m_show_longline_action->setCheckable (true); + view_menu->addSeparator (); - m_view_editor_menu->addSeparator (); + m_zoom_in_action = add_action (view_menu, resource_manager::icon ("zoom-in"), + tr ("Zoom &In"), SLOT (zoom_in (bool))); + m_zoom_out_action = add_action (view_menu, resource_manager::icon ("zoom-out"), + tr ("Zoom &Out"), SLOT (zoom_out (bool))); + m_zoom_normal_action = add_action (view_menu, QIcon (), + tr ("&Normal Size"), SLOT (zoom_normal (bool))); - m_show_toolbar_action = add_action (m_view_editor_menu, QIcon (), - tr ("Show &Toolbar"), SLOT (show_toolbar (bool))); - m_show_toolbar_action->setCheckable (true); + m_menu_bar->addMenu (view_menu); - m_show_statusbar_action = add_action (m_view_editor_menu, QIcon (), - tr ("Show &Statusbar"), SLOT (show_statusbar (bool))); - m_show_statusbar_action->setCheckable (true); - - m_show_hscrollbar_action = add_action (m_view_editor_menu, QIcon (), - tr ("Show &Horizontal Scrollbar"), SLOT (show_hscrollbar (bool))); - m_show_hscrollbar_action->setCheckable (true); + // debug menu - view_menu->addSeparator (); - - m_zoom_in_action = add_action (view_menu, resource_manager::icon ("zoom-in"), - tr ("Zoom &In"), SLOT (zoom_in (bool))); - m_zoom_out_action = add_action (view_menu, resource_manager::icon ("zoom-out"), - tr ("Zoom &Out"), SLOT (zoom_out (bool))); - m_zoom_normal_action = add_action (view_menu, QIcon (), - tr ("&Normal Size"), SLOT (zoom_normal (bool))); - - m_menu_bar->addMenu (view_menu); + m_debug_menu = add_menu (m_menu_bar, tr ("&Debug")); - // debug menu - - m_debug_menu = add_menu (m_menu_bar, tr ("&Debug")); + m_toggle_breakpoint_action = add_action (m_debug_menu, + resource_manager::icon ("bp-toggle"), tr ("Toggle &Breakpoint"), + SLOT (request_toggle_breakpoint (bool))); + m_next_breakpoint_action = add_action (m_debug_menu, + resource_manager::icon ("bp-next"), tr ("&Next Breakpoint"), + SLOT (request_next_breakpoint (bool))); + m_previous_breakpoint_action = add_action (m_debug_menu, + resource_manager::icon ("bp-prev"), tr ("Pre&vious Breakpoint"), + SLOT (request_previous_breakpoint (bool))); + m_remove_all_breakpoints_action = add_action (m_debug_menu, + resource_manager::icon ("bp-rm-all"), tr ("&Remove All Breakpoints"), + SLOT (request_remove_breakpoint (bool))); - m_toggle_breakpoint_action = add_action (m_debug_menu, - resource_manager::icon ("bp-toggle"), tr ("Toggle &Breakpoint"), - SLOT (request_toggle_breakpoint (bool))); - m_next_breakpoint_action = add_action (m_debug_menu, - resource_manager::icon ("bp-next"), tr ("&Next Breakpoint"), - SLOT (request_next_breakpoint (bool))); - m_previous_breakpoint_action = add_action (m_debug_menu, - resource_manager::icon ("bp-prev"), tr ("Pre&vious Breakpoint"), - SLOT (request_previous_breakpoint (bool))); - m_remove_all_breakpoints_action = add_action (m_debug_menu, - resource_manager::icon ("bp-rm-all"), tr ("&Remove All Breakpoints"), - SLOT (request_remove_breakpoint (bool))); + m_debug_menu->addSeparator (); + + // The other debug actions will be added by the main window. + + // run menu + + QMenu *_run_menu = add_menu (m_menu_bar, tr ("&Run")); - m_debug_menu->addSeparator (); + m_run_action = add_action (_run_menu, resource_manager::icon ("system-run"), + tr ("Save File and Run"), SLOT (request_run_file (bool))); + m_run_selection_action = add_action (_run_menu, QIcon (), + tr ("Run &Selection"), SLOT (request_context_run (bool))); + m_run_selection_action->setEnabled (false); + + // help menu - // The other debug actions will be added by the main window. - - // run menu - - QMenu *_run_menu = add_menu (m_menu_bar, tr ("&Run")); + QMenu *_help_menu = add_menu (m_menu_bar, tr ("&Help")); - m_run_action = add_action (_run_menu, resource_manager::icon ("system-run"), - tr ("Save File and Run"), SLOT (request_run_file (bool))); - m_run_selection_action = add_action (_run_menu, QIcon (), - tr ("Run &Selection"), SLOT (request_context_run (bool))); - m_run_selection_action->setEnabled (false); + m_context_help_action = add_action (_help_menu, QIcon (), + tr ("&Help on Keyword"), SLOT (request_context_help (bool))); + m_context_doc_action = add_action (_help_menu, QIcon (), + tr ("&Documentation on Keyword"), SLOT (request_context_doc (bool))); - // help menu - - QMenu *_help_menu = add_menu (m_menu_bar, tr ("&Help")); + // tab navigation (no menu, only actions) - m_context_help_action = add_action (_help_menu, QIcon (), - tr ("&Help on Keyword"), SLOT (request_context_help (bool))); - m_context_doc_action = add_action (_help_menu, QIcon (), - tr ("&Documentation on Keyword"), SLOT (request_context_doc (bool))); - - // tab navigation (no menu, only actions) + m_switch_left_tab_action = add_action (nullptr, QIcon (), "", + SLOT (switch_left_tab (void))); + m_switch_right_tab_action = add_action (nullptr, QIcon (), "", + SLOT (switch_right_tab (void))); + m_move_tab_left_action = add_action (nullptr, QIcon (), "", + SLOT (move_tab_left (void))); + m_move_tab_right_action = add_action (nullptr, QIcon (), "", + SLOT (move_tab_right (void))); - m_switch_left_tab_action = add_action (nullptr, QIcon (), "", - SLOT (switch_left_tab (void))); - m_switch_right_tab_action = add_action (nullptr, QIcon (), "", - SLOT (switch_right_tab (void))); - m_move_tab_left_action = add_action (nullptr, QIcon (), "", - SLOT (move_tab_left (void))); - m_move_tab_right_action = add_action (nullptr, QIcon (), "", - SLOT (move_tab_right (void))); + // toolbar - // toolbar + // popdown menu with mru files + QToolButton *popdown_button = new QToolButton (); + popdown_button->setToolTip (tr ("Recent Files")); + popdown_button->setMenu (m_mru_file_menu); + popdown_button->setPopupMode (QToolButton::InstantPopup); + popdown_button->setToolButtonStyle (Qt::ToolButtonTextOnly); - // popdown menu with mru files - QToolButton *popdown_button = new QToolButton (); - popdown_button->setToolTip (tr ("Recent Files")); - popdown_button->setMenu (m_mru_file_menu); - popdown_button->setPopupMode (QToolButton::InstantPopup); - popdown_button->setToolButtonStyle (Qt::ToolButtonTextOnly); + // new and open actions are inserted later from main window + m_popdown_mru_action = m_tool_bar->addWidget (popdown_button); + m_tool_bar->addAction (m_save_action); + m_tool_bar->addAction (m_save_as_action); + m_tool_bar->addAction (m_print_action); + m_tool_bar->addSeparator (); + // m_undo_action: later via main window + m_tool_bar->addAction (m_redo_action); + // m_copy_action: later via the main window + m_tool_bar->addAction (m_cut_action); + // m_paste_action: later via the main window + m_tool_bar->addAction (m_find_action); + //m_tool_bar->addAction (m_find_next_action); + //m_tool_bar->addAction (m_find_previous_action); + m_tool_bar->addSeparator (); + m_tool_bar->addAction (m_run_action); + m_tool_bar->addSeparator (); + m_tool_bar->addAction (m_toggle_breakpoint_action); + m_tool_bar->addAction (m_previous_breakpoint_action); + m_tool_bar->addAction (m_next_breakpoint_action); + m_tool_bar->addAction (m_remove_all_breakpoints_action); - // new and open actions are inserted later from main window - m_popdown_mru_action = m_tool_bar->addWidget (popdown_button); - m_tool_bar->addAction (m_save_action); - m_tool_bar->addAction (m_save_as_action); - m_tool_bar->addAction (m_print_action); - m_tool_bar->addSeparator (); - // m_undo_action: later via main window - m_tool_bar->addAction (m_redo_action); - // m_copy_action: later via the main window - m_tool_bar->addAction (m_cut_action); - // m_paste_action: later via the main window - m_tool_bar->addAction (m_find_action); - //m_tool_bar->addAction (m_find_next_action); - //m_tool_bar->addAction (m_find_previous_action); - m_tool_bar->addSeparator (); - m_tool_bar->addAction (m_run_action); - m_tool_bar->addSeparator (); - m_tool_bar->addAction (m_toggle_breakpoint_action); - m_tool_bar->addAction (m_previous_breakpoint_action); - m_tool_bar->addAction (m_next_breakpoint_action); - m_tool_bar->addAction (m_remove_all_breakpoints_action); + // layout + QVBoxLayout *vbox_layout = new QVBoxLayout (); + vbox_layout->addWidget (m_menu_bar); + vbox_layout->addWidget (m_tool_bar); + vbox_layout->addWidget (m_tab_widget); + vbox_layout->setMargin (0); + editor_widget->setLayout (vbox_layout); + setWidget (editor_widget); - // layout - QVBoxLayout *vbox_layout = new QVBoxLayout (); - vbox_layout->addWidget (m_menu_bar); - vbox_layout->addWidget (m_tool_bar); - vbox_layout->addWidget (m_tab_widget); - vbox_layout->setMargin (0); - editor_widget->setLayout (vbox_layout); - setWidget (editor_widget); + // create the context menu of the tab bar + tab_bar *bar = m_tab_widget->get_tab_bar (); + QMenu *ctx_men = bar->get_context_menu (); + ctx_men->addAction (m_close_action); + ctx_men->addAction (m_close_all_action); + ctx_men->addAction (m_close_others_action); + + // signals + connect (this, SIGNAL (execute_command_in_terminal_signal (const QString&)), + main_win (), SLOT (execute_command_in_terminal (const QString&))); - // create the context menu of the tab bar - tab_bar *bar = m_tab_widget->get_tab_bar (); - QMenu *ctx_men = bar->get_context_menu (); - ctx_men->addAction (m_close_action); - ctx_men->addAction (m_close_all_action); - ctx_men->addAction (m_close_others_action); + connect (this, SIGNAL (request_settings_dialog (const QString&)), + main_win (), + SLOT (process_settings_dialog_request (const QString&))); + + connect (m_mru_file_menu, SIGNAL (triggered (QAction *)), + this, SLOT (request_mru_open_file (QAction *))); - // signals - connect (this, SIGNAL (execute_command_in_terminal_signal (const QString&)), - main_win (), SLOT (execute_command_in_terminal (const QString&))); + mru_menu_update (); - connect (this, SIGNAL (request_settings_dialog (const QString&)), - main_win (), - SLOT (process_settings_dialog_request (const QString&))); + connect (m_tab_widget, SIGNAL (tabCloseRequested (int)), + this, SLOT (handle_tab_close_request (int))); + + connect (m_tab_widget, SIGNAL (currentChanged (int)), + this, SLOT (active_tab_changed (int))); - connect (m_mru_file_menu, SIGNAL (triggered (QAction *)), - this, SLOT (request_mru_open_file (QAction *))); + resize (500, 400); + setWindowIcon (QIcon (":/actions/icons/logo.png")); + set_title (tr ("Editor")); - mru_menu_update (); - - connect (m_tab_widget, SIGNAL (tabCloseRequested (int)), - this, SLOT (handle_tab_close_request (int))); + check_actions (); + } - connect (m_tab_widget, SIGNAL (currentChanged (int)), - this, SLOT (active_tab_changed (int))); + void file_editor::add_file_editor_tab (file_editor_tab *f, const QString& fn) + { + m_tab_widget->addTab (f, fn); - resize (500, 400); - setWindowIcon (QIcon (":/actions/icons/logo.png")); - set_title (tr ("Editor")); + // signals from the qscintilla edit area + connect (f->qsci_edit_area (), SIGNAL (status_update (bool, bool)), + this, SLOT (edit_status_update (bool, bool))); - check_actions (); -} + connect (f->qsci_edit_area (), SIGNAL (show_doc_signal (const QString&)), + main_win (), SLOT (handle_show_doc (const QString&))); -void -file_editor::add_file_editor_tab (file_editor_tab *f, const QString& fn) -{ - m_tab_widget->addTab (f, fn); + connect (f->qsci_edit_area (), SIGNAL (create_context_menu_signal (QMenu *)), + this, SLOT (create_context_menu (QMenu *))); - // signals from the qscintilla edit area - connect (f->qsci_edit_area (), SIGNAL (status_update (bool, bool)), - this, SLOT (edit_status_update (bool, bool))); + connect (f->qsci_edit_area (), + SIGNAL (execute_command_in_terminal_signal (const QString&)), + main_win (), SLOT (execute_command_in_terminal (const QString&))); - connect (f->qsci_edit_area (), SIGNAL (show_doc_signal (const QString&)), - main_win (), SLOT (handle_show_doc (const QString&))); + // Signals from the file editor_tab + connect (f, SIGNAL (file_name_changed (const QString&, const QString&)), + this, SLOT (handle_file_name_changed (const QString&, + const QString&))); - connect (f->qsci_edit_area (), SIGNAL (create_context_menu_signal (QMenu *)), - this, SLOT (create_context_menu (QMenu *))); + connect (f, SIGNAL (editor_state_changed (bool, bool)), + this, SLOT (handle_editor_state_changed (bool, bool))); - connect (f->qsci_edit_area (), - SIGNAL (execute_command_in_terminal_signal (const QString&)), - main_win (), SLOT (execute_command_in_terminal (const QString&))); + connect (f, SIGNAL (tab_remove_request ()), + this, SLOT (handle_tab_remove_request ())); - // Signals from the file editor_tab - connect (f, SIGNAL (file_name_changed (const QString&, const QString&)), - this, SLOT (handle_file_name_changed (const QString&, - const QString&))); + connect (f, SIGNAL (add_filename_to_list (const QString&, + const QString&, QWidget*)), + this, SLOT (handle_add_filename_to_list (const QString&, + const QString&, + QWidget*))); - connect (f, SIGNAL (editor_state_changed (bool, bool)), - this, SLOT (handle_editor_state_changed (bool, bool))); + connect (f, SIGNAL (editor_check_conflict_save (const QString&, bool)), + this, SLOT (check_conflict_save (const QString&, bool))); - connect (f, SIGNAL (tab_remove_request ()), - this, SLOT (handle_tab_remove_request ())); + connect (f, SIGNAL (mru_add_file (const QString&, const QString&)), + this, SLOT (handle_mru_add_file (const QString&, const QString&))); - connect (f, SIGNAL (add_filename_to_list (const QString&, - const QString&, QWidget*)), - this, SLOT (handle_add_filename_to_list (const QString&, - const QString&, - QWidget*))); + connect (f, SIGNAL (run_file_signal (const QFileInfo&)), + main_win (), SLOT (run_file_in_terminal (const QFileInfo&))); - connect (f, SIGNAL (editor_check_conflict_save (const QString&, bool)), - this, SLOT (check_conflict_save (const QString&, bool))); + connect (f, SIGNAL (request_open_file (const QString&)), + this, SLOT (request_open_file (const QString&))); - connect (f, SIGNAL (mru_add_file (const QString&, const QString&)), - this, SLOT (handle_mru_add_file (const QString&, const QString&))); - - connect (f, SIGNAL (run_file_signal (const QFileInfo&)), - main_win (), SLOT (run_file_in_terminal (const QFileInfo&))); - - connect (f, SIGNAL (request_open_file (const QString&)), - this, SLOT (request_open_file (const QString&))); + connect (f, SIGNAL (edit_mfile_request (const QString&, const QString&, + const QString&, int)), + main_win (), SLOT (handle_edit_mfile_request (const QString&, + const QString&, + const QString&, int))); - connect (f, SIGNAL (edit_mfile_request (const QString&, const QString&, - const QString&, int)), - main_win (), SLOT (handle_edit_mfile_request (const QString&, - const QString&, - const QString&, int))); + connect (f, SIGNAL (set_focus_editor_signal (QWidget*)), + this, SLOT (set_focus (QWidget*))); - connect (f, SIGNAL (set_focus_editor_signal (QWidget*)), - this, SLOT (set_focus (QWidget*))); + // Signals from the file_editor non-trivial operations + connect (this, SIGNAL (fetab_settings_changed (const QSettings *)), + f, SLOT (notice_settings (const QSettings *))); + + connect (this, SIGNAL (fetab_change_request (const QWidget*)), + f, SLOT (change_editor_state (const QWidget*))); - // Signals from the file_editor non-trivial operations - connect (this, SIGNAL (fetab_settings_changed (const QSettings *)), - f, SLOT (notice_settings (const QSettings *))); + connect (this, SIGNAL (fetab_file_name_query (const QWidget*)), + f, SLOT (file_name_query (const QWidget*))); - connect (this, SIGNAL (fetab_change_request (const QWidget*)), - f, SLOT (change_editor_state (const QWidget*))); + connect (this, SIGNAL (fetab_save_file (const QWidget*, const QString&, + bool)), + f, SLOT (save_file (const QWidget*, const QString&, bool))); - connect (this, SIGNAL (fetab_file_name_query (const QWidget*)), - f, SLOT (file_name_query (const QWidget*))); + connect (this, SIGNAL (fetab_check_modified_file (void)), + f, SLOT (check_modified_file (void))); - connect (this, SIGNAL (fetab_save_file (const QWidget*, const QString&, - bool)), - f, SLOT (save_file (const QWidget*, const QString&, bool))); + connect (f, SIGNAL (execute_command_in_terminal_signal (const QString&)), + main_win (), SLOT (execute_command_in_terminal (const QString&))); - connect (this, SIGNAL (fetab_check_modified_file (void)), - f, SLOT (check_modified_file (void))); + // Signals from the file_editor trivial operations + connect (this, SIGNAL (fetab_recover_from_exit (void)), + f, SLOT (recover_from_exit (void))); - connect (f, SIGNAL (execute_command_in_terminal_signal (const QString&)), - main_win (), SLOT (execute_command_in_terminal (const QString&))); + connect (this, SIGNAL (fetab_set_directory (const QString&)), + f, SLOT (set_current_directory (const QString&))); - // Signals from the file_editor trivial operations - connect (this, SIGNAL (fetab_recover_from_exit (void)), - f, SLOT (recover_from_exit (void))); - - connect (this, SIGNAL (fetab_set_directory (const QString&)), - f, SLOT (set_current_directory (const QString&))); + connect (this, SIGNAL (fetab_zoom_in (const QWidget*)), + f, SLOT (zoom_in (const QWidget*))); + connect (this, SIGNAL (fetab_zoom_out (const QWidget*)), + f, SLOT (zoom_out (const QWidget*))); + connect (this, SIGNAL (fetab_zoom_normal (const QWidget*)), + f, SLOT (zoom_normal (const QWidget*))); - connect (this, SIGNAL (fetab_zoom_in (const QWidget*)), - f, SLOT (zoom_in (const QWidget*))); - connect (this, SIGNAL (fetab_zoom_out (const QWidget*)), - f, SLOT (zoom_out (const QWidget*))); - connect (this, SIGNAL (fetab_zoom_normal (const QWidget*)), - f, SLOT (zoom_normal (const QWidget*))); + connect (this, SIGNAL (fetab_context_help (const QWidget*, bool)), + f, SLOT (context_help (const QWidget*, bool))); - connect (this, SIGNAL (fetab_context_help (const QWidget*, bool)), - f, SLOT (context_help (const QWidget*, bool))); + connect (this, SIGNAL (fetab_context_edit (const QWidget*)), + f, SLOT (context_edit (const QWidget*))); + + connect (this, SIGNAL (fetab_save_file (const QWidget*)), + f, SLOT (save_file (const QWidget*))); - connect (this, SIGNAL (fetab_context_edit (const QWidget*)), - f, SLOT (context_edit (const QWidget*))); + connect (this, SIGNAL (fetab_save_file_as (const QWidget*)), + f, SLOT (save_file_as (const QWidget*))); - connect (this, SIGNAL (fetab_save_file (const QWidget*)), - f, SLOT (save_file (const QWidget*))); + connect (this, SIGNAL (fetab_print_file (const QWidget*)), + f, SLOT (print_file (const QWidget*))); - connect (this, SIGNAL (fetab_save_file_as (const QWidget*)), - f, SLOT (save_file_as (const QWidget*))); + connect (this, SIGNAL (fetab_run_file (const QWidget*)), + f, SLOT (run_file (const QWidget*))); - connect (this, SIGNAL (fetab_print_file (const QWidget*)), - f, SLOT (print_file (const QWidget*))); + connect (this, SIGNAL (fetab_context_run (const QWidget*)), + f, SLOT (context_run (const QWidget*))); - connect (this, SIGNAL (fetab_run_file (const QWidget*)), - f, SLOT (run_file (const QWidget*))); + connect (this, SIGNAL (fetab_toggle_bookmark (const QWidget*)), + f, SLOT (toggle_bookmark (const QWidget*))); - connect (this, SIGNAL (fetab_context_run (const QWidget*)), - f, SLOT (context_run (const QWidget*))); + connect (this, SIGNAL (fetab_next_bookmark (const QWidget*)), + f, SLOT (next_bookmark (const QWidget*))); - connect (this, SIGNAL (fetab_toggle_bookmark (const QWidget*)), - f, SLOT (toggle_bookmark (const QWidget*))); + connect (this, SIGNAL (fetab_previous_bookmark (const QWidget*)), + f, SLOT (previous_bookmark (const QWidget*))); - connect (this, SIGNAL (fetab_next_bookmark (const QWidget*)), - f, SLOT (next_bookmark (const QWidget*))); + connect (this, SIGNAL (fetab_remove_bookmark (const QWidget*)), + f, SLOT (remove_bookmark (const QWidget*))); - connect (this, SIGNAL (fetab_previous_bookmark (const QWidget*)), - f, SLOT (previous_bookmark (const QWidget*))); + connect (this, SIGNAL (fetab_toggle_breakpoint (const QWidget*)), + f, SLOT (toggle_breakpoint (const QWidget*))); - connect (this, SIGNAL (fetab_remove_bookmark (const QWidget*)), - f, SLOT (remove_bookmark (const QWidget*))); + connect (this, SIGNAL (fetab_next_breakpoint (const QWidget*)), + f, SLOT (next_breakpoint (const QWidget*))); - connect (this, SIGNAL (fetab_toggle_breakpoint (const QWidget*)), - f, SLOT (toggle_breakpoint (const QWidget*))); + connect (this, SIGNAL (fetab_previous_breakpoint (const QWidget*)), + f, SLOT (previous_breakpoint (const QWidget*))); - connect (this, SIGNAL (fetab_next_breakpoint (const QWidget*)), - f, SLOT (next_breakpoint (const QWidget*))); + connect (this, SIGNAL (fetab_remove_all_breakpoints (const QWidget*)), + f, SLOT (remove_all_breakpoints (const QWidget*))); - connect (this, SIGNAL (fetab_previous_breakpoint (const QWidget*)), - f, SLOT (previous_breakpoint (const QWidget*))); + connect (this, SIGNAL (fetab_scintilla_command (const QWidget *, + unsigned int)), + f, SLOT (scintilla_command (const QWidget *, unsigned int))); - connect (this, SIGNAL (fetab_remove_all_breakpoints (const QWidget*)), - f, SLOT (remove_all_breakpoints (const QWidget*))); + connect (this, SIGNAL (fetab_comment_selected_text (const QWidget*, bool)), + f, SLOT (comment_selected_text (const QWidget*, bool))); - connect (this, SIGNAL (fetab_scintilla_command (const QWidget *, - unsigned int)), - f, SLOT (scintilla_command (const QWidget *, unsigned int))); + connect (this, SIGNAL (fetab_uncomment_selected_text (const QWidget*)), + f, SLOT (uncomment_selected_text (const QWidget*))); + + connect (this, SIGNAL (fetab_indent_selected_text (const QWidget*)), + f, SLOT (indent_selected_text (const QWidget*))); - connect (this, SIGNAL (fetab_comment_selected_text (const QWidget*, bool)), - f, SLOT (comment_selected_text (const QWidget*, bool))); + connect (this, SIGNAL (fetab_unindent_selected_text (const QWidget*)), + f, SLOT (unindent_selected_text (const QWidget*))); - connect (this, SIGNAL (fetab_uncomment_selected_text (const QWidget*)), - f, SLOT (uncomment_selected_text (const QWidget*))); - - connect (this, SIGNAL (fetab_indent_selected_text (const QWidget*)), - f, SLOT (indent_selected_text (const QWidget*))); + connect (this, SIGNAL (fetab_smart_indent_line_or_selected_text (const QWidget*)), + f, SLOT (smart_indent_line_or_selected_text (const QWidget*))); - connect (this, SIGNAL (fetab_unindent_selected_text (const QWidget*)), - f, SLOT (unindent_selected_text (const QWidget*))); + connect (this, + SIGNAL (fetab_convert_eol (const QWidget*, QsciScintilla::EolMode)), + f, SLOT (convert_eol (const QWidget*, QsciScintilla::EolMode))); - connect (this, SIGNAL (fetab_smart_indent_line_or_selected_text (const QWidget*)), - f, SLOT (smart_indent_line_or_selected_text (const QWidget*))); + connect (this, SIGNAL (fetab_find (const QWidget*, QList<QAction *>)), + f, SLOT (find (const QWidget*, QList<QAction *>))); - connect (this, - SIGNAL (fetab_convert_eol (const QWidget*, QsciScintilla::EolMode)), - f, SLOT (convert_eol (const QWidget*, QsciScintilla::EolMode))); + connect (this, SIGNAL (fetab_find_next (const QWidget*)), + f, SLOT (find_next (const QWidget*))); - connect (this, SIGNAL (fetab_find (const QWidget*, QList<QAction *>)), - f, SLOT (find (const QWidget*, QList<QAction *>))); + connect (this, SIGNAL (fetab_find_previous (const QWidget*)), + f, SLOT (find_previous (const QWidget*))); - connect (this, SIGNAL (fetab_find_next (const QWidget*)), - f, SLOT (find_next (const QWidget*))); + connect (this, SIGNAL (fetab_goto_line (const QWidget*, int)), + f, SLOT (goto_line (const QWidget*, int))); - connect (this, SIGNAL (fetab_find_previous (const QWidget*)), - f, SLOT (find_previous (const QWidget*))); + connect (this, SIGNAL (fetab_move_match_brace (const QWidget*, bool)), + f, SLOT (move_match_brace (const QWidget*, bool))); - connect (this, SIGNAL (fetab_goto_line (const QWidget*, int)), - f, SLOT (goto_line (const QWidget*, int))); + connect (this, SIGNAL (fetab_completion (const QWidget*)), + f, SLOT (show_auto_completion (const QWidget*))); - connect (this, SIGNAL (fetab_move_match_brace (const QWidget*, bool)), - f, SLOT (move_match_brace (const QWidget*, bool))); + connect (this, SIGNAL (fetab_set_focus (const QWidget*)), + f, SLOT (set_focus (const QWidget*))); - connect (this, SIGNAL (fetab_completion (const QWidget*)), - f, SLOT (show_auto_completion (const QWidget*))); + connect (this, SIGNAL (fetab_insert_debugger_pointer (const QWidget*, int)), + f, SLOT (insert_debugger_pointer (const QWidget*, int))); - connect (this, SIGNAL (fetab_set_focus (const QWidget*)), - f, SLOT (set_focus (const QWidget*))); + connect (this, SIGNAL (fetab_delete_debugger_pointer (const QWidget*, int)), + f, SLOT (delete_debugger_pointer (const QWidget*, int))); - connect (this, SIGNAL (fetab_insert_debugger_pointer (const QWidget*, int)), - f, SLOT (insert_debugger_pointer (const QWidget*, int))); + connect (this, SIGNAL (fetab_do_breakpoint_marker (bool, const QWidget*, + int, const QString&)), + f, SLOT (do_breakpoint_marker (bool, const QWidget*, int, + const QString&))); - connect (this, SIGNAL (fetab_delete_debugger_pointer (const QWidget*, int)), - f, SLOT (delete_debugger_pointer (const QWidget*, int))); + m_tab_widget->setCurrentWidget (f); - connect (this, SIGNAL (fetab_do_breakpoint_marker (bool, const QWidget*, - int, const QString&)), - f, SLOT (do_breakpoint_marker (bool, const QWidget*, int, - const QString&))); + check_actions (); + } - m_tab_widget->setCurrentWidget (f); - - check_actions (); -} + void file_editor::mru_menu_update (void) + { + int num_files = qMin (m_mru_files.size (), int (MaxMRUFiles)); -void -file_editor::mru_menu_update (void) -{ - int num_files = qMin (m_mru_files.size (), int (MaxMRUFiles)); + // configure and show active actions of mru-menu + for (int i = 0; i < num_files; ++i) + { + QString text = tr ("&%1 %2"). + arg ((i+1) % int (MaxMRUFiles)).arg (m_mru_files.at (i)); + m_mru_file_actions[i]->setText (text); - // configure and show active actions of mru-menu - for (int i = 0; i < num_files; ++i) - { - QString text = tr ("&%1 %2"). - arg ((i+1) % int (MaxMRUFiles)).arg (m_mru_files.at (i)); - m_mru_file_actions[i]->setText (text); + QStringList action_data; + action_data << m_mru_files.at (i) << m_mru_files_encodings.at (i); + m_mru_file_actions[i]->setData (action_data); + + m_mru_file_actions[i]->setVisible (true); + } - QStringList action_data; - action_data << m_mru_files.at (i) << m_mru_files_encodings.at (i); - m_mru_file_actions[i]->setData (action_data); + // hide unused mru-menu entries + for (int j = num_files; j < MaxMRUFiles; ++j) + m_mru_file_actions[j]->setVisible (false); - m_mru_file_actions[i]->setVisible (true); - } - - // hide unused mru-menu entries - for (int j = num_files; j < MaxMRUFiles; ++j) - m_mru_file_actions[j]->setVisible (false); + // delete entries in string-list beyond MaxMRUFiles + while (m_mru_files.size () > MaxMRUFiles) + { + m_mru_files.removeLast (); + m_mru_files_encodings.removeLast (); + } - // delete entries in string-list beyond MaxMRUFiles - while (m_mru_files.size () > MaxMRUFiles) - { - m_mru_files.removeLast (); - m_mru_files_encodings.removeLast (); - } + // save actual mru-list in settings + QSettings *settings = resource_manager::get_settings (); + + settings->setValue ("editor/mru_file_list", m_mru_files); + settings->setValue ("editor/mru_file_encodings", m_mru_files_encodings); + settings->sync (); + } - // save actual mru-list in settings - QSettings *settings = resource_manager::get_settings (); + bool file_editor::call_custom_editor (const QString& file_name, int line) + { + // Check if the user wants to use a custom file editor. + QSettings *settings = resource_manager::get_settings (); - settings->setValue ("editor/mru_file_list", m_mru_files); - settings->setValue ("editor/mru_file_encodings", m_mru_files_encodings); - settings->sync (); -} + if (settings->value ("useCustomFileEditor",false).toBool ()) + { + // use the external editor interface for handling the call + emit request_open_file_external (file_name, line); -bool -file_editor::call_custom_editor (const QString& file_name, int line) -{ - // Check if the user wants to use a custom file editor. - QSettings *settings = resource_manager::get_settings (); + if (line < 0 && ! file_name.isEmpty ()) + handle_mru_add_file (QFileInfo (file_name).canonicalFilePath (), + QString ()); + + return true; + } - if (settings->value ("useCustomFileEditor",false).toBool ()) - { - // use the external editor interface for handling the call - emit request_open_file_external (file_name, line); + return false; + } - if (line < 0 && ! file_name.isEmpty ()) - handle_mru_add_file (QFileInfo (file_name).canonicalFilePath (), - QString ()); - - return true; - } - - return false; -} + void file_editor::toggle_preference (const QString& preference, bool def) + { + QSettings *settings = resource_manager::get_settings (); + bool old = settings->value (preference,def).toBool (); + settings->setValue (preference,! old); + notice_settings (settings); + } -void -file_editor::toggle_preference (const QString& preference, bool def) -{ - QSettings *settings = resource_manager::get_settings (); - bool old = settings->value (preference,def).toBool (); - settings->setValue (preference,! old); - notice_settings (settings); -} + void file_editor::switch_tab (int direction, bool movetab) + { + int tabs = m_tab_widget->count (); -void -file_editor::switch_tab (int direction, bool movetab) -{ - int tabs = m_tab_widget->count (); + if (tabs < 2) + return; - if (tabs < 2) - return; + int old_pos = m_tab_widget->currentIndex (); + int new_pos = m_tab_widget->currentIndex () + direction; + + if (new_pos < 0 || new_pos >= tabs) + new_pos = new_pos - direction*tabs; - int old_pos = m_tab_widget->currentIndex (); - int new_pos = m_tab_widget->currentIndex () + direction; - - if (new_pos < 0 || new_pos >= tabs) - new_pos = new_pos - direction*tabs; - - if (movetab) - { + if (movetab) + { #if defined (HAVE_QTABWIDGET_SETMOVABLE) - m_tab_widget->tabBar ()->moveTab (old_pos, new_pos); - m_tab_widget->setCurrentIndex (old_pos); - m_tab_widget->setCurrentIndex (new_pos); - focus (); + m_tab_widget->tabBar ()->moveTab (old_pos, new_pos); + m_tab_widget->setCurrentIndex (old_pos); + m_tab_widget->setCurrentIndex (new_pos); + focus (); #endif - } - else - m_tab_widget->setCurrentIndex (new_pos); -} + } + else + m_tab_widget->setCurrentIndex (new_pos); + } + + // Function for closing the files in a removed directory + void file_editor::handle_dir_remove (const QString& old_name, + const QString& new_name) + { + QDir old_dir (old_name); -// Function for closing the files in a removed directory -void -file_editor::handle_dir_remove (const QString& old_name, - const QString& new_name) -{ - QDir old_dir (old_name); - - // Have all file editor tabs signal what their filenames are. - m_editor_tab_map.clear (); - emit fetab_file_name_query (nullptr); + // Have all file editor tabs signal what their filenames are. + m_editor_tab_map.clear (); + emit fetab_file_name_query (nullptr); - // Loop over all open files and pick those within old_dir - for (editor_tab_map_const_iterator p = m_editor_tab_map.begin (); - p != m_editor_tab_map.end (); p++) - { - QString rel_path_to_file = old_dir.relativeFilePath (p->first); - if (rel_path_to_file.left (3) != QString ("../")) - { - // We directly go down from old_dir to reach our file: Our - // file is included in the removed/renamed diectory. - // Thus delete it. - m_no_focus = true; // Remember for not focussing editor - file_editor_tab *editor_tab + // Loop over all open files and pick those within old_dir + for (editor_tab_map_const_iterator p = m_editor_tab_map.begin (); + p != m_editor_tab_map.end (); p++) + { + QString rel_path_to_file = old_dir.relativeFilePath (p->first); + if (rel_path_to_file.left (3) != QString ("../")) + { + // We directly go down from old_dir to reach our file: Our + // file is included in the removed/renamed diectory. + // Thus delete it. + m_no_focus = true; // Remember for not focussing editor + file_editor_tab *editor_tab = static_cast<file_editor_tab *> (p->second.fet_ID); - editor_tab->file_has_changed (QString (), true); // Close - m_no_focus = false; // Back to normal + editor_tab->file_has_changed (QString (), true); // Close + m_no_focus = false; // Back to normal - // Store file for possible later reload - m_tmp_closed_files << p->first; + // Store file for possible later reload + m_tmp_closed_files << p->first; - // Add the new file path and the encoding for later reloading - // if new_name is given - if (! new_name.isEmpty ()) - { - QDir new_dir (new_name); - m_tmp_closed_files << new_dir.absoluteFilePath (rel_path_to_file); - } - else - m_tmp_closed_files << ""; // no new name, just removing this file + // Add the new file path and the encoding for later reloading + // if new_name is given + if (! new_name.isEmpty ()) + { + QDir new_dir (new_name); + m_tmp_closed_files << new_dir.absoluteFilePath (rel_path_to_file); + } + else + m_tmp_closed_files << ""; // no new name, just removing this file + + m_tmp_closed_files << p->second.encoding; // store the encoding + } + } + } - m_tmp_closed_files << p->second.encoding; // store the encoding - } - } -} + bool file_editor::editor_tab_has_focus (void) + { + QWidget *foc_w = focusWidget (); + if (foc_w && foc_w->inherits ("octave_qscintilla")) + return true; + return false; + } -bool -file_editor::editor_tab_has_focus (void) -{ - QWidget *foc_w = focusWidget (); - if (foc_w && foc_w->inherits ("octave_qscintilla")) - return true; - return false; -} + // Check whether this file is already open in the editor. + QWidget * file_editor::find_tab_widget (const QString& file) + { + // Have all file editor tabs signal what their filenames are. + m_editor_tab_map.clear (); + emit fetab_file_name_query (nullptr); -// Check whether this file is already open in the editor. -QWidget * -file_editor::find_tab_widget (const QString& file) -{ - // Have all file editor tabs signal what their filenames are. - m_editor_tab_map.clear (); - emit fetab_file_name_query (nullptr); - - // Check all tabs for the given file name - QWidget *retval = nullptr; + // Check all tabs for the given file name + QWidget *retval = nullptr; - for (editor_tab_map_const_iterator p = m_editor_tab_map.begin (); - p != m_editor_tab_map.end (); p++) - { - QString tab_file = p->first; - if (same_file (file.toStdString (), tab_file.toStdString ()) - || file == tab_file) // needed as same_file ("","") is false. - { - retval = p->second.fet_ID; - break; - } - } + for (editor_tab_map_const_iterator p = m_editor_tab_map.begin (); + p != m_editor_tab_map.end (); p++) + { + QString tab_file = p->first; + if (same_file (file.toStdString (), tab_file.toStdString ()) + || file == tab_file) // needed as same_file ("","") is false. + { + retval = p->second.fet_ID; + break; + } + } + + return retval; + } - return retval; -} - -QAction* -file_editor::add_action (QMenu *menu, const QIcon& icon, const QString& text, - const char *member) -{ - QAction *a; + QAction* file_editor::add_action (QMenu *menu, const QIcon& icon, + const QString& text, const char *member) + { + QAction *a; - if (menu) - a = menu->addAction (icon, text, this, member); - else - { - a = new QAction (this); - connect (a, SIGNAL (triggered ()), this, member); - } + if (menu) + a = menu->addAction (icon, text, this, member); + else + { + a = new QAction (this); + connect (a, SIGNAL (triggered ()), this, member); + } - addAction (a); // important for shortcut context - a->setShortcutContext (Qt::WidgetWithChildrenShortcut); + addAction (a); // important for shortcut context + a->setShortcutContext (Qt::WidgetWithChildrenShortcut); - return a; -} + return a; + } -QMenu* -file_editor::add_menu (QMenuBar *p, QString name) -{ - QMenu *menu = p->addMenu (name); + QMenu* file_editor::add_menu (QMenuBar *p, QString name) + { + QMenu *menu = p->addMenu (name); - QString base_name = name; // get a copy - // replace intended '&' ("&&") by a temp. string - base_name.replace ("&&", "___octave_amp_replacement___"); - // remove single '&' (shortcut) - base_name.remove ("&"); - // restore intended '&' - base_name.replace ("___octave_amp_replacement___", "&&"); + QString base_name = name; // get a copy + // replace intended '&' ("&&") by a temp. string + base_name.replace ("&&", "___octave_amp_replacement___"); + // remove single '&' (shortcut) + base_name.remove ("&"); + // restore intended '&' + base_name.replace ("___octave_amp_replacement___", "&&"); - // remember names with and without shortcut - m_hash_menu_text[menu] = QStringList () << name << base_name; + // remember names with and without shortcut + m_hash_menu_text[menu] = QStringList () << name << base_name; - return menu; + return menu; + } } #endif