Mercurial > hg > octave-nkf
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 |
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 } |