Changed the handling of the configuration page list entries

Sun, 12 Apr 2015 18:00:45 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 12 Apr 2015 18:00:45 +0200
changeset 4216
bca19a75be32
parent 4214
b8fd47f8b707
child 4217
38e8903f9c2f

Changed the handling of the configuration page list entries
to be collapsed on first show and remember the expanded
ones while eric is running (but not between invocations).

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.Preferences.ConfigurationDialog.html file | annotate | diff | comparison | revisions
Preferences/ConfigurationDialog.py file | annotate | diff | comparison | revisions
UI/UserInterface.py file | annotate | diff | comparison | revisions
changelog file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric6.api	Sun Apr 12 16:59:06 2015 +0200
+++ b/APIs/Python3/eric6.api	Sun Apr 12 18:00:45 2015 +0200
@@ -5947,11 +5947,12 @@
 eric6.Preferences.ConfigurationDialog.ConfigurationDialog.TrayStarterMode?7
 eric6.Preferences.ConfigurationDialog.ConfigurationDialog.accept?4()
 eric6.Preferences.ConfigurationDialog.ConfigurationDialog.getConfigurationPageName?4()
+eric6.Preferences.ConfigurationDialog.ConfigurationDialog.getExpandedEntries?4()
 eric6.Preferences.ConfigurationDialog.ConfigurationDialog.masterPasswordChanged?7
 eric6.Preferences.ConfigurationDialog.ConfigurationDialog.preferencesChanged?7
 eric6.Preferences.ConfigurationDialog.ConfigurationDialog.setPreferences?4()
 eric6.Preferences.ConfigurationDialog.ConfigurationDialog.showConfigurationPageByName?4(pageName)
-eric6.Preferences.ConfigurationDialog.ConfigurationDialog?1(parent=None, name=None, modal=False, fromEric=True, displayMode=ConfigurationWidget.DefaultMode)
+eric6.Preferences.ConfigurationDialog.ConfigurationDialog?1(parent=None, name=None, modal=False, fromEric=True, displayMode=ConfigurationWidget.DefaultMode, expandedEntries=[])
 eric6.Preferences.ConfigurationDialog.ConfigurationPageItem.getPageName?4()
 eric6.Preferences.ConfigurationDialog.ConfigurationPageItem?1(parent, text, pageName, iconFile)
 eric6.Preferences.ConfigurationDialog.ConfigurationWidget.DefaultMode?7
@@ -5961,17 +5962,20 @@
 eric6.Preferences.ConfigurationDialog.ConfigurationWidget.accepted?7
 eric6.Preferences.ConfigurationDialog.ConfigurationWidget.calledFromEric?4()
 eric6.Preferences.ConfigurationDialog.ConfigurationWidget.getConfigurationPageName?4()
+eric6.Preferences.ConfigurationDialog.ConfigurationWidget.getExpandedEntries?4()
 eric6.Preferences.ConfigurationDialog.ConfigurationWidget.getLexers?4()
 eric6.Preferences.ConfigurationDialog.ConfigurationWidget.getPage?4(pageName)
 eric6.Preferences.ConfigurationDialog.ConfigurationWidget.masterPasswordChanged?7
 eric6.Preferences.ConfigurationDialog.ConfigurationWidget.on_applyButton_clicked?4()
 eric6.Preferences.ConfigurationDialog.ConfigurationWidget.on_buttonBox_clicked?4(button)
+eric6.Preferences.ConfigurationDialog.ConfigurationWidget.on_configList_itemCollapsed?4(item)
+eric6.Preferences.ConfigurationDialog.ConfigurationWidget.on_configList_itemExpanded?4(item)
 eric6.Preferences.ConfigurationDialog.ConfigurationWidget.on_resetButton_clicked?4()
 eric6.Preferences.ConfigurationDialog.ConfigurationWidget.preferencesChanged?7
 eric6.Preferences.ConfigurationDialog.ConfigurationWidget.rejected?7
 eric6.Preferences.ConfigurationDialog.ConfigurationWidget.setPreferences?4()
 eric6.Preferences.ConfigurationDialog.ConfigurationWidget.showConfigurationPageByName?4(pageName, setCurrent=True)
