annotate libgui/src/octave-cmd.cc @ 19978:034bcac0b61c

use of C++ API for running a file (bug #42307) * octave-cmd.cc: New file providing the new command class octave_cmd; (prepare_command_editor): common action that all derived command classes use for method execute; (octave_cmd_exec::execute): execute method of derived class for executing ordinary commands in the terminal; (octave_cmd_eval::execute): execute method of derived class for running a file (as function if it is a valid identifier or as script) * octave-cmd.h: providing base and derived classes * main-window.cc (main_window): _cmd_queue is not a pointer anymore; (~main_window): _cmd_queue is not a pointer anymore; (execute_command_in_terminal): use new command class for queuing a command; (run_file_in_terminal): check for valid identifier moved from here to the execute method of the related command class; (run_file_callback): use new class for queuing command, path check moved from here into the execute method of the command class; (queue_command): gets new command class instead of a string as input; (closeEvent): queue command class instead of string; (execute_command_callback): command queue contains command class instances; * main-window.h: use new octave-cmd class for queue_command, the command queue is not a pointer anymore * module.mk: new files octave-cmd.cc and octave-cmd.h
author Torsten <ttl@justmail.de>
date Thu, 19 Feb 2015 22:05:12 +0100
parents
children c5f0df2a7291
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19978
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
1 /*
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
2
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
3 Copyright (C) 2014 Torsten
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
4
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
5 This file is part of Octave.
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
6
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
9 Free Software Foundation; either version 3 of the License, or (at your
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
10 option) any later version.
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
11
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
15 for more details.
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
16
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, see
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
19 <http://www.gnu.org/licenses/>.
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
20
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
21 */
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
22
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
23 // Author: Torsten <ttl@justmail.de>
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
24
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
25 #ifdef HAVE_CONFIG_H
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
26 #include <config.h>
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
27 #endif
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
28
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
29 #include "octave-cmd.h"
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
30
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
31 #include "octave-qt-link.h"
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
32 #include "cmd-edit.h"
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
33 #include "builtin-defun-decls.h"
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
34 #include "utils.h"
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
35
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
36
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
37 void
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
38 octave_cmd::prepare_command_editor (const QString& cmd)
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
39 {
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
40 std::string pending_input = command_editor::get_current_line ();
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
41
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
42 command_editor::set_initial_input (pending_input);
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
43 command_editor::replace_line (cmd.toStdString ());
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
44 command_editor::redisplay ();
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
45 // We are executing inside the command editor event loop. Force
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
46 // the current line to be returned for processing.
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
47 }
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
48
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
49
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
50 // ---------------------------------------------------------------------
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
51 // class octave_cmd_exec: executing a command
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
52
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
53 void
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
54 octave_cmd_exec::execute ()
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
55 {
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
56 prepare_command_editor (_cmd);
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
57 command_editor::accept_line ();
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
58 }
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
59
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
60
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
61 // ---------------------------------------------------------------------
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
62 // class octave_cmd_eval: running a file
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
63
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
64 void
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
65 octave_cmd_eval::execute ()
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
66 {
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
67 QString function_name = _info.fileName ();
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
68 function_name.chop (_info.suffix ().length () + 1);
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
69 std::string file_path = _info.absoluteFilePath ().toStdString ();
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
70
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
71 prepare_command_editor ("");
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
72
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
73 if (valid_identifier (function_name.toStdString ()))
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
74 { // valid identifier: call as function with possibility to debug
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
75 std::string path = _info.absolutePath ().toStdString ();
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
76 if (octave_qt_link::file_in_path (file_path, path))
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
77 Feval (ovl (function_name.toStdString ()));
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
78 }
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
79 else
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
80 { // no valid identifier: use Fsource (), no debug possible
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
81 Fsource (ovl (file_path));
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
82 }
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
83
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
84 command_editor::accept_line ();
034bcac0b61c use of C++ API for running a file (bug #42307)
Torsten <ttl@justmail.de>
parents:
diff changeset
85 }