Mercurial > hg > octave-nkf
view libgui/src/files-dock-widget.cc @ 20068:19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Try to wrap long lines to < 80 characters.
Use GNU style and don't indent first brace of function definition.
"case" statement is aligned flush left with brace of switch stmt.
Remove trailing '\' line continuation from the end of #define macros.
Use 2 spaces for indent.
* files-dock-widget.cc, history-dock-widget.cc, main-window.cc, octave-cmd.cc,
octave-dock-widget.cc, octave-gui.cc, resource-manager.cc, settings-dialog.cc,
shortcut-manager.cc, welcome-wizard.cc, workspace-view.cc, cellfun.cc, data.cc,
debug.cc, debug.h, dirfns.cc, error.h, file-io.cc, gl-render.cc, gl-render.h,
gl2ps-renderer.h, graphics.cc, graphics.in.h, help.cc, input.cc, load-path.cc,
load-path.h, lookup.cc, lu.cc, oct-stream.cc, octave-default-image.h,
ordschur.cc, pr-output.cc, qz.cc, strfns.cc, symtab.cc, symtab.h, sysdep.cc,
variables.cc, zfstream.h, __fltk_uigetfile__.cc, __init_fltk__.cc,
__magick_read__.cc, __osmesa_print__.cc, audiodevinfo.cc, ov-classdef.cc,
ov-classdef.h, ov-fcn.h, ov-float.cc, ov-flt-complex.cc, ov-java.cc,
ov-range.cc, ov-re-mat.cc, ov-usr-fcn.h, ov.cc, op-int.h, options-usage.h,
pt-eval.cc, Array-C.cc, Array-fC.cc, Array.cc, Array.h, PermMatrix.cc,
Sparse.cc, chMatrix.h, dSparse.cc, dim-vector.h, bsxfun-decl.h, bsxfun-defs.cc,
oct-norm.cc, Sparse-op-defs.h, oct-inttypes.cc, oct-inttypes.h, main.in.cc,
mkoctfile.in.cc: Cleanup C++ code to follow Octave coding conventions.
author | Rik <rik@octave.org> |
---|---|
date | Wed, 25 Feb 2015 11:55:49 -0800 |
parents | 597fc0fd8e54 |
children | a8a5415b05cb |
line wrap: on
line source
/* Copyright (C) 2013-2015 John P. Swensen Copyright (C) 2011-2015 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/>. */ #ifdef HAVE_CONFIG_H #include <config.h> #endif #include "resource-manager.h" #include "files-dock-widget.h" #include <QApplication> #include <QClipboard> #include <QFileInfo> #include <QCompleter> #include <QProcess> #include <QDebug> #include <QHeaderView> #include <QLineEdit> #include <QSizePolicy> #include <QMenu> #include <QInputDialog> #include <QMessageBox> #include <QToolButton> #include <QUrl> #include <QDesktopServices> #include <QFileDialog> #include "load-save.h" class FileTreeViewer : public QTreeView { public: FileTreeViewer (QWidget *p) : QTreeView (p) { } void mousePressEvent (QMouseEvent *e) { if (e->button () != Qt::RightButton) QTreeView::mousePressEvent (e); } }; files_dock_widget::files_dock_widget (QWidget *p) : octave_dock_widget (p) { setObjectName ("FilesDockWidget"); setWindowIcon (QIcon (":/actions/icons/logo.png")); set_title (tr ("File Browser")); setToolTip (tr ("Browse your files.")); QWidget *container = new QWidget (this); setWidget (container); connect (this, SIGNAL (open_file (const QString&)), main_win (), SLOT (open_file (const QString&))); connect (this, SIGNAL (displayed_directory_changed (const QString&)), main_win (), SLOT (set_current_working_directory (const QString&))); // Create a toolbar _navigation_tool_bar = new QToolBar ("", container); _navigation_tool_bar->setAllowedAreas (Qt::TopToolBarArea); _navigation_tool_bar->setMovable (false); _current_directory = new QComboBox (_navigation_tool_bar); _current_directory->setToolTip (tr ("Enter the path or filename")); _current_directory->setEditable (true); _current_directory->setMaxCount (MaxMRUDirs); _current_directory->setInsertPolicy (QComboBox::NoInsert); _current_directory->setSizeAdjustPolicy ( QComboBox::AdjustToMinimumContentsLengthWithIcon); QSizePolicy sizePol (QSizePolicy::Expanding, QSizePolicy::Preferred); _current_directory->setSizePolicy (sizePol); QAction *directory_up_action = new QAction (QIcon (":/actions/icons/up.png"), "", _navigation_tool_bar); directory_up_action->setToolTip (tr ("Move up one directory")); _sync_browser_directory_action = new QAction (QIcon (":/actions/icons/reload.png"), tr ("Show Octave directory"), _navigation_tool_bar); _sync_browser_directory_action->setToolTip ( tr ("Go to current Octave directory")); _sync_browser_directory_action->setEnabled ("false"); _sync_octave_directory_action = new QAction (QIcon (":/actions/icons/ok.png"), tr ("Set Octave directory"), _navigation_tool_bar); _sync_octave_directory_action->setToolTip ( tr ("Set Octave directroy to current browser directory")); _sync_octave_directory_action->setEnabled ("false"); QToolButton * popdown_button = new QToolButton (); popdown_button->setToolTip (tr ("Actions on current directory")); QMenu * popdown_menu = new QMenu (); popdown_menu->addAction (QIcon (":/actions/icons/home.png"), tr ("Show Home Directory"), this, SLOT (popdownmenu_home (bool))); popdown_menu->addAction (_sync_browser_directory_action); popdown_menu->addAction (_sync_octave_directory_action); popdown_button->setMenu (popdown_menu); popdown_button->setPopupMode (QToolButton::InstantPopup); popdown_button->setDefaultAction (new QAction ( QIcon (":/actions/icons/gear.png"), "", _navigation_tool_bar)); popdown_menu->addSeparator (); popdown_menu->addAction (QIcon (":/actions/icons/folder.png"), tr ("Set Browser Directory..."), this, SLOT (popdownmenu_search_dir (bool))); popdown_menu->addSeparator (); popdown_menu->addAction (QIcon (":/actions/icons/findf.png"), tr ("Find Files..."), this, SLOT (popdownmenu_findfiles (bool))); popdown_menu->addSeparator (); popdown_menu->addAction (QIcon (":/actions/icons/filenew.png"), tr ("New File..."), this, SLOT (popdownmenu_newfile (bool))); popdown_menu->addAction (QIcon (":/actions/icons/folder_new.png"), tr ("New Directory..."), this, SLOT (popdownmenu_newdir (bool))); _navigation_tool_bar->addWidget (_current_directory); _navigation_tool_bar->addAction (directory_up_action); _navigation_tool_bar->addWidget (popdown_button); connect (directory_up_action, SIGNAL (triggered ()), this, SLOT (change_directory_up ())); connect (_sync_octave_directory_action, SIGNAL (triggered ()), this, SLOT (do_sync_octave_directory ())); connect (_sync_browser_directory_action, SIGNAL (triggered ()), this, SLOT (do_sync_browser_directory ())); QSettings *settings = resource_manager::get_settings (); // FIXME: what should happen if settings is 0? // Create the QFileSystemModel starting in the desired directory QDir startup_dir; // take current dir if (settings->value ("filesdockwidget/restore_last_dir",false).toBool ()) { // restore last dir from previous session QStringList last_dirs = settings->value ("filesdockwidget/mru_dir_list").toStringList (); if (last_dirs.length () > 0) startup_dir = QDir (last_dirs.at (0)); // last dir in previous session } else if (! settings->value ("filesdockwidget/startup_dir").toString ().isEmpty ()) { // do not restore but there is a startup dir configured startup_dir = QDir (settings->value ("filesdockwidget/startup_dir").toString ()); } if (! startup_dir.exists ()) { // the configured startup dir does not exist, take actual one startup_dir = QDir (); } _file_system_model = new QFileSystemModel (this); if (settings->value ("filesdockwidget/showHiddenFiles",false).toBool ()) { _file_system_model->setFilter (QDir::NoDotAndDotDot | QDir::AllEntries | QDir::Hidden); } else { _file_system_model->setFilter (QDir::NoDotAndDotDot | QDir::AllEntries); } QModelIndex rootPathIndex = _file_system_model->setRootPath ( startup_dir.absolutePath ()); // Attach the model to the QTreeView and set the root index _file_tree_view = new FileTreeViewer (container); _file_tree_view->setSelectionMode (QAbstractItemView::ExtendedSelection); _file_tree_view->setModel (_file_system_model); _file_tree_view->setRootIndex (rootPathIndex); _file_tree_view->setSortingEnabled (true); _file_tree_view->setAlternatingRowColors (true); _file_tree_view->setAnimated (true); _file_tree_view->setToolTip ( tr ("Activate to open in editor, right click for alternatives")); // get sort column and order as well as cloumn state (order and width) _file_tree_view->sortByColumn ( settings->value ("filesdockwidget/sort_files_by_column",0).toInt (), static_cast<Qt::SortOrder> (settings->value ("filesdockwidget/sort_files_by_order", Qt::AscendingOrder).toUInt ()) ); _file_tree_view->header ()->restoreState ( settings->value ("filesdockwidget/column_state").toByteArray ()); QStringList mru_dirs = settings->value ("filesdockwidget/mru_dir_list").toStringList (); _current_directory->addItems (mru_dirs); _current_directory->setEditText ( _file_system_model->fileInfo (rootPathIndex). absoluteFilePath ()); connect (_file_tree_view, SIGNAL (activated (const QModelIndex &)), this, SLOT (item_double_clicked (const QModelIndex &))); // add context menu to tree_view _file_tree_view->setContextMenuPolicy (Qt::CustomContextMenu); connect (_file_tree_view, SIGNAL (customContextMenuRequested (const QPoint &)), this, SLOT (contextmenu_requested (const QPoint &))); _file_tree_view->header()->setContextMenuPolicy (Qt::CustomContextMenu); connect (_file_tree_view->header(), SIGNAL (customContextMenuRequested (const QPoint &)), this, SLOT (headercontextmenu_requested (const QPoint &))); // Layout the widgets vertically with the toolbar on top QVBoxLayout *vbox_layout = new QVBoxLayout (); vbox_layout->setSpacing (0); vbox_layout->addWidget (_navigation_tool_bar); vbox_layout->addWidget (_file_tree_view); vbox_layout->setMargin (1); container->setLayout (vbox_layout); // TODO: Add right-click contextual menus for copying, pasting, // deleting files (and others). connect (_current_directory->lineEdit (), SIGNAL (returnPressed ()), this, SLOT (accept_directory_line_edit ())); connect (_current_directory, SIGNAL (activated (const QString &)), this, SLOT (set_current_directory (const QString &))); connect (this, SIGNAL (run_file_signal (const QFileInfo&)), main_win (), SLOT (run_file_in_terminal (const QFileInfo&))); QCompleter *completer = new QCompleter (_file_system_model, this); _current_directory->setCompleter (completer); setFocusProxy (_current_directory); _sync_octave_dir = true; // default, overwirtten with notice_settings () _octave_dir = ""; } files_dock_widget::~files_dock_widget () { QSettings *settings = resource_manager::get_settings (); int sort_column = _file_tree_view->header ()->sortIndicatorSection (); Qt::SortOrder sort_order = _file_tree_view->header ()->sortIndicatorOrder (); settings->setValue ("filesdockwidget/sort_files_by_column", sort_column); settings->setValue ("filesdockwidget/sort_files_by_order", sort_order); settings->setValue ("filesdockwidget/column_state", _file_tree_view->header ()->saveState ()); QStringList dirs; for (int i=0; i< _current_directory->count (); i++) { dirs.append (_current_directory->itemText (i)); } settings->setValue ("filesdockwidget/mru_dir_list", dirs); settings->sync (); } void files_dock_widget::item_double_clicked (const QModelIndex& index) { // Retrieve the file info associated with the model index. QFileInfo fileInfo = _file_system_model->fileInfo (index); set_current_directory (fileInfo.absoluteFilePath ()); } void files_dock_widget::set_current_directory (const QString& dir) { display_directory (dir); } void files_dock_widget::accept_directory_line_edit (void) { display_directory (_current_directory->currentText ()); } void files_dock_widget::change_directory_up (void) { QDir dir = QDir (_file_system_model->filePath (_file_tree_view->rootIndex ())); dir.cdUp (); display_directory (dir.absolutePath ()); } void files_dock_widget::do_sync_octave_directory (void) { QDir dir = QDir (_file_system_model->filePath (_file_tree_view->rootIndex ())); emit displayed_directory_changed (dir.absolutePath ()); } void files_dock_widget::do_sync_browser_directory (void) { display_directory (_octave_dir,false); // false: no sync of octave dir } void files_dock_widget::update_octave_directory (const QString& dir) { _octave_dir = dir; if (_sync_octave_dir) display_directory (_octave_dir,false); // false: no sync of octave dir } void files_dock_widget::display_directory (const QString& dir, bool set_octave_dir) { QFileInfo fileInfo (dir); if (fileInfo.exists ()) { if (fileInfo.isDir ()) { _file_tree_view->setRootIndex (_file_system_model-> index (fileInfo.absoluteFilePath ())); _file_system_model->setRootPath (fileInfo.absoluteFilePath ()); _file_system_model->sort (0, Qt::AscendingOrder); if (_sync_octave_dir && set_octave_dir) process_set_current_dir (fileInfo.absoluteFilePath ()); // see if its in the list, and if it is, // remove it and then, put at top of the list int index = _current_directory->findText (fileInfo.absoluteFilePath ()); if (index != -1) { _current_directory->removeItem (index); } _current_directory->insertItem (0, fileInfo.absoluteFilePath ()); _current_directory->setCurrentIndex (0); } else { QString abs_fname = fileInfo.absoluteFilePath (); if (QFile::exists (abs_fname)) { if (is_octave_data_file (abs_fname.toStdString ())) emit load_file_signal (abs_fname); else emit open_file (fileInfo.absoluteFilePath ()); } } } } void files_dock_widget::open_item_in_app (const QModelIndex& index) { // Retrieve the file info associated with the model index. QFileInfo fileInfo = _file_system_model->fileInfo (index); QString file = fileInfo.absoluteFilePath (); QDesktopServices::openUrl (QUrl::fromLocalFile (file)); } void files_dock_widget::toggle_headercontextitem_filesize () { QSettings *settings = resource_manager::get_settings (); settings->setValue ("filesdockwidget/showFileSize", ! settings->value ("filesdockwidget/showFileSize",false).toBool ()); settings->sync (); this->notice_settings (settings); } void files_dock_widget::toggle_headercontextitem_filetype () { QSettings *settings = resource_manager::get_settings (); settings->setValue ("filesdockwidget/showFileType", ! settings->value ("filesdockwidget/showFileType",false).toBool ()); settings->sync (); this->notice_settings (settings); } void files_dock_widget::toggle_headercontextitem_datemodified () { QSettings *settings = resource_manager::get_settings (); settings->setValue ("filesdockwidget/showLastModified", ! settings->value ("filesdockwidget/showLastModified",false).toBool ()); settings->sync (); this->notice_settings (settings); } void files_dock_widget::toggle_headercontextitem_showhidden () { QSettings *settings = resource_manager::get_settings (); settings->setValue ("filesdockwidget/showHiddenFiles", ! settings->value ("filesdockwidget/showHiddenFiles",false).toBool ()); settings->sync (); this->notice_settings (settings); } void files_dock_widget::headercontextmenu_requested (const QPoint& mpos) { QMenu menu (this); QSettings *settings = resource_manager::get_settings (); QAction fileSizeAction (tr ("File size"), &menu); fileSizeAction.setCheckable (true); fileSizeAction.setChecked ( settings->value ("filesdockwidget/showFileSize",false).toBool ()); connect (&fileSizeAction, SIGNAL(triggered ()), this, SLOT (toggle_headercontextitem_filesize ())); menu.addAction (&fileSizeAction); QAction fileTypeAction (tr ("File type"), &menu); fileTypeAction.setCheckable (true); fileTypeAction.setChecked ( settings->value ("filesdockwidget/showFileType",false).toBool ()); connect (&fileTypeAction, SIGNAL(triggered ()), this, SLOT (toggle_headercontextitem_filetype ())); menu.addAction (&fileTypeAction); QAction dateModifiedAction (tr ("Date modified"), &menu); dateModifiedAction.setCheckable (true); dateModifiedAction.setChecked( settings->value ("filesdockwidget/showLastModified",false).toBool ()); connect (&dateModifiedAction, SIGNAL(triggered ()), this, SLOT (toggle_headercontextitem_datemodified ())); menu.addAction (&dateModifiedAction); QAction showHiddenAction (tr ("Show hidden"), &menu); showHiddenAction.setCheckable (true); showHiddenAction.setChecked ( settings->value ("filesdockwidget/showHiddenFiles",false).toBool ()); connect (&showHiddenAction, SIGNAL (triggered ()), this, SLOT (toggle_headercontextitem_showhidden ())); menu.addAction (&showHiddenAction); menu.exec (_file_tree_view->mapToGlobal (mpos)); } void files_dock_widget::contextmenu_requested (const QPoint& mpos) { QMenu menu (this); QModelIndex index = _file_tree_view->indexAt (mpos); if (index.isValid ()) { QFileInfo info = _file_system_model->fileInfo (index); QItemSelectionModel *m = _file_tree_view->selectionModel (); QModelIndexList sel = m->selectedRows (); // check if item at mouse position is seleccted if (! sel.contains (index)) { // is not selected -> clear actual selection and select this item m->setCurrentIndex(index, QItemSelectionModel::Clear | QItemSelectionModel::Select | QItemSelectionModel::Rows); } // construct the context menu depending on item menu.addAction (QIcon (":/actions/icons/fileopen.png"), tr ("Open"), this, SLOT (contextmenu_open (bool))); menu.addAction (tr ("Open in Default Application"), this, SLOT (contextmenu_open_in_app (bool))); menu.addAction (tr ("Copy Selection to Clipboard"), this, SLOT (contextmenu_copy_selection (bool))); if (info.isFile () && info.suffix () == "m") menu.addAction (QIcon (":/actions/icons/artsbuilderexecute.png"), tr ("Run"), this, SLOT (contextmenu_run (bool))); if (info.isFile ()) menu.addAction (tr ("Load Data"), this, SLOT (contextmenu_load (bool))); if (info.isDir ()) { menu.addSeparator (); menu.addAction (QIcon (":/actions/icons/ok.png"), tr ("Set Current Directory"), this, SLOT (contextmenu_setcurrentdir (bool))); menu.addSeparator (); menu.addAction (QIcon (":/actions/icons/findf.png"), tr ("Find Files..."), this, SLOT (contextmenu_findfiles (bool))); } menu.addSeparator (); menu.addAction (tr ("Rename..."), this, SLOT (contextmenu_rename (bool))); menu.addAction (QIcon (":/actions/icons/editdelete.png"), tr ("Delete..."), this, SLOT (contextmenu_delete (bool))); if (info.isDir ()) { menu.addSeparator (); menu.addAction (QIcon (":/actions/icons/filenew.png"), tr ("New File..."), this, SLOT (contextmenu_newfile (bool))); menu.addAction (QIcon (":/actions/icons/folder_new.png"), tr ("New Directory..."), this, SLOT (contextmenu_newdir (bool))); } // show the menu menu.exec (_file_tree_view->mapToGlobal (mpos)); } } void files_dock_widget::contextmenu_open (bool) { QItemSelectionModel *m = _file_tree_view->selectionModel (); QModelIndexList rows = m->selectedRows (); for (QModelIndexList::iterator it = rows.begin (); it != rows.end (); it++) { QFileInfo file = _file_system_model->fileInfo (*it); if (file.exists ()) { if (file.isFile ()) emit open_file (file.absoluteFilePath ()); else set_current_directory (file.absoluteFilePath ()); } } } void files_dock_widget::contextmenu_open_in_app (bool) { QItemSelectionModel *m = _file_tree_view->selectionModel (); QModelIndexList rows = m->selectedRows (); for (QModelIndexList::iterator it = rows.begin (); it != rows.end (); it++) open_item_in_app (*it); } void files_dock_widget::contextmenu_copy_selection (bool) { QItemSelectionModel *m = _file_tree_view->selectionModel (); QModelIndexList rows = m->selectedRows (); QStringList selection; for (QModelIndexList::iterator it = rows.begin (); it != rows.end (); it++) { QFileInfo info = _file_system_model->fileInfo (*it); selection << info.fileName (); } QClipboard *clipboard = QApplication::clipboard (); clipboard->setText (selection.join ("\n")); } void files_dock_widget::contextmenu_load (bool) { QItemSelectionModel *m = _file_tree_view->selectionModel (); QModelIndexList rows = m->selectedRows (); if (rows.size () > 0) { QModelIndex index = rows[0]; QFileInfo info = _file_system_model->fileInfo (index); emit load_file_signal (info.fileName ()); } } void files_dock_widget::contextmenu_run (bool) { QItemSelectionModel *m = _file_tree_view->selectionModel (); QModelIndexList rows = m->selectedRows (); if (rows.size () > 0) { QModelIndex index = rows[0]; QFileInfo info = _file_system_model->fileInfo (index); emit run_file_signal (info); } } void files_dock_widget::contextmenu_rename (bool) { QItemSelectionModel *m = _file_tree_view->selectionModel (); QModelIndexList rows = m->selectedRows (); if (rows.size () > 0) { QModelIndex index = rows[0]; QFileInfo info = _file_system_model->fileInfo (index); QDir path = info.absoluteDir (); QString old_name = info.fileName (); bool ok; QString new_name = QInputDialog::getText (this, tr ("Rename file/directory"), tr ("Rename file/directory:\n") + old_name + tr ("\n to: "), QLineEdit::Normal, old_name, &ok); if (ok && new_name.length () > 0) { new_name = path.absolutePath () + "/" + new_name; old_name = path.absolutePath () + "/" + old_name; path.rename (old_name, new_name); _file_system_model->revert (); } } } void files_dock_widget::contextmenu_delete (bool) { QItemSelectionModel *m = _file_tree_view->selectionModel (); QModelIndexList rows = m->selectedRows (); for (QModelIndexList::iterator it = rows.begin (); it != rows.end (); it++) { QModelIndex index = *it; QFileInfo info = _file_system_model->fileInfo (index); if (QMessageBox::question (this, tr ("Delete file/directory"), tr ("Are you sure you want to delete\n") + info.filePath (), QMessageBox::Yes|QMessageBox::No) == QMessageBox::Yes) { if (info.isDir ()) { // see if direcory is empty QDir path (info.absoluteFilePath ()); QList<QFileInfo> fileLst = path.entryInfoList (QDir::AllEntries | QDir::NoDotAndDotDot); if (fileLst.count () != 0) QMessageBox::warning (this, tr ("Delete file/directory"), tr ("Can not delete a directory that is not empty")); else _file_system_model->rmdir (index); } else { _file_system_model->remove (index); } _file_system_model->revert (); } } } void files_dock_widget::contextmenu_newfile (bool) { QItemSelectionModel *m = _file_tree_view->selectionModel (); QModelIndexList rows = m->selectedRows (); if (rows.size () > 0) { QModelIndex index = rows[0]; QFileInfo info = _file_system_model->fileInfo (index); QString parent_dir = info.filePath (); process_new_file (parent_dir); } } void files_dock_widget::contextmenu_newdir (bool) { QItemSelectionModel *m = _file_tree_view->selectionModel (); QModelIndexList rows = m->selectedRows (); if (rows.size () > 0) { QModelIndex index = rows[0]; QFileInfo info = _file_system_model->fileInfo (index); QString parent_dir = info.filePath (); process_new_dir (parent_dir); } } void files_dock_widget::contextmenu_setcurrentdir (bool) { QItemSelectionModel *m = _file_tree_view->selectionModel (); QModelIndexList rows = m->selectedRows (); if (rows.size () > 0) { QModelIndex index = rows[0]; QFileInfo info = _file_system_model->fileInfo (index); if (info.isDir ()) { process_set_current_dir (info.absoluteFilePath ()); } } } void files_dock_widget::contextmenu_findfiles (bool) { QItemSelectionModel *m = _file_tree_view->selectionModel (); QModelIndexList rows = m->selectedRows (); if (rows.size () > 0) { QModelIndex index = rows[0]; QFileInfo info = _file_system_model->fileInfo (index); if (info.isDir ()) { process_find_files (info.absoluteFilePath ()); } } } void files_dock_widget::notice_settings (const QSettings *settings) { // Qsettings pointer is checked before emitting. int icon_size_settings = settings->value ("toolbar_icon_size",0).toInt (); QStyle *st = style (); int icon_size = st->pixelMetric (QStyle::PM_ToolBarIconSize); 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); _navigation_tool_bar->setIconSize (QSize (icon_size,icon_size)); // file names are always shown, other columns can be hidden by settings _file_tree_view->setColumnHidden (0, false); _file_tree_view->setColumnHidden (1, ! settings->value ("filesdockwidget/showFileSize",false).toBool ()); _file_tree_view->setColumnHidden (2, ! settings->value ("filesdockwidget/showFileType",false).toBool ()); _file_tree_view->setColumnHidden (3, ! settings->value ("filesdockwidget/showLastModified",false).toBool ()); _file_tree_view->setAlternatingRowColors ( settings->value ("filesdockwidget/useAlternatingRowColors",true).toBool ()); if (settings->value ("filesdockwidget/showHiddenFiles",false).toBool ()) { _file_system_model->setFilter (QDir::NoDotAndDotDot | QDir::AllEntries | QDir::Hidden); } else { _file_system_model->setFilter (QDir::NoDotAndDotDot | QDir::AllEntries); } _file_tree_view->setModel (_file_system_model); // enable the buttons to sync octave/browser dir // only if this is not done by default _sync_octave_dir = settings->value ("filesdockwidget/sync_octave_directory",false).toBool (); _sync_octave_directory_action->setEnabled (!_sync_octave_dir); _sync_browser_directory_action->setEnabled (!_sync_octave_dir); if (_sync_octave_dir) display_directory (_octave_dir); // sync browser to octave dir } void files_dock_widget::popdownmenu_home (bool) { QString dir = qgetenv ("HOME"); if (dir.isEmpty ()) dir = QDir::homePath (); set_current_directory (dir); } void files_dock_widget::popdownmenu_search_dir (bool) { QString dir = QFileDialog::getExistingDirectory (this, tr ("Set directory of file browser"), _file_system_model->rootPath (), QFileDialog::ShowDirsOnly | QFileDialog::DontUseNativeDialog); set_current_directory (dir); } void files_dock_widget::popdownmenu_findfiles (bool) { process_find_files (_file_system_model->rootPath ()); } void files_dock_widget::popdownmenu_newdir (bool) { process_new_dir (_file_system_model->rootPath ()); } void files_dock_widget::popdownmenu_newfile (bool) { process_new_file (_file_system_model->rootPath ()); } void files_dock_widget::process_new_file (const QString &parent_dir) { bool ok; QString name = QInputDialog::getText (this, tr ("Create File"), tr ("Create file in\n","String ends with \\n!") + parent_dir, QLineEdit::Normal, tr ("New File.txt"), &ok); if (ok && name.length () > 0) { name = parent_dir + "/" + name; QFile file (name); file.open (QIODevice::WriteOnly); _file_system_model->revert (); } } void files_dock_widget::process_new_dir (const QString &parent_dir) { bool ok; QString name = QInputDialog::getText (this, tr ("Create Directory"), tr ("Create folder in\n","String ends with \\n!") + parent_dir, QLineEdit::Normal, tr ("New Directory"), &ok); if (ok && name.length () > 0) { QDir dir (parent_dir); dir.mkdir (name); _file_system_model->revert (); } } void files_dock_widget::process_set_current_dir (const QString & dir) { emit displayed_directory_changed (dir); } void files_dock_widget::process_find_files (const QString & dir) { emit find_files_signal (dir); } void files_dock_widget::copyClipboard () { if (_file_tree_view->hasFocus ()) contextmenu_copy_selection (true); if (_current_directory->hasFocus ()) { QClipboard *clipboard = QApplication::clipboard (); QLineEdit * edit = _current_directory->lineEdit (); if (edit && edit->hasSelectedText ()) { clipboard->setText (edit->selectedText ()); } } } void files_dock_widget::pasteClipboard () { if (_current_directory->hasFocus ()) { QClipboard *clipboard = QApplication::clipboard (); QString str = clipboard->text (); QLineEdit * edit = _current_directory->lineEdit (); if (edit && str.length () > 0) edit->insert (str); } } void files_dock_widget::selectAll () { if (_file_tree_view->hasFocus ()) _file_tree_view->selectAll (); if (_current_directory->hasFocus ()) { QLineEdit * edit = _current_directory->lineEdit (); if (edit) { edit->selectAll (); } } }