Mercurial > hg > octave-nkf
changeset 18117:ca84d3c9dc24
set: allow retrieving allowed values for individual properties
* libinterp/corefcn/graphics.in.h: add "std::string value_as_string (std::string)" method to (base)graphics_object classes
* libinterp/corefcn/graphics.cc: implement base_graphics_object::value_as_string method.
* libinterp/corefcn/graphics.cc: set: when 2 arguments are provided, if the second is a property name, either return a cell array containing allowed values or print them.
author | Pantxo Diribarne <pantxo.diribarne@gmail.com> |
---|---|
date | Sat, 07 Dec 2013 15:56:43 +0100 |
parents | 95466a42bcba |
children | ec9b35e60f95 |
files | libinterp/corefcn/graphics.cc libinterp/corefcn/graphics.in.h |
diffstat | 2 files changed, 58 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/graphics.cc +++ b/libinterp/corefcn/graphics.cc @@ -2985,6 +2985,34 @@ return retval; } +std::string +base_graphics_object::value_as_string (std::string prop) +{ + std::string retval; + + if (valid_object ()) + { + if (prop != "children") + { + property p = get_properties ().get_property (prop); + + if (p.ok () && ! p.is_hidden ()) + { + if (p.is_radio ()) + { + retval += p.values_as_string (); + } + } + } + if (retval != "") + retval += "\n"; + } + else + error ("base_graphics_object::value_as_string: invalid graphics object"); + + return retval; +} + octave_scalar_map base_graphics_object::values_as_struct (void) { @@ -8721,6 +8749,29 @@ { obj.set (args(1).map_value ()); } + else if (nargin == 2 && args(1).is_string ()) + { + std::string property = args(1).string_value (); + + octave_map pmap = obj.values_as_struct (); + + if (pmap.isfield (property)) + { + if (nargout != 0) + retval = pmap.getfield (property)(0); + else + { + std::string s = obj.value_as_string (property); + if (! error_state) + octave_stdout << s; + } + } + else + { + error ("set: unknown property"); + break; + } + } else if (nargin == 1) { if (nargout != 0)
--- a/libinterp/corefcn/graphics.in.h +++ b/libinterp/corefcn/graphics.in.h @@ -2706,6 +2706,8 @@ virtual std::string values_as_string (void); + virtual std::string value_as_string (std::string prop); + virtual octave_scalar_map values_as_struct (void); virtual graphics_handle get_parent (void) const @@ -2977,6 +2979,11 @@ std::string values_as_string (void) { return rep->values_as_string (); } + std::string value_as_string (std::string prop) + { + return rep->value_as_string (prop); + } + octave_map values_as_struct (void) { return rep->values_as_struct (); } graphics_handle get_parent (void) const { return rep->get_parent (); }