changeset 16431:5982d469f79b

use signal for setting, appending to, and clearing history widget * history-dockwidget.h, history-dockwidget.cc (history_dock_widget::request_history_model_update, history_dock_widget::reset_model, history_dock_widget::update_history_callback): Delete. (history_dock_widget::set_history, history_dock_widget::append_history, history_dock_widget::clear_history): New functions. * main-window.h, main-window.cc (main_window::update_history): Delete. (main_window::construct): Delete connection from _octave_qt_event_listener::update_history_signal to main_window::update_history. Connect _octave_qt_link::set_history_signal to _history_dock_widget::set_history. Connect _octave_qt_link::append_history_signal to _history_dock_widget::append_history. Connect _octave_qt_link::clear_history_signal to _history_dock_widget::clear_history. (main_window::clear_history_callback): Call Fhistory instead of command_history::clear and _history_dock_widget->reset_model. * octave-main-thread.cc (octave_main_thread::run): Don't call octave_link::update_history. * octave-qt-event-listener.h, octave-qt-event-listener.cc (octave_qt_event_listener::update_history): Delete. (octave_qt_event_listener::update_history_signal): Delete. * octave-qt-link.h, octave-qt-link.cc (octave_qt_link::do_update_history): Delete. (octave_qt_link::do_set_history,octave_qt_link::do_append_history, octave_qt_link::do_clear_history): New functions. (octave_qt_link::do_post_input_event): Don't call do_update_history. (set_history_signal, append_history_signal, clear_history_signal): New signals. * octave-event-listener.h (octave_event_listener::update_history): Delete. * input.cc (octave_base_reader::octave_gets): Call command_history::add. * oct-hist.cc (do_history): New option, -c. Call octave_link history functions as needed. (initialize_history): Call octave_link::set_history. (octave_history_write_timestamp): Call octave_link::append_history. (Fedit_history): Document -c. * octave-link.h (octave_link::update_history, octave_link::do_update_history): Delete. (octave_link::set_history, octave_link::append_history, octave_link::clear_history, octave_link::do_set_history, octave_link::do_append_history, octave_link::do_clear_history, octave_link::do_pre_input_event, octave_link::do_post_input_event): New functions.
author John W. Eaton <jwe@octave.org>
date Thu, 04 Apr 2013 13:20:43 -0400
parents 1766d8655006
children fe4cd846c3e7
files libgui/src/history-dockwidget.cc libgui/src/history-dockwidget.h libgui/src/main-window.cc libgui/src/main-window.h libgui/src/octave-main-thread.cc libgui/src/octave-qt-event-listener.cc libgui/src/octave-qt-event-listener.h libgui/src/octave-qt-link.cc libgui/src/octave-qt-link.h libinterp/interp-core/octave-event-listener.h libinterp/interpfcn/input.cc libinterp/interpfcn/oct-hist.cc libinterp/interpfcn/octave-link.h
diffstat 13 files changed, 113 insertions(+), 82 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/history-dockwidget.cc	Thu Apr 04 09:28:47 2013 -0400
+++ b/libgui/src/history-dockwidget.cc	Thu Apr 04 13:20:43 2013 -0400
@@ -120,40 +120,24 @@
 }
 
 void
-history_dock_widget::request_history_model_update ()
+history_dock_widget::set_history (const QStringList& hist)
 {
-  octave_link::post_event (this, &history_dock_widget::update_history_callback);
+  _history_model->setStringList (hist);
+  _history_list_view->scrollToBottom ();
 }
 
 void
-history_dock_widget::reset_model ()
+history_dock_widget::append_history (const QString& hist_entry)
+{
+  QStringList lst = _history_model->stringList ();
+  lst.append (hist_entry);
+  _history_model->setStringList (lst);
+  _history_list_view->scrollToBottom ();
+}
+
+void
+history_dock_widget::clear_history (void)
 {
   _history_model->setStringList (QStringList ());
 }
 
