# HG changeset patch # User John W. Eaton # Date 1517260950 18000 # Node ID ef60416c4686bba785ee2121d4d0e9050b1ae578 # Parent d88323efe969184445c34ea709d8785fe788e097 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. diff -r d88323efe969 -r ef60416c4686 libgui/src/variable-editor-model.cc --- 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; diff -r d88323efe969 -r ef60416c4686 libinterp/octave-value/ov-cell.cc --- 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 <>