changeset 24652:ef60416c4686

directly edit scalar numeric & logical values in cell arrays (bug #52988) * variable-editor-model.cc (variable_editor::impl::cell): Don't require subeditor for scalar numeric and logical values in cell arrays. Create label in same way for all objects. * ov-cell.cc (octave_cell::edit_display): Correctly call edit_display for individual scalar numeric and logical values instead of calling edit_display recursively for all scalar objects. Return dimensions and type if element is not a scalar numeric or logical array.
author John W. Eaton <jwe@octave.org>
date Mon, 29 Jan 2018 16:22:30 -0500
parents d88323efe969
children f0de21a6a426
files libgui/src/variable-editor-model.cc libinterp/octave-value/ov-cell.cc
diffstat 2 files changed, 13 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/variable-editor-model.cc	Mon Jan 29 15:19:09 2018 -0500
+++ b/libgui/src/variable-editor-model.cc	Mon Jan 29 16:22:30 2018 -0500
@@ -91,16 +91,12 @@
           Cell cval = val.cell_value ();
 
           octave_value ov = cval(r,c);
-          dim_vector dv = ov.dims ();
-
-          m_requires_sub_editor = true;
 
-          m_data = make_label ("", ov);
+          if (! (ov.numel () == 1 && (ov.isnumeric () || ov.islogical ())))
+            m_requires_sub_editor = true;
         }
-      else
-        {
-          m_data = QString::fromStdString (val.edit_display (r, c));
-        }
+
+      m_data = QString::fromStdString (val.edit_display (r, c));
     }
 
     cell (const QString& d, const QString& s, const QString& t,
@@ -133,6 +129,7 @@
       m_rows (0), m_cols (0), m_table (), m_label (label),
       m_validity (true), m_validtext (make_label (m_name, m_value))
   {
+    m_label->setText (m_validtext);
   }
 
   impl (const impl&) = delete;
--- a/libinterp/octave-value/ov-cell.cc	Mon Jan 29 15:19:09 2018 -0500
+++ b/libinterp/octave-value/ov-cell.cc	Mon Jan 29 16:22:30 2018 -0500
@@ -106,10 +106,15 @@
 {
   octave_value val = matrix(i,j);
 
-  if (val.numel () == 1)
-    return edit_display(0,0);
+  if (val.numel () == 1 && (val.isnumeric () || val.islogical ()))
+    return val.edit_display (0, 0);
   else
-    return "type + dims";
+    {
+      std::string tname = val.type_name ();
+      dim_vector dv = val.dims ();
+      std::string dimstr = dv.str ();
+      return "[" + dimstr + " " + tname + "]";
+    }
 }
 
 template <>