-eric6.Preferences.ConfigurationDialog.ConfigurationWidget?1(parent=None, fromEric=True, displayMode=DefaultMode)
+eric6.Preferences.ConfigurationDialog.ConfigurationWidget?1(parent=None, fromEric=True, displayMode=DefaultMode, expandedEntries=[])
 eric6.Preferences.ConfigurationDialog.ConfigurationWindow.accept?4()
 eric6.Preferences.ConfigurationDialog.ConfigurationWindow.showConfigurationPageByName?4(pageName)
 eric6.Preferences.ConfigurationDialog.ConfigurationWindow?1(parent=None)
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Sun Apr 12 16:59:06 2015 +0200
+++ b/Documentation/Help/source.qhp	Sun Apr 12 18:00:45 2015 +0200
@@ -2368,6 +2368,7 @@
       <keyword name="ConfigurationDialog.__preferencesChanged" id="ConfigurationDialog.__preferencesChanged" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationDialog.__preferencesChanged" />
       <keyword name="ConfigurationDialog.accept" id="ConfigurationDialog.accept" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationDialog.accept" />
       <keyword name="ConfigurationDialog.getConfigurationPageName" id="ConfigurationDialog.getConfigurationPageName" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationDialog.getConfigurationPageName" />
+      <keyword name="ConfigurationDialog.getExpandedEntries" id="ConfigurationDialog.getExpandedEntries" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationDialog.getExpandedEntries" />
       <keyword name="ConfigurationDialog.setPreferences" id="ConfigurationDialog.setPreferences" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationDialog.setPreferences" />
       <keyword name="ConfigurationDialog.showConfigurationPageByName" id="ConfigurationDialog.showConfigurationPageByName" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationDialog.showConfigurationPageByName" />
       <keyword name="ConfigurationPage (Package)" id="ConfigurationPage (Package)" ref="index-eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.html" />
@@ -2399,10 +2400,13 @@
       <keyword name="ConfigurationWidget.accept" id="ConfigurationWidget.accept" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationWidget.accept" />
       <keyword name="ConfigurationWidget.calledFromEric" id="ConfigurationWidget.calledFromEric" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationWidget.calledFromEric" />
       <keyword name="ConfigurationWidget.getConfigurationPageName" id="ConfigurationWidget.getConfigurationPageName" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationWidget.getConfigurationPageName" />
+      <keyword name="ConfigurationWidget.getExpandedEntries" id="ConfigurationWidget.getExpandedEntries" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationWidget.getExpandedEntries" />
       <keyword name="ConfigurationWidget.getLexers" id="ConfigurationWidget.getLexers" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationWidget.getLexers" />
       <keyword name="ConfigurationWidget.getPage" id="ConfigurationWidget.getPage" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationWidget.getPage" />
       <keyword name="ConfigurationWidget.on_applyButton_clicked" id="ConfigurationWidget.on_applyButton_clicked" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationWidget.on_applyButton_clicked" />
       <keyword name="ConfigurationWidget.on_buttonBox_clicked" id="ConfigurationWidget.on_buttonBox_clicked" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationWidget.on_buttonBox_clicked" />
+      <keyword name="ConfigurationWidget.on_configList_itemCollapsed" id="ConfigurationWidget.on_configList_itemCollapsed" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationWidget.on_configList_itemCollapsed" />
+      <keyword name="ConfigurationWidget.on_configList_itemExpanded" id="ConfigurationWidget.on_configList_itemExpanded" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationWidget.on_configList_itemExpanded" />
       <keyword name="ConfigurationWidget.on_resetButton_clicked" id="ConfigurationWidget.on_resetButton_clicked" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationWidget.on_resetButton_clicked" />
       <keyword name="ConfigurationWidget.setPreferences" id="ConfigurationWidget.setPreferences" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationWidget.setPreferences" />
       <keyword name="ConfigurationWidget.showConfigurationPageByName" id="ConfigurationWidget.showConfigurationPageByName" ref="eric6.Preferences.ConfigurationDialog.html#ConfigurationWidget.showConfigurationPageByName" />