-void
-history_dock_widget::update_history_callback (void)
-{
-  // Determine the client's (our) history length and the one of the server.
-  int clientHistoryLength = _history_model->rowCount ();
-  int serverHistoryLength = command_history::length ();
-
-  // If were behind the server, iterate through all new entries and add
-  // them to our history.
-  if (clientHistoryLength < serverHistoryLength)
-    {
-      int elts_to_add = serverHistoryLength - clientHistoryLength;
-
-      _history_model->insertRows (clientHistoryLength, elts_to_add);
-
-      for (int i = clientHistoryLength; i < serverHistoryLength; i++)
-        {
-          std::string entry = command_history::get_entry (i);
-
-          _history_model->setData (_history_model->index (i),
-                      QString::fromUtf8 (entry.data (), entry.size ()));
-        }
-
-      _history_list_view->scrollToBottom ();
-    }
-}
--- a/libgui/src/history-dockwidget.h	Thu Apr 04 09:28:47 2013 -0400
+++ b/libgui/src/history-dockwidget.h	Thu Apr 04 13:20:43 2013 -0400
@@ -35,11 +35,10 @@
   public:
   history_dock_widget (QWidget *parent = 0);
 
-  void update_history_callback (void);
-
 public slots:
-  void request_history_model_update ();
-  void reset_model ();
+  void set_history (const QStringList& hist);
+  void append_history (const QString& hist_entry);
+  void clear_history (void);
 
 signals:
   void information (const QString& message);
--- a/libgui/src/main-window.cc	Thu Apr 04 09:28:47 2013 -0400
+++ b/libgui/src/main-window.cc	Thu Apr 04 13:20:43 2013 -0400
@@ -156,7 +156,7 @@
 }
 
 void
-main_window::handle_clear_history_request()
+main_window::handle_clear_history_request (void)
 {
   octave_link::post_event (this, &main_window::clear_history_callback);
 }
@@ -289,12 +289,6 @@
 }
 
 void
-main_window::update_history (void)
-{
-  _history_dock_widget->update_history_callback ();
-}
-
-void
 main_window::change_current_working_directory ()
 {
   QString directory =
@@ -1145,11 +1139,6 @@
            SLOT (update_workspace ()));
 
   connect (_octave_qt_event_listener,
-           SIGNAL (update_history_signal ()),
-           this,
-           SLOT (update_history ()));
-
-  connect (_octave_qt_event_listener,
            SIGNAL (entered_debug_mode_signal ()),
            this,
            SLOT(handle_entered_debug_mode ()));
@@ -1164,6 +1153,18 @@
   _octave_qt_link = new octave_qt_link ();
 
   connect (_octave_qt_link,
+           SIGNAL (set_history_signal (const QStringList&)),
+           _history_dock_widget, SLOT (set_history (const QStringList&)));
+
+  connect (_octave_qt_link,
+           SIGNAL (append_history_signal (const QString&)),
+           _history_dock_widget, SLOT (append_history (const QString&)));
+
+  connect (_octave_qt_link,
+           SIGNAL (clear_history_signal (void)),
+           _history_dock_widget, SLOT (clear_history (void)));
+
+  connect (_octave_qt_link,
            SIGNAL (update_dbstop_marker_signal (bool, const QString&, int)),
            _file_editor,
            SLOT (handle_update_dbstop_marker_request (bool, const QString&, int)));
@@ -1209,9 +1210,7 @@
 void
 main_window::clear_history_callback (void)
 {
-  command_history::clear ();
-
-  _history_dock_widget->reset_model ();
+  Fhistory (ovl ("-c"));
 }
 
 void
--- a/libgui/src/main-window.h	Thu Apr 04 09:28:47 2013 -0400
+++ b/libgui/src/main-window.h	Thu Apr 04 13:20:43 2013 -0400
@@ -71,7 +71,7 @@
   void handle_save_workspace_request ();
   void handle_load_workspace_request ();
   void handle_clear_workspace_request ();
-  void handle_clear_history_request ();
+  void handle_clear_history_request (void);
   void handle_command_double_clicked (const QString& command);
   void new_file ();
   void open_file ();
@@ -87,7 +87,6 @@
   void reset_windows ();
   void current_working_directory_has_changed (const QString& directory);
   void update_workspace (void);
-  void update_history (void);
   void change_current_working_directory ();
   void set_current_working_directory (const QString& directory);
   void current_working_directory_up ();
--- a/libgui/src/octave-main-thread.cc	Thu Apr 04 09:28:47 2013 -0400
+++ b/libgui/src/octave-main-thread.cc	Thu Apr 04 13:20:43 2013 -0400
@@ -50,8 +50,5 @@
   octave_initialize_interpreter (octave_cmdline_argc, octave_cmdline_argv,
                                  octave_embedded);
 
