Added capability to remember previously used entries in the project debugger properties dialog.

Thu, 16 Feb 2017 18:58:58 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 16 Feb 2017 18:58:58 +0100
changeset 5525
1771a7f9065c
parent 5524
b96b6e7cd8a4
child 5526
11337e4fba52

Added capability to remember previously used entries in the project debugger properties dialog.

APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Project.DebuggerPropertiesDialog.html file | annotate | diff | comparison | revisions
E5Gui/E5PathPicker.py file | annotate | diff | comparison | revisions
Preferences/__init__.py file | annotate | diff | comparison | revisions
Project/DebuggerPropertiesDialog.py file | annotate | diff | comparison | revisions
Project/DebuggerPropertiesDialog.ui file | annotate | diff | comparison | revisions
changelog file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric6.api	Thu Feb 16 18:52:42 2017 +0100
+++ b/APIs/Python3/eric6.api	Thu Feb 16 18:58:58 2017 +0100
@@ -6753,7 +6753,9 @@
 eric6.Project.CreateDialogCodeDialog.pythonSignatureRole?7
 eric6.Project.CreateDialogCodeDialog.returnTypeRole?7
 eric6.Project.CreateDialogCodeDialog.rubySignatureRole?7
+eric6.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked?4()
 eric6.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog?4()
+eric6.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked?4()
 eric6.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog.storeData?4()
 eric6.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog?1(project, parent=None, name=None)
 eric6.Project.FiletypeAssociationDialog.FiletypeAssociationDialog.on_addAssociationButton_clicked?4()
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Thu Feb 16 18:52:42 2017 +0100
+++ b/Documentation/Help/source.qhp	Thu Feb 16 18:58:58 2017 +0100
@@ -3729,7 +3729,11 @@
       <keyword name="DebuggerPropertiesDialog" id="DebuggerPropertiesDialog" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog" />
       <keyword name="DebuggerPropertiesDialog (Constructor)" id="DebuggerPropertiesDialog (Constructor)" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.__init__" />
       <keyword name="DebuggerPropertiesDialog (Module)" id="DebuggerPropertiesDialog (Module)" ref="eric6.Project.DebuggerPropertiesDialog.html" />
+      <keyword name="DebuggerPropertiesDialog.__clearHistory" id="DebuggerPropertiesDialog.__clearHistory" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.__clearHistory" />
+      <keyword name="DebuggerPropertiesDialog.__saveHistories" id="DebuggerPropertiesDialog.__saveHistories" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.__saveHistories" />
+      <keyword name="DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked" id="DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked" />
       <keyword name="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog" id="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog" />
+      <keyword name="DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked" id="DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked" />
       <keyword name="DebuggerPropertiesDialog.storeData" id="DebuggerPropertiesDialog.storeData" ref="eric6.Project.DebuggerPropertiesDialog.html#DebuggerPropertiesDialog.storeData" />
       <keyword name="DebuggerPropertiesReader" id="DebuggerPropertiesReader" ref="eric6.E5XML.DebuggerPropertiesReader.html#DebuggerPropertiesReader" />
       <keyword name="DebuggerPropertiesReader (Constructor)" id="DebuggerPropertiesReader (Constructor)" ref="eric6.E5XML.DebuggerPropertiesReader.html#DebuggerPropertiesReader.__init__" />
--- a/Documentation/Source/eric6.Project.DebuggerPropertiesDialog.html	Thu Feb 16 18:52:42 2017 +0100
+++ b/Documentation/Source/eric6.Project.DebuggerPropertiesDialog.html	Thu Feb 16 18:58:58 2017 +0100
@@ -61,9 +61,21 @@
 <td><a href="#DebuggerPropertiesDialog.__init__">DebuggerPropertiesDialog</a></td>
 <td>Constructor</td>
 </tr><tr>