--- a/Documentation/Source/eric6.Preferences.ConfigurationDialog.html	Sun Apr 12 16:59:06 2015 +0200
+++ b/Documentation/Source/eric6.Preferences.ConfigurationDialog.html	Sun Apr 12 18:00:45 2015 +0200
@@ -91,6 +91,9 @@
 <td><a href="#ConfigurationDialog.getConfigurationPageName">getConfigurationPageName</a></td>
 <td>Public method to get the page name of the current page.</td>
 </tr><tr>
+<td><a href="#ConfigurationDialog.getExpandedEntries">getExpandedEntries</a></td>
+<td>Public method to get a list of expanded entries.</td>
+</tr><tr>
 <td><a href="#ConfigurationDialog.setPreferences">setPreferences</a></td>
 <td>Public method called to store the selected values into the preferences storage.</td>
 </tr><tr>
@@ -104,7 +107,7 @@
 </table>
 <a NAME="ConfigurationDialog.__init__" ID="ConfigurationDialog.__init__"></a>
 <h4>ConfigurationDialog (Constructor)</h4>
-<b>ConfigurationDialog</b>(<i>parent=None, name=None, modal=False, fromEric=True, displayMode=ConfigurationWidget.DefaultMode</i>)
+<b>ConfigurationDialog</b>(<i>parent=None, name=None, modal=False, fromEric=True, displayMode=ConfigurationWidget.DefaultMode, expandedEntries=[]</i>)
 <p>
         Constructor
 </p><dl>
@@ -125,6 +128,10 @@
 <dd>
 mode of the configuration dialog
             (DefaultMode, HelpBrowserMode, TrayStarterMode)
+</dd><dt><i>expandedEntries=</i></dt>
+<dd>
+list of entries to be shown expanded
+            (list of strings)
 </dd>
 </dl><a NAME="ConfigurationDialog.__masterPasswordChanged" ID="ConfigurationDialog.__masterPasswordChanged"></a>
 <h4>ConfigurationDialog.__masterPasswordChanged</h4>
@@ -159,6 +166,16 @@
 <dd>
 page name of the current page (string)
 </dd>
+</dl><a NAME="ConfigurationDialog.getExpandedEntries" ID="ConfigurationDialog.getExpandedEntries"></a>
+<h4>ConfigurationDialog.getExpandedEntries</h4>
+<b>getExpandedEntries</b>(<i></i>)
+<p>
+        Public method to get a list of expanded entries.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of expanded entries (list of string)
+</dd>
 </dl><a NAME="ConfigurationDialog.setPreferences" ID="ConfigurationDialog.setPreferences"></a>
 <h4>ConfigurationDialog.setPreferences</h4>
 <b>setPreferences</b>(<i></i>)
@@ -307,6 +324,9 @@
 <td><a href="#ConfigurationWidget.getConfigurationPageName">getConfigurationPageName</a></td>
 <td>Public method to get the page name of the current page.</td>
 </tr><tr>
+<td><a href="#ConfigurationWidget.getExpandedEntries">getExpandedEntries</a></td>
+<td>Public method to get a list of expanded entries.</td>
+</tr><tr>
 <td><a href="#ConfigurationWidget.getLexers">getLexers</a></td>
 <td>Public method to get a reference to the lexers dictionary.</td>
 </tr><tr>
@@ -319,6 +339,12 @@
 <td><a href="#ConfigurationWidget.on_buttonBox_clicked">on_buttonBox_clicked</a></td>
 <td>Private slot called by a button of the button box clicked.</td>
 </tr><tr>
