changeset 20161:028b2302f940

inputdlg: allow input prompts of varied size, return answer as column vector (Bug 44552) * libinterp/corefcn/octave-link.cc: (__octave_link_input_dialog__): return result as column vector * scripts/gui/inputdlg.m: use prompt num elements to size rowscols value, verify inputline spec size matches prompt elements size
author John Donoghue <john.donoghue@ieee.org>
date Tue, 17 Mar 2015 21:54:53 -0400
parents 8c20fb6caa16
children ed51e17f6ccf
files libinterp/corefcn/octave-link.cc scripts/gui/inputdlg.m
diffstat 2 files changed, 7 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/octave-link.cc
+++ b/libinterp/corefcn/octave-link.cc
@@ -400,7 +400,7 @@
                                          defaults_lst);
 
           nel = items_lst.size ();
-          Cell items (dim_vector (1, nel));
+          Cell items (dim_vector (nel, 1));
           octave_idx_type i = 0;
           for (std::list<std::string>::iterator it = items_lst.begin ();
                it != items_lst.end (); it++)
--- a/scripts/gui/inputdlg.m
+++ b/scripts/gui/inputdlg.m
@@ -100,16 +100,20 @@
   ## r3  3   30   third  text field is 3x30
   if (isscalar (linespec))
     ## only scalar value in lineTo, copy from linespec and add defaults
-    rowscols = zeros (columns (prompt), 2);
+    rowscols = zeros (numel (prompt), 2);
     ## cols
     rowscols(:,2) = 25;
     rowscols(:,1) = linespec;
   elseif (isvector (linespec))
+    if (numel (linespec) == numel (prompt))
       ## only one column in lineTo, copy from vector linespec and add defaults
-      rowscols = zeros (columns (prompt), 2);
+      rowscols = zeros (numel (prompt), 2);
       ## rows from colum vector linespec, columns are set to default
       rowscols(:,2) = 25;
       rowscols(:,1) = linespec(:);
+    else
+      error ("inputdlg: ROWSCOLS vector does not match size of PROMPT");
+    endif
   elseif (ismatrix (linespec))
     if (rows (linespec) == columns (prompt) && columns (linespec) == 2)
       ## (rows x columns) match, copy array linespec