+<td><a href="#DebuggerPropertiesDialog.__clearHistory">__clearHistory</a></td>
+<td>Private method to clear a path picker history</td>
+</tr><tr>
+<td><a href="#DebuggerPropertiesDialog.__saveHistories">__saveHistories</a></td>
+<td>Private method to save the path picker histories.</td>
+</tr><tr>
+<td><a href="#DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked">on_debugClientClearHistoryButton_clicked</a></td>
+<td>Private slot to clear the debug clients history.</td>
+</tr><tr>
 <td><a href="#DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog">on_debugClientPicker_aboutToShowPathPickerDialog</a></td>
 <td>Private slot to perform actions before the debug client selection dialog is shown.</td>
 </tr><tr>
+<td><a href="#DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked">on_interpreterClearHistoryButton_clicked</a></td>
+<td>Private slot to clear the interpreter history.</td>
+</tr><tr>
 <td><a href="#DebuggerPropertiesDialog.storeData">storeData</a></td>
 <td>Public method to store the entered/modified data.</td>
 </tr>
@@ -88,12 +100,32 @@
 <dd>
 name of this dialog (string)
 </dd>
-</dl><a NAME="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog" ID="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog"></a>
+</dl><a NAME="DebuggerPropertiesDialog.__clearHistory" ID="DebuggerPropertiesDialog.__clearHistory"></a>
+<h4>DebuggerPropertiesDialog.__clearHistory</h4>
+<b>__clearHistory</b>(<i>picker</i>)
+<p>
+        Private method to clear a path picker history
+</p><a NAME="DebuggerPropertiesDialog.__saveHistories" ID="DebuggerPropertiesDialog.__saveHistories"></a>
+<h4>DebuggerPropertiesDialog.__saveHistories</h4>
+<b>__saveHistories</b>(<i></i>)
+<p>
+        Private method to save the path picker histories.
+</p><a NAME="DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked" ID="DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked"></a>
+<h4>DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked</h4>
+<b>on_debugClientClearHistoryButton_clicked</b>(<i></i>)
+<p>
+        Private slot to clear the debug clients history.
+</p><a NAME="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog" ID="DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog"></a>
 <h4>DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog</h4>
 <b>on_debugClientPicker_aboutToShowPathPickerDialog</b>(<i></i>)
 <p>
         Private slot to perform actions before the debug client selection
         dialog is shown.
+</p><a NAME="DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked" ID="DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked"></a>
+<h4>DebuggerPropertiesDialog.on_interpreterClearHistoryButton_clicked</h4>
+<b>on_interpreterClearHistoryButton_clicked</b>(<i></i>)
+<p>
+        Private slot to clear the interpreter history.
 </p><a NAME="DebuggerPropertiesDialog.storeData" ID="DebuggerPropertiesDialog.storeData"></a>
 <h4>DebuggerPropertiesDialog.storeData</h4>
 <b>storeData</b>(<i></i>)
--- a/E5Gui/E5PathPicker.py	Thu Feb 16 18:52:42 2017 +0100
+++ b/E5Gui/E5PathPicker.py	Thu Feb 16 18:58:58 2017 +0100
@@ -215,6 +215,8 @@
             self._editor.setText(text)
         else:
             self._editor.setEditText(text)
+            if text and self._editor.findText(text) == -1:
+                self._editor.insertItem(0, text)
     
     def _editorText(self):
         """
--- a/Preferences/__init__.py	Thu Feb 16 18:52:42 2017 +0100
+++ b/Preferences/__init__.py	Thu Feb 16 18:58:58 2017 +0100
@@ -746,6 +746,8 @@
         "DeterminePyFromProject": True,
         "TasksProjectAutoSave": True,
         "TasksProjectRescanOnOpen": True,
+        "DebugClientsHistory": [],
+        "DebuggerInterpreterHistory": [],
     }
     
     # defaults for the multi project settings
@@ -2403,6 +2405,9 @@
     if key in ["RecentNumber"]:
         return int(prefClass.settings.value(
             "Project/" + key, prefClass.projectDefaults[key]))
+    elif key in ["DebugClientsHistory", "DebuggerInterpreterHistory"]:
+        return toList(prefClass.settings.value(
+            "Project/" + key, prefClass.projectDefaults[key]))
     else:
         return toBool(prefClass.settings.value(
             "Project/" + key, prefClass.projectDefaults[key]))
@@ -2416,7 +2421,14 @@
     @param value the value to be set
     @param prefClass preferences class used as the storage area
     """