-  // Prime the history list.
-  octave_link::update_history ();
-
   octave_execute_interpreter ();
 }
--- a/libgui/src/octave-qt-event-listener.cc	Thu Apr 04 09:28:47 2013 -0400
+++ b/libgui/src/octave-qt-event-listener.cc	Thu Apr 04 13:20:43 2013 -0400
@@ -48,12 +48,6 @@
 }
 
 void
-octave_qt_event_listener::update_history (void)
-{
-  emit update_history_signal ();
-}
-
-void
 octave_qt_event_listener::about_to_exit ()
 {
   qApp->quit ();
--- a/libgui/src/octave-qt-event-listener.h	Thu Apr 04 09:28:47 2013 -0400
+++ b/libgui/src/octave-qt-event-listener.h	Thu Apr 04 13:20:43 2013 -0400
@@ -36,7 +36,6 @@
 
   void current_directory_has_changed (const std::string& directory);
   void update_workspace (void);
-  void update_history (void);
   void about_to_exit ();
 
   void entered_debug_mode ();
@@ -45,7 +44,6 @@
 signals:
   void current_directory_has_changed_signal (const QString& directory);
   void update_workspace_signal (void);
-  void update_history_signal (void);
   void entered_debug_mode_signal ();
   void quit_debug_mode_signal ();
 };
--- a/libgui/src/octave-qt-link.cc	Thu Apr 04 09:28:47 2013 -0400
+++ b/libgui/src/octave-qt-link.cc	Thu Apr 04 13:20:43 2013 -0400
@@ -26,6 +26,10 @@
 #include <config.h>
 #endif
 
+#include <QStringList>
+
+#include "str-vec.h"
+
 #include "octave-qt-link.h"
 
 octave_qt_link::octave_qt_link (void)
@@ -47,14 +51,26 @@
 }
 
 void
-octave_qt_link::do_update_history (void)
+octave_qt_link::do_set_history (const string_vector& hist)
 {
-  if (event_listener)
-    {
-      event_listener->update_history ();
+  QStringList qt_hist;
+
+  for (octave_idx_type i = 0; i < hist.length (); i++)
+    qt_hist.append (QString::fromStdString (hist[i]));
+
+  emit set_history_signal (qt_hist);
+}
 
-      do_process_events ();
-    }
+void
+octave_qt_link::do_append_history (const std::string& hist_entry)
+{
+  emit append_history_signal (QString::fromStdString (hist_entry));
+}
+
+void
+octave_qt_link::do_clear_history (void)
+{
+  emit clear_history_signal ();
 }
 
 void
@@ -66,7 +82,6 @@
 void
 octave_qt_link::do_post_input_event (void)
 {
-  do_update_history ();
 }
 
 void
--- a/libgui/src/octave-qt-link.h	Thu Apr 04 09:28:47 2013 -0400
+++ b/libgui/src/octave-qt-link.h	Thu Apr 04 13:20:43 2013 -0400
@@ -53,7 +53,9 @@
 
   void do_update_workspace (void);
 
-  void do_update_history (void);
+  void do_set_history (const string_vector& hist);
+  void do_append_history (const std::string& hist_entry);
+  void do_clear_history (void);
 
   void do_pre_input_event (void);
   void do_post_input_event (void);
@@ -82,6 +84,10 @@
 
 signals:
 
+  void set_history_signal (const QStringList& hist);
+  void append_history_signal (const QString& hist_entry);
+  void clear_history_signal (void);
+
   void update_dbstop_marker_signal (bool insert, const QString& file, int line);
 
   void edit_file_signal (const QString& file);
--- a/libinterp/interp-core/octave-event-listener.h	Thu Apr 04 09:28:47 2013 -0400
+++ b/libinterp/interp-core/octave-event-listener.h	Thu Apr 04 13:20:43 2013 -0400
@@ -37,9 +37,6 @@
     virtual void
     update_workspace (void) = 0;
 
-    virtual void
-    update_history (void) = 0;
-
     virtual void about_to_exit () = 0;
 
     virtual void entered_debug_mode () = 0;
