changeset 20706:fec7cc73507b

Make the file browser open files more consistently (bug #45844) * files-dock-widget.cc (files_dock_widget::display_directory): open files in default app except for user defined extensions. Default: m,c,cc,cpp,h,txt * files-dock-widget.cc (files_dock_widget::contextmenu_requested): add action for opening files in the editor * files-dock-widget.cc (files_dock_widget::contextmenu_requested): remove "open in default app" menu and add "open in sytem file explorer" for dirs only. * files-dock-widget.cc (files_dock_widget::contextmenu_open): make use of display_directory for concistency * files-dock-widget.cc (files_dock_widget::contextmenu_open_in_editor): new slot to force opening a file in the editor * files-dock-widget.h: declare new slot "contextmenu_open_in_editor" * settings-dialog.ui: add new lineEdit and label for file extensions setting * settings-dialog.cc (settings_dialog::settings_dialog,::~settings_dialog): read/write new setting "filesdockwidget/txt_file_extensions". Default: m,c,cc,cpp,h,txt
author Pantxo Diribarne <pantxo.diribarne@gmail.com>
date Mon, 02 Nov 2015 22:42:28 +0100
parents 632683d6396f
children cd1bd06974d8
files libgui/src/files-dock-widget.cc libgui/src/files-dock-widget.h libgui/src/settings-dialog.cc libgui/src/settings-dialog.ui
diffstat 4 files changed, 115 insertions(+), 64 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/files-dock-widget.cc	Sun Nov 15 14:24:38 2015 +0100
+++ b/libgui/src/files-dock-widget.cc	Mon Nov 02 22:42:28 2015 +0100
@@ -377,12 +377,21 @@
         {
           QString abs_fname = fileInfo.absoluteFilePath ();
 
+          QString suffix = fileInfo.suffix ().toLower ();
+          QSettings *settings = resource_manager::get_settings ();
+          QString ext = settings->value ("filesdockwidget/txt_file_extensions",
+                                         "m;c;cc;cpp;h;txt").toString ();
+          QStringList extensions = ext.split(";", QString::SkipEmptyParts);
+
           if (QFile::exists (abs_fname))
             {
               if (is_octave_data_file (abs_fname.toStdString ()))
                 emit load_file_signal (abs_fname);
+              else if (extensions.contains (suffix))
+                emit open_file (fileInfo.absoluteFilePath ());
               else
-                emit open_file (fileInfo.absoluteFilePath ());
+                open_item_in_app (_file_tree_view->selectionModel ()
+                                  ->currentIndex ());
             }
         }
     }
@@ -477,8 +486,16 @@
       menu.addAction (resource_manager::icon ("document-open"), tr ("Open"),
                       this, SLOT (contextmenu_open (bool)));
 
-      menu.addAction (tr ("Open in Default Application"),
-                      this, SLOT (contextmenu_open_in_app (bool)));
+      if (info.isDir ())
+        {
+          menu.addAction (tr ("Open in System File Explorer"),
+                          this, SLOT (contextmenu_open_in_app (bool)));
+        }
+
+      if (info.isFile ())
+        menu.addAction (tr ("Open in Text Editor"),
+                        this, SLOT (contextmenu_open_in_editor (bool)));
+
 
       menu.addAction (tr ("Copy Selection to Clipboard"),
                       this, SLOT (contextmenu_copy_selection (bool)));
@@ -535,12 +552,23 @@
     {
       QFileInfo file = _file_system_model->fileInfo (*it);
       if (file.exists ())
-        {
-          if (file.isFile ())
-            emit open_file (file.absoluteFilePath ());
-          else
-            set_current_directory (file.absoluteFilePath ());
-        }
+        display_directory (file.absoluteFilePath ());
+    }
+}
+
+
+void
+files_dock_widget::contextmenu_open_in_editor (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 ())
+        emit open_file (file.absoluteFilePath ());
     }
 }
 
--- a/libgui/src/files-dock-widget.h	Sun Nov 15 14:24:38 2015 +0100
+++ b/libgui/src/files-dock-widget.h	Mon Nov 02 22:42:28 2015 +0100
@@ -89,6 +89,7 @@
   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);
--- a/libgui/src/settings-dialog.cc	Sun Nov 15 14:24:38 2015 +0100
+++ b/libgui/src/settings-dialog.cc	Mon Nov 02 22:42:28 2015 +0100
@@ -506,6 +506,9 @@
     settings->value ("filesdockwidget/startup_dir").toString ());
   connect (ui->pb_file_browser_dir, SIGNAL (pressed ()),
            this, SLOT (get_file_browser_dir ()));
+  ui->le_file_browser_extensions->setText (
+    settings->value ("filesdockwidget/txt_file_extensions", "m;c;cc;cpp;h;txt")
+    .toString ());
 
   ui->checkbox_allow_web_connect->setChecked (
     settings->value ("news/allow_web_connection",false).toBool ());
@@ -832,7 +835,8 @@
                       ui->cb_restore_file_browser_dir->isChecked ());
   settings->setValue ("filesdockwidget/startup_dir",
                       ui->le_file_browser_dir->text ());
-
+  settings->setValue ("filesdockwidget/txt_file_extensions",
+                      ui->le_file_browser_extensions->text ());
 
   settings->setValue ("news/allow_web_connection",
                       ui->checkbox_allow_web_connect->isChecked ());
