# HG changeset patch # User John W. Eaton # Date 1367840753 14400 # Node ID 38fef1e833ea22d39c4c57c7c75d2fce2c9c14ec # Parent 2df11dd7a589d22d6a812246bf0883c8dcb24352 handle copying names file browser to clipboard; allow multiple selections * files-dock-widget.cc (class FileTreeViewer): New class. (files_dock_widget::files_dock_widget): Use it for _file_tree_view. New context menu action to copy selection to clipboard. Set extended selection mode for _file_tree_view. (files_dock_widget::contextmenu_copy_selection): New function. diff -r 2df11dd7a589 -r 38fef1e833ea libgui/src/files-dock-widget.cc --- a/libgui/src/files-dock-widget.cc Mon May 06 06:06:43 2013 -0400 +++ b/libgui/src/files-dock-widget.cc Mon May 06 07:45:53 2013 -0400 @@ -28,6 +28,7 @@ #include "files-dock-widget.h" #include +#include #include #include #include @@ -45,6 +46,19 @@ #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) { @@ -131,7 +145,8 @@ curr_dir.absolutePath ()); // Attach the model to the QTreeView and set the root index - _file_tree_view = new QTreeView (container); + _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); @@ -328,6 +343,9 @@ 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))); @@ -388,6 +406,26 @@ } 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 (); diff -r 2df11dd7a589 -r 38fef1e833ea libgui/src/files-dock-widget.h --- a/libgui/src/files-dock-widget.h Mon May 06 06:06:43 2013 -0400 +++ b/libgui/src/files-dock-widget.h Mon May 06 07:45:53 2013 -0400 @@ -34,6 +34,7 @@ #include #include #include +#include #include #include "octave-dock-widget.h" @@ -85,6 +86,7 @@ /* context menu actions */ void contextmenu_open (bool); void contextmenu_open_in_app (bool); + void contextmenu_copy_selection (bool); void contextmenu_run (bool); void contextmenu_load (bool); void contextmenu_rename (bool);