+<td><a href="#ConfigurationWidget.on_configList_itemCollapsed">on_configList_itemCollapsed</a></td>
+<td>Private slot handling a list entry being collapsed.</td>
+</tr><tr>
+<td><a href="#ConfigurationWidget.on_configList_itemExpanded">on_configList_itemExpanded</a></td>
+<td>Private slot handling a list entry being expanded.</td>
+</tr><tr>
 <td><a href="#ConfigurationWidget.on_resetButton_clicked">on_resetButton_clicked</a></td>
 <td>Private slot called to reset the settings of the current page.</td>
 </tr><tr>
@@ -335,7 +361,7 @@
 </table>
 <a NAME="ConfigurationWidget.__init__" ID="ConfigurationWidget.__init__"></a>
 <h4>ConfigurationWidget (Constructor)</h4>
-<b>ConfigurationWidget</b>(<i>parent=None, fromEric=True, displayMode=DefaultMode</i>)
+<b>ConfigurationWidget</b>(<i>parent=None, fromEric=True, displayMode=DefaultMode, expandedEntries=[]</i>)
 <p>
         Constructor
 </p><dl>
@@ -350,6 +376,10 @@
 <dd>
 mode of the configuration dialog
             (DefaultMode, HelpBrowserMode, TrayStarterMode)
+</dd><dt><i>expandedEntries=</i></dt>
+<dd>
+list of entries to be shown expanded
+            (list of strings)
 </dd>
 </dl><dl>
 <dt>Raises <b>RuntimeError</b>:</dt>
@@ -463,6 +493,16 @@
 <dd>
 page name of the current page (string)
 </dd>
+</dl><a NAME="ConfigurationWidget.getExpandedEntries" ID="ConfigurationWidget.getExpandedEntries"></a>
+<h4>ConfigurationWidget.getExpandedEntries</h4>
+<b>getExpandedEntries</b>(<i></i>)
+<p>
+        Public method to get a list of expanded entries.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of expanded entries (list of string)
+</dd>
 </dl><a NAME="ConfigurationWidget.getLexers" ID="ConfigurationWidget.getLexers"></a>
 <h4>ConfigurationWidget.getLexers</h4>
 <b>getLexers</b>(<i></i>)
@@ -504,6 +544,26 @@
 <dd>
 button that was clicked (QAbstractButton)
 </dd>
+</dl><a NAME="ConfigurationWidget.on_configList_itemCollapsed" ID="ConfigurationWidget.on_configList_itemCollapsed"></a>
+<h4>ConfigurationWidget.on_configList_itemCollapsed</h4>
+<b>on_configList_itemCollapsed</b>(<i>item</i>)
+<p>
+        Private slot handling a list entry being collapsed.
+</p><dl>
+<dt><i>item</i></dt>
+<dd>
+reference to the collapsed item (QTreeWidgetItem)
+</dd>
+</dl><a NAME="ConfigurationWidget.on_configList_itemExpanded" ID="ConfigurationWidget.on_configList_itemExpanded"></a>
+<h4>ConfigurationWidget.on_configList_itemExpanded</h4>
+<b>on_configList_itemExpanded</b>(<i>item</i>)
+<p>
+        Private slot handling a list entry being expanded.
+</p><dl>
+<dt><i>item</i></dt>
+<dd>
+reference to the expanded item (QTreeWidgetItem)
+</dd>
 </dl><a NAME="ConfigurationWidget.on_resetButton_clicked" ID="ConfigurationWidget.on_resetButton_clicked"></a>
 <h4>ConfigurationWidget.on_resetButton_clicked</h4>
 <b>on_resetButton_clicked</b>(<i></i>)
--- a/Preferences/ConfigurationDialog.py	Sun Apr 12 16:59:06 2015 +0200
+++ b/Preferences/ConfigurationDialog.py	Sun Apr 12 18:00:45 2015 +0200
@@ -79,7 +79,8 @@
     HelpBrowserMode = 1
     TrayStarterMode = 2
     
