From e1dc0d0b7750cd218963ace001c3b548fd37f5ba Mon Sep 17 00:00:00 2001
From: Joseph Mirabel <jmirabel@laas.fr>
Date: Tue, 6 Mar 2018 13:30:26 +0100
Subject: [PATCH] Save history of PythonQt console

---
 include/gepetto/gui/pythonwidget.hh |  4 ++++
 src/gui/pythonwidget.cc             | 27 +++++++++++++++++++++++++++
 src/gui/settings.cc                 |  6 ++++++
 3 files changed, 37 insertions(+)

diff --git a/include/gepetto/gui/pythonwidget.hh b/include/gepetto/gui/pythonwidget.hh
index 443e58c..f2309f8 100644
--- a/include/gepetto/gui/pythonwidget.hh
+++ b/include/gepetto/gui/pythonwidget.hh
@@ -28,6 +28,7 @@
 #include <QDockWidget>
 #include <QLayout>
 #include <QPushButton>
+#include <QSettings>
 
 class PythonQtObjectPtr;
 class PythonQtScriptingConsole;
@@ -98,6 +99,9 @@ namespace gepetto {
           const QVariantList& args = QVariantList(),
           const QVariantMap& kwargs = QVariantMap()) const;
 
+      void saveHistory (QSettings& settings);
+      void restoreHistory (QSettings& settings);
+
     public slots:
       /// Load a plugin by importing a module
       ///
diff --git a/src/gui/pythonwidget.cc b/src/gui/pythonwidget.cc
index 612f8e3..bfd33c3 100644
--- a/src/gui/pythonwidget.cc
+++ b/src/gui/pythonwidget.cc
@@ -18,6 +18,7 @@
 
 #include <QAction>
 #include <QFileDialog>
+#include <QSettings>
 #include <PythonQt.h>
 #include <PythonQt_QtAll.h>
 #include <gui/PythonQtScriptingConsole.h>
@@ -119,6 +120,32 @@ namespace gepetto {
         fd->deleteLater();
       }
 
+      void PythonWidget::saveHistory (QSettings& settings)
+      {
+        settings.beginGroup("pythonqt");
+        QStringList history = console_->history ();
+        int limit = 200;
+        int start = std::max(history.length() - limit, 0);
+        QList<QVariant> h;
+        foreach (QString s, history.mid(start)) {
+          h << s;
+        }
+        settings.setValue("history", h);
+        settings.endGroup();
+      }
+
+      void PythonWidget::restoreHistory (QSettings& settings)
+      {
+        settings.beginGroup("pythonqt");
+        QList<QVariant> h = settings.value("history").toList();
+        QStringList history;
+        foreach(QVariant v, h) {
+          history << v.toString();
+        }
+        console_->setHistory (history);
+        settings.endGroup();
+      }
+
       void PythonWidget::loadScriptPlugin(QString moduleName, QString fileName)
       {
         PythonQt* pqt = PythonQt::self();
diff --git a/src/gui/settings.cc b/src/gui/settings.cc
index 8d7a28a..3474a11 100644
--- a/src/gui/settings.cc
+++ b/src/gui/settings.cc
@@ -212,6 +212,9 @@ namespace gepetto {
         mw->restoreState (settings.value("state").toByteArray());
         mw->centralWidget()->setVisible (settings.value("centralWidgetVisibility", true).toBool());
         settings.endGroup();
+#if GEPETTO_GUI_HAS_PYTHONQT
+        mw->pythonWidget()->restoreHistory(settings);
+#endif
       }
     }
 
@@ -228,6 +231,9 @@ namespace gepetto {
         settings.setValue("state"   , mw->saveState());
         settings.setValue("centralWidgetVisibility", mw->centralWidget()->isVisible ());
         settings.endGroup();
+#if GEPETTO_GUI_HAS_PYTHONQT
+        mw->pythonWidget()->saveHistory(settings);
+#endif
       }
     }
 
-- 
GitLab