# HG changeset patch # User John W. Eaton # Date 1516942797 18000 # Node ID 7d177be54c3749568b0da5eeb0f18eac0e098028 # Parent 534436fd56079a4f9ad968a0ce50d3b25dcc60c5 pass variable value to variable editor in addition to variable name * main-window.h, main-window.cc (main_window::edit_variable): Also pass value. Change all uses. * octave-qt-link.h, octave-qt-link.cc (octave_qt_link::octave_qt_link): Call qRegisterMetaType for octave_value. (octave_qt_link::do_edit_variable): Rename from octave_qt_link::do_openvar. Change all uses. (edit_variable_signal): Rename from open_variable_signal. * variable-editor-model.h, variable-editor-model.cc (variable_editor_model::variable_editor_model): Also pass value. Change all uses. * variable-editor.h, variable-editor.cc (variable_editor::edit_variable): Also pass value. Change all uses. Align label at top of vbox layout. * octave-link.h, octave-link.cc (Fopenvar): Use DEFMETHOD. Get value from current scope and pass to octave_link::edit_variable. (octave_link::edit_variable): Rename from octave_link::openvar. Change all uses. (octave_link::do_edit_variable): Rename from octave_link::do_openvar. Change all uses. diff -r 534436fd5607 -r 7d177be54c37 libgui/src/main-window.cc --- a/libgui/src/main-window.cc Tue Jan 23 14:36:00 2018 -0500 +++ b/libgui/src/main-window.cc Thu Jan 25 23:59:57 2018 -0500 @@ -1736,9 +1736,9 @@ } void -main_window::edit_variable (const QString &expr) +main_window::edit_variable (const QString &expr, const octave_value& val) { - m_variable_editor_window->edit_variable (expr); + m_variable_editor_window->edit_variable (expr, val); if (! m_variable_editor_window->isVisible ()) { @@ -1804,8 +1804,11 @@ connect (m_workspace_model, SIGNAL (model_changed (void)), m_workspace_window, SLOT (handle_model_changed (void))); - connect (m_octave_qt_link, SIGNAL (open_variable_signal (const QString&)), - this, SLOT (edit_variable (const QString&))); + connect (m_octave_qt_link, + SIGNAL (edit_variable_signal (const QString&, + const octave_value&)), + this, + SLOT (edit_variable (const QString&, const octave_value&))); connect (m_octave_qt_link, SIGNAL (refresh_variable_editor_signal (void)), this, SLOT (refresh_variable_editor (void))); diff -r 534436fd5607 -r 7d177be54c37 libgui/src/main-window.h --- a/libgui/src/main-window.h Tue Jan 23 14:36:00 2018 -0500 +++ b/libgui/src/main-window.h Thu Jan 25 23:59:57 2018 -0500 @@ -64,6 +64,8 @@ class settings_dialog; +class octave_value; + //! QObject to manage the Octave interpreter. class octave_interpreter : public QObject @@ -282,7 +284,7 @@ //! Opens the variable editor for @p name. - void edit_variable (const QString &name); + void edit_variable (const QString &name, const octave_value&); void refresh_variable_editor (void); diff -r 534436fd5607 -r 7d177be54c37 libgui/src/octave-qt-link.cc --- a/libgui/src/octave-qt-link.cc Tue Jan 23 14:36:00 2018 -0500 +++ b/libgui/src/octave-qt-link.cc Thu Jan 25 23:59:57 2018 -0500 @@ -26,10 +26,11 @@ # include "config.h" #endif -#include #include #include +#include #include +#include #include "oct-env.h" #include "str-vec.h" @@ -39,6 +40,7 @@ #include "error.h" #include "interpreter-private.h" #include "load-path.h" +#include "ov.h" #include "utils.h" #include "octave-gui.h" @@ -49,7 +51,9 @@ octave_qt_link::octave_qt_link (QWidget *, octave::gui_application *app_context) : octave_link (), m_app_context (app_context) -{ } +{ + qRegisterMetaType ("octave_value"); +} bool octave_qt_link::do_confirm_shutdown (void) @@ -616,9 +620,9 @@ } void -octave_qt_link::do_openvar (const std::string &expr) +octave_qt_link::do_edit_variable (const std::string& expr, const octave_value& val) { - emit open_variable_signal (QString::fromStdString (expr)); + emit edit_variable_signal (QString::fromStdString (expr), val); } void diff -r 534436fd5607 -r 7d177be54c37 libgui/src/octave-qt-link.h --- a/libgui/src/octave-qt-link.h Tue Jan 23 14:36:00 2018 -0500 +++ b/libgui/src/octave-qt-link.h Thu Jan 25 23:59:57 2018 -0500 @@ -40,6 +40,8 @@ // Defined for purposes of sending QList as part of signal. typedef QList QIntList; +class octave_value; + //! Provides threadsafe access to octave. //! @author Jacob Dawid //! @@ -138,7 +140,7 @@ void do_show_doc (const std::string& file); - void do_openvar (const std::string &name); + void do_edit_variable (const std::string& name, const octave_value& val); void shutdown_confirmation (bool sd) { m_shutdown_confirm_result = sd; } @@ -197,7 +199,7 @@ void show_doc_signal (const QString& file); - void open_variable_signal (const QString &name); + void edit_variable_signal (const QString& name, const octave_value& val); void refresh_variable_editor_signal (void); diff -r 534436fd5607 -r 7d177be54c37 libgui/src/variable-editor-model.cc --- a/libgui/src/variable-editor-model.cc Tue Jan 23 14:36:00 2018 -0500 +++ b/libgui/src/variable-editor-model.cc Thu Jan 25 23:59:57 2018 -0500 @@ -214,6 +214,7 @@ }; variable_editor_model::variable_editor_model (const QString& expr, + const octave_value&, QLabel *label, QObject *parent) : QAbstractTableModel (parent), m_parent (parent), m_d (new impl (expr, label)) diff -r 534436fd5607 -r 7d177be54c37 libgui/src/variable-editor-model.h --- a/libgui/src/variable-editor-model.h Tue Jan 23 14:36:00 2018 -0500 +++ b/libgui/src/variable-editor-model.h Thu Jan 25 23:59:57 2018 -0500 @@ -46,8 +46,8 @@ public: - variable_editor_model (const QString &expr, QLabel *label, - QObject *p = nullptr); + variable_editor_model (const QString &expr, const octave_value& val, + QLabel *label, QObject *p = nullptr); ~variable_editor_model (void); diff -r 534436fd5607 -r 7d177be54c37 libgui/src/variable-editor.cc --- a/libgui/src/variable-editor.cc Tue Jan 23 14:36:00 2018 -0500 +++ b/libgui/src/variable-editor.cc Thu Jan 25 23:59:57 2018 -0500 @@ -109,8 +109,10 @@ m_tab_widget->setTabsClosable (true); m_tab_widget->setMovable (true); + connect (m_tab_widget, SIGNAL (tabCloseRequested (int)), this, SLOT (closeTab (int))); + m_main->setCentralWidget (m_tab_widget); // Main. @@ -130,7 +132,7 @@ } void -variable_editor::edit_variable (const QString& name) +variable_editor::edit_variable (const QString& name, const octave_value& val) { if (m_stylesheet.isEmpty ()) { @@ -160,11 +162,11 @@ QLabel *label = new QLabel (page); label->setTextFormat (Qt::PlainText); label->setText (name); - vbox->addWidget (label); + vbox->addWidget (label, 0, Qt::AlignTop); QTableView *table = new QTableView (page); variable_editor_model *model = - new variable_editor_model (name, label, table); + new variable_editor_model (name, val, label, table); table->setModel (model); table->setWordWrap (false); @@ -778,7 +780,7 @@ = qobject_cast (table->model ()); if (model->requires_sub_editor (idx)) - edit_variable (name + model->subscript_expression (idx)); + edit_variable (name + model->subscript_expression (idx), octave_value ()); } void @@ -1012,7 +1014,7 @@ if (name.endsWith (')') || name.endsWith ('}')) { name.remove (QRegExp ("(\\(|\\{)[^({]*(\\)|\\})$")); - edit_variable (name); + edit_variable (name, octave_value ()); // FIXME: What was the intent here? // emit command_requested (QString ("openvar ('%1');").arg (name)); diff -r 534436fd5607 -r 7d177be54c37 libgui/src/variable-editor.h --- a/libgui/src/variable-editor.h Tue Jan 23 14:36:00 2018 -0500 +++ b/libgui/src/variable-editor.h Thu Jan 25 23:59:57 2018 -0500 @@ -30,6 +30,8 @@ #include "octave-dock-widget.h" +class octave_value; + class QTabWidget; class QToolBar; class QMainWindow; @@ -52,7 +54,7 @@ variable_editor& operator = (const variable_editor&) = delete; - void edit_variable (const QString& name); + void edit_variable (const QString& name, const octave_value& val); // Clear all the models' data cache. void clear_data_cache (void); diff -r 534436fd5607 -r 7d177be54c37 libinterp/corefcn/octave-link.cc --- a/libinterp/corefcn/octave-link.cc Tue Jan 23 14:36:00 2018 -0500 +++ b/libinterp/corefcn/octave-link.cc Thu Jan 25 23:59:57 2018 -0500 @@ -36,6 +36,7 @@ #include "oct-mutex.h" #include "ovl.h" #include "pager.h" +#include "symscope.h" static int octave_readline_hook (void) @@ -384,8 +385,8 @@ return ovl (octave_link::show_preferences ()); } -DEFUN (openvar, args, , - doc: /* -*- texinfo -*- +DEFMETHOD (openvar, interp, args, , + doc: /* -*- texinfo -*- @deftypefn {} {} openvar (@var{name}) Open the variable @var{name} in the graphical Variable Editor. @end deftypefn */) @@ -401,7 +402,16 @@ if (! (Fisguirunning ())(0).is_true ()) warning ("openvar: GUI is not running, can't start Variable Editor"); else - octave_link::openvar (name); + { + octave::symbol_scope scope = interp.require_current_scope ("openvar"); + + octave_value val = scope.varval (name); + + if (val.is_undefined ()) + error ("openvar: '%s' is not a variable", name.c_str ()); + + octave_link::edit_variable (name, val); + } return ovl (); } diff -r 534436fd5607 -r 7d177be54c37 libinterp/corefcn/octave-link.h --- a/libinterp/corefcn/octave-link.h Tue Jan 23 14:36:00 2018 -0500 +++ b/libinterp/corefcn/octave-link.h Thu Jan 25 23:59:57 2018 -0500 @@ -34,6 +34,7 @@ #include "event-queue.h" +class octave_value; class string_vector; class workspace_element; @@ -418,11 +419,11 @@ } static bool - openvar (const std::string &name) + edit_variable (const std::string &name, const octave_value& val) { if (enabled ()) { - instance->do_openvar (name); + instance->do_edit_variable (name, val); return true; } else @@ -578,7 +579,8 @@ virtual void do_show_doc (const std::string& file) = 0; - virtual void do_openvar (const std::string& name) = 0; + virtual void + do_edit_variable (const std::string& name, const octave_value& val) = 0; }; #endif