--- a/libinterp/interpfcn/input.cc	Thu Apr 04 09:28:47 2013 -0400
+++ b/libinterp/interpfcn/input.cc	Thu Apr 04 13:20:43 2013 -0400
@@ -252,7 +252,12 @@
   if (retval != "\n")
     {
       if (! history_skip_auto_repeated_debugging_command)
-        command_history::add (retval);
+        {
+          command_history::add (retval);
+
+          if (! command_history::ignoring_entries ())
+            octave_link::append_history (retval);
+        }
 
       octave_diary << retval;
 
--- a/libinterp/interpfcn/oct-hist.cc	Thu Apr 04 09:28:47 2013 -0400
+++ b/libinterp/interpfcn/oct-hist.cc	Thu Apr 04 13:20:43 2013 -0400
@@ -48,6 +48,7 @@
 #include "cmd-hist.h"
 #include "file-ops.h"
 #include "lo-mappers.h"
+#include "octave-link.h"
 #include "oct-env.h"
 #include "oct-time.h"
 #include "str-vec.h"
@@ -186,18 +187,29 @@
             command_history::write ();
 
           else if (option == "-r")
-            // Read entire file.
-            command_history::read ();
+            {
+              // Read entire file.
+              command_history::read ();
+              octave_link::set_history (command_history::list ());
+            }
 
           else if (option == "-n")
-            // Read 'new' history from file.
-            command_history::read_range ();
+            {
+              // Read 'new' history from file.
+              command_history::read_range ();
+              octave_link::set_history (command_history::list ());
+            }
 
           else
             panic_impossible ();
 
           return hlist;
         }
+      else if (option == "-c")
+        {
+          command_history::clear ();
+          octave_link::clear_history ();
+        }
       else if (option == "-q")
         numbered_output = false;
       else if (option == "--")
@@ -354,7 +366,10 @@
         tmp.resize (len - 1);
 
       if (! tmp.empty ())
-        command_history::add (tmp);
+        {
+          command_history::add (tmp);
+          octave_link::append_history (tmp);
+        }
     }
 }
 
@@ -601,6 +616,8 @@
                                default_history_file (),
                                default_history_size (),
                                octave_env::getenv ("OCTAVE_HISTCONTROL"));
+
+  octave_link::set_history (command_history::list ());
 }
 
 void
@@ -611,7 +628,10 @@
   std::string timestamp = now.strftime (Vhistory_timestamp_format_string);
 
   if (! timestamp.empty ())
-    command_history::add (timestamp);
+    {
+      command_history::add (timestamp); 
+      octave_link::append_history (timestamp);
+   }
 }
 
 DEFUN (edit_history, args, ,
@@ -671,6 +691,9 @@
 @itemx -@var{n}\n\
 Display only the most recent @var{n} lines of history.\n\
 \n\
+@item -c\n\
+Clear the history list.\n\
+\n\
 @item -q\n\
 Don't number the displayed lines of history.  This is useful for cutting\n\
 and pasting commands using the X Window System.\n\
--- a/libinterp/interpfcn/octave-link.h	Thu Apr 04 09:28:47 2013 -0400
+++ b/libinterp/interpfcn/octave-link.h	Thu Apr 04 13:20:43 2013 -0400
@@ -31,6 +31,7 @@
 #include "octave-event-listener.h"
 
 class octave_mutex;
+class string_vector;
 
 // \class OctaveLink
 // \brief Provides threadsafe access to octave.
@@ -119,10 +120,22 @@
       instance->do_update_workspace ();
   }
 
-  static void update_history (void)
+  static void set_history (const string_vector& hist)
   {
     if (instance_ok ())
-      instance->do_update_history ();
+      instance->do_set_history (hist);
+  }
+
+  static void append_history (const std::string& hist_entry)
+  {
+    if (instance_ok ())
+      instance->do_append_history (hist_entry);
+  }
+
+  static void clear_history (void)
+  {
+    if (instance_ok ())
+      instance->do_clear_history ();
   }
 
   static void pre_input_event (void)
@@ -225,7 +238,9 @@
 
   virtual void do_update_workspace (void) = 0;
 
-  virtual void do_update_history (void) = 0;
+  virtual void do_set_history (const string_vector& hist) = 0;
+  virtual void do_append_history (const std::string& hist_entry) = 0;
+  virtual void do_clear_history (void) = 0;
 
   virtual void do_pre_input_event (void) = 0;
   virtual void do_post_input_event (void) = 0;