-    def __init__(self, parent=None, fromEric=True, displayMode=DefaultMode):
+    def __init__(self, parent=None, fromEric=True, displayMode=DefaultMode,
+                 expandedEntries=[]):
         """
         Constructor
         
@@ -89,6 +90,8 @@
         @keyparam displayMode mode of the configuration dialog
             (DefaultMode, HelpBrowserMode, TrayStarterMode)
         @exception RuntimeError raised to indicate an invalid dialog mode
+        @keyparam expandedEntries list of entries to be shown expanded
+            (list of strings)
         """
         assert displayMode in (
             ConfigurationWidget.DefaultMode,
@@ -117,9 +120,9 @@
                 # key : [display string, pixmap name, dialog module name or
                 #        page creation function, parent key,
                 #        reference to configuration page (must always be last)]
-                # The dialog module must have the module function create to
+                # The dialog module must have the module function 'create' to
                 # create the configuration page. This must have the method
-                # save to save the settings.
+                # 'save' to save the settings.
                 "applicationPage":
                 [self.tr("Application"), "preferences-application.png",
                  "ApplicationPage", None, None],
@@ -317,14 +320,15 @@
             
             self.configItems.update(
                 e5App().getObject("PluginManager").getPluginConfigData())
+        
         elif displayMode == ConfigurationWidget.HelpBrowserMode:
             self.configItems = {
                 # key : [display string, pixmap name, dialog module name or
                 #        page creation function, parent key,
                 #        reference to configuration page (must always be last)]
-                # The dialog module must have the module function create to
+                # The dialog module must have the module function 'create' to
                 # create the configuration page. This must have the method
-                # save to save the settings.
+                # 'save' to save the settings.
                 "interfacePage":
                 [self.tr("Interface"), "preferences-interface.png",
                  "HelpInterfacePage", None, None],
@@ -355,22 +359,25 @@
                 [self.tr("eric6 Web Browser"), "ericWeb.png",
                  "HelpWebBrowserPage", "0helpPage", None],
             }
+        
         elif displayMode == ConfigurationWidget.TrayStarterMode:
             self.configItems = {
                 # key : [display string, pixmap name, dialog module name or
                 #        page creation function, parent key,
                 #        reference to configuration page (must always be last)]
-                # The dialog module must have the module function create to
+                # The dialog module must have the module function 'create' to
                 # create the configuration page. This must have the method
-                # save to save the settings.
+                # 'save' to save the settings.
                 "trayStarterPage":
                 [self.tr("Tray Starter"), "erict.png",
                  "TrayStarterPage", None, None],
             }
+        
         else:
             raise RuntimeError("Illegal mode value: {0}".format(displayMode))
         
         # generate the list entries
+        self.__expandedEntries = []
         for key in sorted(self.configItems.keys()):
             pageData = self.configItems[key]
             if pageData[3]:
@@ -380,7 +387,10 @@
             self.itmDict[key] = ConfigurationPageItem(pitm, pageData[0], key,
                                                       pageData[1])
             self.itmDict[key].setData(0, Qt.UserRole, key)
-            self.itmDict[key].setExpanded(True)
+            if (not self.fromEric or
+                displayMode != ConfigurationWidget.DefaultMode or
+                    key in expandedEntries):
+                self.itmDict[key].setExpanded(True)
         self.configList.sortByColumn(0, Qt.AscendingOrder)
         
         # set the initial size of the splitter
@@ -747,6 +757,36 @@
             self.showConfigurationPageByName(pageName)
             if savedState is not None:
                 self.configStack.currentWidget().setState(savedState)
+        
+    def getExpandedEntries(self):
+        """
+        Public method to get a list of expanded entries.
+        
+        @return list of expanded entries (list of string)
+        """
+        return self.__expandedEntries
+    
+    @pyqtSlot(QTreeWidgetItem)
+    def on_configList_itemCollapsed(self, item):
+        """
+        Private slot handling a list entry being collapsed.
+        
+        @param item reference to the collapsed item (QTreeWidgetItem)
+        """
+        pageName = item.data(0, Qt.UserRole)
+        if pageName in self.__expandedEntries:
+            self.__expandedEntries.remove(pageName)
+    
+    @pyqtSlot(QTreeWidgetItem)
+    def on_configList_itemExpanded(self, item):
+        """
+        Private slot handling a list entry being expanded.
+        
+        @param item reference to the expanded item (QTreeWidgetItem)
+        """
+        pageName = item.data(0, Qt.UserRole)
+        if pageName not in self.__expandedEntries:
+            self.__expandedEntries.append(pageName)
 
 
 class ConfigurationDialog(QDialog):
@@ -765,7 +805,8 @@
     TrayStarterMode = ConfigurationWidget.TrayStarterMode
     
     def __init__(self, parent=None, name=None, modal=False,
-                 fromEric=True, displayMode=ConfigurationWidget.DefaultMode):
+                 fromEric=True, displayMode=ConfigurationWidget.DefaultMode,
+                 expandedEntries=[]):
         """
         Constructor
         
@@ -776,6 +817,8 @@
             eric6 ide (boolean)
         @keyparam displayMode mode of the configuration dialog
             (DefaultMode, HelpBrowserMode, TrayStarterMode)
+        @keyparam expandedEntries list of entries to be shown expanded
+            (list of strings)
         """
         super(ConfigurationDialog, self).__init__(parent)
         if name:
