Mercurial > hg > octave-lojdl
changeset 16539:8ea8df0747e9
make undo button and menu item work for command window
* main-window.h, main-window.cc (main_window::handle_undo_request,
main_window::command_window_undo_callback): New functions.
(main_window::construct_edit_menu): Connect _undo_action::triggered to
main_window::handle_undo_request.
* cmd-edit.h, cmd-edit.cc (command_window::redisplay,
command_window::do_redisplay, command_window::undo,
command_window::do_undo, gnu_readline::do_redisplay,
gnu_readline::do_undo): New functions.
* oct-rl-edit.h, oct-rl-edit.c (octave_rl_do_undo): New function.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 18 Apr 2013 03:19:48 -0400 |
parents | 8e180eac78d0 |
children | 63b144e6a3d0 |
files | libgui/src/main-window.cc libgui/src/main-window.h liboctave/util/cmd-edit.cc liboctave/util/cmd-edit.h liboctave/util/oct-rl-edit.c liboctave/util/oct-rl-edit.h |
diffstat | 6 files changed, 65 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/src/main-window.cc +++ b/libgui/src/main-window.cc @@ -170,6 +170,12 @@ } void +main_window::handle_undo_request (void) +{ + octave_link::post_event (this, &main_window::command_window_undo_callback); +} + +void main_window::handle_clear_command_window_request (void) { octave_link::post_event (this, &main_window::clear_command_window_callback); @@ -1302,6 +1308,9 @@ connect (current_dir_up, SIGNAL (triggered ()), this, SLOT (change_directory_up ())); + + connect (_undo_action, SIGNAL (triggered ()), + this, SLOT (handle_undo_request ())); } void @@ -1337,13 +1346,19 @@ } void +main_window::command_window_undo_callback (void) +{ + command_editor::undo (); + command_editor::redisplay (); +} + +void main_window::clear_command_window_callback (void) { Fclc (); command_editor::interrupt (true); } - void main_window::clear_history_callback (void) {
--- a/libgui/src/main-window.h +++ b/libgui/src/main-window.h @@ -89,6 +89,7 @@ void handle_clear_history_request (void); void handle_rename_variable_request (const QString& old_name, const QString& new_name); + void handle_undo_request (void); void new_file (const QString& commands = QString ()); void open_file (const QString& file_name = QString ()); void open_online_documentation_page (void); @@ -181,6 +182,8 @@ void rename_variable_callback (const name_pair& names); + void command_window_undo_callback (void); + void clear_command_window_callback (void); void clear_workspace_callback (void);
--- a/liboctave/util/cmd-edit.cc +++ b/liboctave/util/cmd-edit.cc @@ -86,6 +86,8 @@ FILE *do_get_output_stream (void); + void do_redisplay (void); + int do_terminal_rows (void); int do_terminal_cols (void); @@ -143,6 +145,8 @@ void do_accept_line (void); + bool do_undo (void); + void do_clear_undo_list (void); void set_startup_hook (startup_hook_fcn f); @@ -292,6 +296,12 @@ return ::octave_rl_get_output_stream (); } +void +gnu_readline::do_redisplay (void) +{ + ::octave_rl_redisplay (); +} + // GNU readline handles SIGWINCH, so these values have a good chance // of being correct even if the window changes size (they may be // wrong if, for example, the luser changes the window size while the @@ -530,6 +540,12 @@ command_accept_line (1, '\n'); } +bool +gnu_readline::do_undo (void) +{ + return ::octave_rl_do_undo (); +} + void gnu_readline::do_clear_undo_list () { @@ -961,6 +977,13 @@ ? instance->do_get_output_stream () : 0; } +void +command_editor::redisplay (void) +{ + if (instance_ok ()) + instance->do_redisplay (); +} + int command_editor::terminal_rows (void) { @@ -1177,6 +1200,12 @@ instance->do_accept_line (); } +bool +command_editor::undo (void) +{ + return instance_ok () ? instance->do_undo () : false; +} + void command_editor::clear_undo_list (void) {
--- a/liboctave/util/cmd-edit.h +++ b/liboctave/util/cmd-edit.h @@ -71,6 +71,8 @@ static FILE *get_output_stream (void); + static void redisplay (void); + static int terminal_rows (void); static int terminal_cols (void); @@ -127,6 +129,8 @@ static void accept_line (void); + static bool undo (void); + static void clear_undo_list (void); static void add_startup_hook (startup_hook_fcn f); @@ -213,6 +217,8 @@ virtual FILE *do_get_output_stream (void) = 0; + virtual void do_redisplay (void) { } + virtual int do_terminal_rows (void) { return 24; } virtual int do_terminal_cols (void) { return 80; } @@ -271,6 +277,8 @@ virtual void do_accept_line (void) = 0; + virtual bool do_undo (void) { return false; } + virtual void do_clear_undo_list (void) { } virtual void set_startup_hook (startup_hook_fcn) { }
--- a/liboctave/util/oct-rl-edit.c +++ b/liboctave/util/oct-rl-edit.c @@ -141,6 +141,12 @@ return rl_line_buffer; } +int +octave_rl_do_undo (void) +{ + return rl_do_undo (); +} + void octave_rl_clear_undo_list (void) {
--- a/liboctave/util/oct-rl-edit.h +++ b/liboctave/util/oct-rl-edit.h @@ -46,7 +46,7 @@ { #endif - extern void octave_rl_redisplay (void); +extern void octave_rl_redisplay (void); extern int octave_rl_screen_height (void); @@ -68,6 +68,8 @@ extern const char *octave_rl_line_buffer (void); +extern int octave_rl_do_undo (void); + extern void octave_rl_clear_undo_list (void); extern void octave_rl_set_name (const char *);