--- a/libgui/src/settings-dialog.ui	Sun Nov 15 14:24:38 2015 +0100
+++ b/libgui/src/settings-dialog.ui	Mon Nov 02 22:42:28 2015 +0100
@@ -9,8 +9,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>720</width>
-    <height>480</height>
+    <width>678</width>
+    <height>474</height>
    </rect>
   </property>
   <property name="minimumSize">
@@ -499,8 +499,8 @@
            <rect>
             <x>0</x>
             <y>0</y>
-            <width>662</width>
-            <height>751</height>
+            <width>690</width>
+            <height>783</height>
            </rect>
           </property>
           <layout class="QVBoxLayout" name="verticalLayout_16">
@@ -1749,28 +1749,74 @@
            <rect>
             <x>0</x>
             <y>0</y>
-            <width>678</width>
-            <height>378</height>
+            <width>636</width>
+            <height>370</height>
            </rect>
           </property>
-          <layout class="QVBoxLayout" name="verticalLayout_18">
-           <item>
+          <layout class="QGridLayout" name="gridLayout_8">
+           <item row="0" column="0">
             <widget class="QGroupBox" name="groupBox_4">
              <property name="title">
               <string>Behavior</string>
              </property>
-             <layout class="QVBoxLayout" name="verticalLayout_24">
-              <item>
-               <layout class="QGridLayout" name="gridLayout_8">
-                <item row="4" column="0">
+             <layout class="QGridLayout" name="gridLayout_2">
+              <item row="0" column="0">
+               <layout class="QVBoxLayout" name="verticalLayout_18">
+                <item>
                  <widget class="QCheckBox" name="sync_octave_directory">
                   <property name="text">
                    <string>Synchronize Octave working directory with file browser</string>
                   </property>
                  </widget>
                 </item>
-                <item row="5" column="0">
+                <item>
                  <layout class="QGridLayout" name="lo_file_browser_startup">
+                  <item row="1" column="3">
+                   <spacer name="horizontalSpacer_30">
+                    <property name="orientation">
+                     <enum>Qt::Horizontal</enum>
+                    </property>
+                    <property name="sizeHint" stdset="0">
+                     <size>
+                      <width>40</width>
+                      <height>20</height>
+                     </size>
+                    </property>
+                   </spacer>
+                  </item>
+                  <item row="0" column="1">
+                   <widget class="QCheckBox" name="cb_restore_file_browser_dir">
+                    <property name="text">
+                     <string>Restore last directory of previous session</string>
+                    </property>
+                   </widget>
+                  </item>
+                  <item row="0" column="3">
+                   <spacer name="horizontalSpacer_29">
+                    <property name="orientation">
+                     <enum>Qt::Horizontal</enum>
+                    </property>
+                    <property name="sizeHint" stdset="0">
+                     <size>
+                      <width>40</width>
+                      <height>20</height>
+                     </size>
+                    </property>
+                   </spacer>
+                  </item>
+                  <item row="1" column="2">
+                   <widget class="QPushButton" name="pb_file_browser_dir">
+                    <property name="sizePolicy">
+                     <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+                      <horstretch>0</horstretch>
+                      <verstretch>0</verstretch>
+                     </sizepolicy>
+                    </property>
+                    <property name="text">
+                     <string>Browse</string>
+                    </property>
+                   </widget>
+                  </item>
                   <item row="0" column="0">
                    <widget class="QLabel" name="lbl_file_browser_dir">
                     <property name="text">
@@ -1788,51 +1834,23 @@
                     </property>
                    </widget>
                   </item>
-                  <item row="0" column="1">
-                   <widget class="QCheckBox" name="cb_restore_file_browser_dir">
+                 </layout>
+                </item>
+                <item>
+                 <layout class="QVBoxLayout" name="verticalLayout_9">
+                  <item>
+                   <widget class="QLabel" name="lbl_file_browser_extensions">
                     <property name="text">
-                     <string>Restore last directory of previous session</string>
-                    </property>
-                   </widget>
-                  </item>
-                  <item row="1" column="2">
-                   <widget class="QPushButton" name="pb_file_browser_dir">
-                    <property name="sizePolicy">
-                     <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
-                      <horstretch>0</horstretch>
-                      <verstretch>0</verstretch>
-                     </sizepolicy>
-                    </property>
-                    <property name="text">
-                     <string>Browse</string>
+                     <string>Extensions of files to be opened in the default text editor (separated by &quot;;&quot;):</string>
                     </property>
                    </widget>
                   </item>
-                  <item row="0" column="3">
-                   <spacer name="horizontalSpacer_29">
-                    <property name="orientation">
-                     <enum>Qt::Horizontal</enum>
-                    </property>
-                    <property name="sizeHint" stdset="0">
-                     <size>
-                      <width>40</width>
-                      <height>20</height>
-                     </size>
+                  <item>
+                   <widget class="QLineEdit" name="le_file_browser_extensions">
+                    <property name="text">
+                     <string/>
                     </property>
-                   </spacer>
-                  </item>
-                  <item row="1" column="3">
-                   <spacer name="horizontalSpacer_30">
-                    <property name="orientation">
-                     <enum>Qt::Horizontal</enum>
-                    </property>
-                    <property name="sizeHint" stdset="0">
-                     <size>
-                      <width>40</width>
-                      <height>20</height>
-                     </size>
-                    </property>
-                   </spacer>
+                   </widget>
                   </item>
                  </layout>
                 </item>
@@ -1841,7 +1859,7 @@
              </layout>
             </widget>
            </item>
-           <item>
+           <item row="1" column="0">
             <spacer name="verticalSpacer_2">
              <property name="orientation">
               <enum>Qt::Vertical</enum>