view libgui/src/files-dock-widget.h @ 23920:0b971884080c

reload editor files when removing was not successful (bug #43922) * files-dock-widget.cc (contextmenu_rename): emit the signal for reloading the files from their new location with the state of the renaming allowing to reload the files from the old locations, (contextmenu_delete): emit the signal for reloading files if the removing was not successful allowing to reload the not removed files, * files-dock-widget.h: signal file_renamed_signal with boolean parameter * file-editor.cc (handle_file_remove): clear list of temporary closed files right at the beginning of this method, if an editor file is going to be removed or renamed, store the old file name at first in the file list, then the new file name (or an empty string) and finally the encoding; (handle_dir_remove): clear the closed file list at the beginning, store name of old file, new file (or empty string) and encoding into the list is a file is affected by renaming or removing the directory; (handle_file_renamed): new boolean parameter, which decides whether the old or the new file is loaded into the editor * file-editor.h: boolean parameter for handle_file_renamed; list of temporarily closed files contains old name, new name, and encoding * main-window.cc (construct): update signal connection due to new boolean parameter
author Torsten <mttl@mailbox.org>
date Tue, 15 Aug 2017 22:00:06 +0200
parents 8fa415ff2cb3
children bffd7d826887
line wrap: on
line source

/*

Copyright (C) 2011-2017 Jacob Dawid

This file is part of Octave.

Octave is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

Octave is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Octave; see the file COPYING.  If not, see
<http://www.gnu.org/licenses/>.

*/

#if ! defined (octave_files_dock_widget_h)
#define octave_files_dock_widget_h 1

#include <QListView>
#include <QDate>
#include <QObject>
#include <QWidget>
#include <QListWidget>
#include <QFileSystemModel>
#include <QToolBar>
#include <QToolButton>
#include <QVBoxLayout>
#include <QAction>
#include <QTreeView>
#include <QMouseEvent>
#include <QSignalMapper>

#include <QComboBox>
#include "octave-dock-widget.h"

/**
   @class files_dock_widget
   @brief Dock widget to display files in the current directory.
*/
class files_dock_widget : public octave_dock_widget
{
  Q_OBJECT

public:

  files_dock_widget (QWidget *parent = nullptr);

  ~files_dock_widget (void) = default;

public slots:

  /** Slot for handling a change in directory via double click. */
  void item_double_clicked (const QModelIndex & index);

  /** Slot for handling the up-directory button in the toolbar. */
  void change_directory_up ();

  /** Slot for handling the sync octave directory button in the toolbar. */
  void do_sync_octave_directory ();

  /** Slot for handling the sync browser directory button in the toolbar. */
  void do_sync_browser_directory ();

  /** Sets the current directory being displayed. */
  void set_current_directory (const QString& dir);

  /** Accepts user input a the line edit for the current directory. */
  void accept_directory_line_edit ();

  /** set the internal variable that holds the actual octave variable **/
  void update_octave_directory (const QString& dir);

  /** Tells the widget to react on changed settings. */
  void notice_settings (const QSettings *settings);

  void save_settings (void);

private slots:

  void headercontextmenu_requested (const QPoint& pos);
  void toggle_header (int col);

  /** context menu wanted */
  void contextmenu_requested (const QPoint& pos);
  /* context menu actions */
  void contextmenu_open (bool);
  void contextmenu_open_in_editor (bool);
  void contextmenu_open_in_app (bool);
  void contextmenu_copy_selection (bool);
  void contextmenu_run (bool);
  void contextmenu_load (bool);
  void contextmenu_rename (bool);
  void contextmenu_delete (bool);
  void contextmenu_newfile (bool);
  void contextmenu_newdir (bool);
  void contextmenu_setcurrentdir (bool);
  void contextmenu_findfiles (bool);

  /* popdown menu options */
  void popdownmenu_newfile (bool);
  void popdownmenu_newdir (bool);
  void popdownmenu_search_dir (bool);
  void popdownmenu_findfiles (bool);
  void popdownmenu_home (bool);

  /* from octave_doc_widget */
  void copyClipboard ();
  void pasteClipboard ();
  void selectAll ();

signals:

  /** Emitted, whenever the user requested to open a file. */
  void open_file (const QString& fileName);

  /** Emitted, whenever the currently displayed directory changed. */
  void displayed_directory_changed (const QString& dir);

  /** Emitted, whenever the user requested to load a file. */
  void load_file_signal (const QString& fileName);

  /** Emitted, whenever the user requested to run a file. */
  void run_file_signal (const QFileInfo& info);

  /** Emitted, whenever wants to search for a file . */
  void find_files_signal (const QString& startdir);

  /** Emitted, whenever the user removes or renames a file. */
  void file_remove_signal (const QString& old_name, const QString& new_name);

  /** Emitted, when a file or directory is renamed. */
  void file_renamed_signal (bool);

private:
  void process_new_file (const QString& parent_name);
  void process_new_dir (const QString& parent_name);
  void process_set_current_dir (const QString& parent_name);
  void process_find_files (const QString& dir_name);

  /** set a new directory or open a file **/
  void display_directory (const QString& dir, bool set_octave_dir = true);

  void open_item_in_app (const QModelIndex& index);

  /** Variables for the actions **/
  QToolBar *        _navigation_tool_bar;
  QAction *         _sync_octave_directory_action;
  QAction *         _sync_browser_directory_action;

  /** The file system model. */
  QFileSystemModel *_file_system_model;

  /** The file system view. */
  QTreeView *       _file_tree_view;
  QComboBox *       _current_directory;

  /** Internal variables **/
  bool              _sync_octave_dir;    // flag if syncing with octave
  QString           _octave_dir;         // the actual octave dir

  enum { MaxMRUDirs = 10 };

  QStringList _columns_shown;
  QStringList _columns_shown_keys;
  QSignalMapper *_sig_mapper;
};

#endif