-    prefClass.settings.setValue("Project/" + key, value)
+    if key in ["DebugClientsHistory", "DebuggerInterpreterHistory"]:
+        # max. list sizes is hard coded to 20 entries
+        newList = [v for v in value if v]
+        if len(newList) > 20:
+            newList = newList[:20]
+        prefClass.settings.setValue("Project/" + key, newList)
+    else:
+        prefClass.settings.setValue("Project/" + key, value)
     
 
 def getProjectBrowserFlags(key, prefClass=Prefs):
--- a/Project/DebuggerPropertiesDialog.py	Thu Feb 16 18:52:42 2017 +0100
+++ b/Project/DebuggerPropertiesDialog.py	Thu Feb 16 18:58:58 2017 +0100
@@ -13,7 +13,7 @@
 import sys
 
 from PyQt5.QtCore import pyqtSlot
-from PyQt5.QtWidgets import QDialog
+from PyQt5.QtWidgets import QDialog, QComboBox
 
 from E5Gui.E5Completers import E5DirCompleter
 from E5Gui.E5PathPicker import E5PathPickerModes
@@ -23,6 +23,9 @@
 
 from eric6config import getConfig
 
+import Preferences
+import UI.PixmapCache
+
 
 class DebuggerPropertiesDialog(QDialog, Ui_DebuggerPropertiesDialog):
     """
@@ -42,8 +45,25 @@
             self.setObjectName(name)
         self.setupUi(self)
         
+        debugClientsHistory = Preferences.getProject(
+            "DebugClientsHistory")
         self.debugClientPicker.setMode(E5PathPickerModes.OpenFileMode)
+        self.debugClientPicker.setInsertPolicy(QComboBox.InsertAtTop)
+        self.debugClientPicker.setSizeAdjustPolicy(
+            QComboBox.AdjustToMinimumContentsLength)
+        self.debugClientPicker.setPathsList(debugClientsHistory)
+        self.debugClientClearHistoryButton.setIcon(
+            UI.PixmapCache.getIcon("editDelete.png"))
+        
+        interpreterHistory = Preferences.getProject(
+            "DebuggerInterpreterHistory")
         self.interpreterPicker.setMode(E5PathPickerModes.OpenFileMode)
+        self.interpreterPicker.setInsertPolicy(QComboBox.InsertAtTop)
+        self.interpreterPicker.setSizeAdjustPolicy(
+            QComboBox.AdjustToMinimumContentsLength)
+        self.interpreterPicker.setPathsList(interpreterHistory)
+        self.interpreterClearHistoryButton.setIcon(
+            UI.PixmapCache.getIcon("editDelete.png"))
         
         self.translationLocalCompleter = E5DirCompleter(
             self.translationLocalEdit)
@@ -160,3 +180,47 @@
         self.project.debugProperties["NOENCODING"] = \
             self.noEncodingCheckBox.isChecked()
         self.project.debugPropertiesLoaded = True
+        
+        self.__saveHistories()
+    
+    def __saveHistories(self):
+        """
+        Private method to save the path picker histories.
+        """
+        debugClient = self.debugClientPicker.text()
+        debugClientsHistory = self.debugClientPicker.getPathItems()
+        if debugClient not in debugClientsHistory:
+            debugClientsHistory.insert(0, debugClient)
+        Preferences.setProject("DebugClientsHistory",
+                               debugClientsHistory)
+        
+        interpreter = self.interpreterPicker.text()
+        interpreterHistory = self.interpreterPicker.getPathItems()
+        if interpreter not in interpreterHistory:
+            interpreterHistory.insert(0, interpreter)
+        Preferences.setProject("DebuggerInterpreterHistory",
+                               interpreterHistory)
+    
+    @pyqtSlot()
+    def on_debugClientClearHistoryButton_clicked(self):
+        """
+        Private slot to clear the debug clients history.
+        """
+        self.__clearHistory(self.debugClientPicker)
+    
+    @pyqtSlot()
+    def on_interpreterClearHistoryButton_clicked(self):
+        """
+        Private slot to clear the interpreter history.
+        """
+        self.__clearHistory(self.interpreterPicker)
+    
+    def __clearHistory(self, picker):
+        """
+        Private method to clear a path picker history
+        """
+        currentText = picker.text()
+        picker.clear()
+        picker.setText(currentText)
+        
+        self.__saveHistories()
--- a/Project/DebuggerPropertiesDialog.ui	Thu Feb 16 18:52:42 2017 +0100
+++ b/Project/DebuggerPropertiesDialog.ui	Thu Feb 16 18:58:58 2017 +0100
@@ -22,9 +22,9 @@
      <property name="title">
       <string>Debug Client</string>
      </property>
-     <layout class="QVBoxLayout" name="verticalLayout">
+     <layout class="QHBoxLayout" name="horizontalLayout">
       <item>
-       <widget class="E5PathPicker" name="debugClientPicker" native="true">
+       <widget class="E5ComboPathPicker" name="debugClientPicker" native="true">
         <property name="focusPolicy">
          <enum>Qt::StrongFocus</enum>
         </property>
@@ -33,6 +33,13 @@
         </property>
        </widget>
       </item>
+      <item>
+       <widget class="QToolButton" name="debugClientClearHistoryButton">
+        <property name="toolTip">
+         <string>Press to clear the history of entered debug clients</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
@@ -41,9 +48,9 @@
      <property name="title">
       <string>Interpreter for Debug Client</string>
      </property>
-     <layout class="QVBoxLayout" name="verticalLayout_2">
+     <layout class="QHBoxLayout" name="horizontalLayout_2">
       <item>
-       <widget class="E5PathPicker" name="interpreterPicker" native="true">
+       <widget class="E5ComboPathPicker" name="interpreterPicker" native="true">
         <property name="focusPolicy">
          <enum>Qt::StrongFocus</enum>
         </property>
@@ -52,6 +59,13 @@
         </property>
        </widget>
       </item>
+      <item>
+       <widget class="QToolButton" name="interpreterClearHistoryButton">
+        <property name="toolTip">
+         <string>Press to clear the history of entered interpreters</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
@@ -255,7 +269,7 @@
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <customwidgets>
   <customwidget>
-   <class>E5PathPicker</class>
+   <class>E5ComboPathPicker</class>
    <extends>QWidget</extends>
    <header>E5Gui/E5PathPicker.h</header>
    <container>1</container>
@@ -263,7 +277,9 @@
  </customwidgets>
  <tabstops>
   <tabstop>debugClientPicker</tabstop>
+  <tabstop>debugClientClearHistoryButton</tabstop>
   <tabstop>interpreterPicker</tabstop>
+  <tabstop>interpreterClearHistoryButton</tabstop>
   <tabstop>debugEnvironmentOverrideCheckBox</tabstop>
   <tabstop>debugEnvironmentEdit</tabstop>
   <tabstop>remoteDebuggerGroup</tabstop>
--- a/changelog	Thu Feb 16 18:52:42 2017 +0100
+++ b/changelog	Thu Feb 16 18:58:58 2017 +0100
@@ -8,6 +8,9 @@
 - Mercurial Interface
   -- improved the log browser in several ways
   -- improved the status dialog
+- Project
+  -- added capability to remember previously used entries in the project
+     debugger properties dialog
   
 Version 17.02.1:
 - bug fixes

eric ide

mercurial