Mercurial > hg > octave-lojdl
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 +++ b/libgui/src/history-dockwidget.cc @@ -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 +++ b/libgui/src/history-dockwidget.h @@ -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 +++ b/libgui/src/main-window.cc @@ -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 +++ b/libgui/src/main-window.h @@ -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 +++ b/libgui/src/octave-main-thread.cc @@ -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 +++ b/libgui/src/octave-qt-event-listener.cc @@ -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 +++ b/libgui/src/octave-qt-event-listener.h @@ -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 +++ b/libgui/src/octave-qt-link.cc @@ -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 +++ b/libgui/src/octave-qt-link.h @@ -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 +++ b/libinterp/interp-core/octave-event-listener.h @@ -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 +++ b/libinterp/interpfcn/input.cc @@ -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 +++ b/libinterp/interpfcn/oct-hist.cc @@ -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 +++ b/libinterp/interpfcn/octave-link.h @@ -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;