@@ -786,7 +829,8 @@
         self.layout.setSpacing(0)
         
         self.cw = ConfigurationWidget(self, fromEric=fromEric,
-                                      displayMode=displayMode)
+                                      displayMode=displayMode,
+                                      expandedEntries=expandedEntries)
         size = self.cw.size()
         self.layout.addWidget(self.cw)
         self.resize(size)
@@ -828,6 +872,14 @@
         """
         return self.cw.getConfigurationPageName()
         
+    def getExpandedEntries(self):
+        """
+        Public method to get a list of expanded entries.
+        
+        @return list of expanded entries (list of string)
+        """
+        return self.cw.getExpandedEntries()
+        
     def setPreferences(self):
         """
         Public method called to store the selected values into the preferences
--- a/UI/UserInterface.py	Sun Apr 12 16:59:06 2015 +0200
+++ b/UI/UserInterface.py	Sun Apr 12 18:00:45 2015 +0200
@@ -577,8 +577,10 @@
         SpellChecker.setDefaultLanguage(
             Preferences.getEditor("SpellCheckingDefaultLanguage"))
         
-        # attribute for the last shown configuration page
+        # attributes for the last shown configuration page and the
+        # extended configuration entries
         self.__lastConfigurationPageName = ""
+        self.__expandedConfigurationEntries = []
         
     def __createLayout(self, debugServer):
         """
@@ -5204,7 +5206,10 @@
         @param pageName name of the configuration page to show (string)
         """
         from Preferences.ConfigurationDialog import ConfigurationDialog
-        dlg = ConfigurationDialog(self, 'Configuration')
+        dlg = ConfigurationDialog(
+            self, 'Configuration',
+            expandedEntries=self.__expandedConfigurationEntries,
+        )
         dlg.preferencesChanged.connect(self.__preferencesChanged)
         dlg.masterPasswordChanged.connect(self.__masterPasswordChanged)
         dlg.show()
@@ -5221,6 +5226,7 @@
             Preferences.syncPreferences()
             self.__preferencesChanged()
         self.__lastConfigurationPageName = dlg.getConfigurationPageName()
+        self.__expandedConfigurationEntries = dlg.getExpandedEntries()
         
     def __exportPreferences(self):
         """
--- a/changelog	Sun Apr 12 16:59:06 2015 +0200
+++ b/changelog	Sun Apr 12 18:00:45 2015 +0200
@@ -17,6 +17,9 @@
 - Preferences Dialog
   -- changed the 'filter' function to a 'search' function disabling
      all entries, that don't contain the entered string
+  -- changed the handling of the configuration page list entries
+     to be collapsed on first show and remember the expanded ones
+     while eric is running (but not between invocations)
 - Previewers
   -- added capability to use 'Sphinx' to preview ReST files
 - Project

eric ide

mercurial