Mercurial > hg > octave-avbm
changeset 10717:9d4a198614ab
Add functionality set(handle)
author | David Bateman <dbateman@free.fr> |
---|---|
date | Mon, 21 Jun 2010 23:46:51 +0200 |
parents | f7f26094021b |
children | b8d76f4be94a |
files | src/ChangeLog src/graphics.cc src/graphics.h.in |
diffstat | 3 files changed, 188 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,32 @@ +2010-06-21 David Bateman <dbateman@free.fr> + + * graphics.cc (std::string radio_values:values_as_string (void) + const, Cell radio_values:values_as_cell (void) const): New functions. + (void graphics_object::set (const octave_value_list&)): Throw error + with no arguments. + (std::string base_graphics_object::values_as_string (void), + Octave_map base_graphics_object::values_as_struct (void)): New + functions. + (Fset): Allow single handle as an argument and return the radio + values. + * graphics.h.in (virtual bool base_property::is_radio (void) const, + virtual std::string base_property::values_as_string (void) const, + virtual Cell base_property::values_as_cell (void) const): + New function. + (std::string radio_values::values_as_string (void) const, + Cell radio_values::values_as_cell (void) const): Declaration. + (octave_idx_type radio_values::nelem (void) const): New function. + (std::string radio_property::values_as_string (void) const, + Cell radio_property::values_as_cell (void) const, + bool radio_property::is_radio (void) const): New functions. + (bool property::is_radio (void) const, + std::string raproperty::values_as_string (void) const, + Cell property::values_as_cell (void) const): New functions. + (std::string base_graphics_object::values_as_string (void), + Octave_map base_graphics_object::values_as_struct (void)): Declaration. + (std::string graphics_object::values_as_string (void), + Octave_map graphics_object::values_as_struct (void)): New functions. + 2010-06-21 Jaroslav Hajek <highegg@gmail.com> * data.cc (single_type_concat): Assume matrix arguments start from
--- a/src/graphics.cc +++ b/src/graphics.cc @@ -818,6 +818,44 @@ } } +std::string +radio_values::values_as_string (void) const +{ + std::string retval; + for (std::set<caseless_str>::const_iterator it = possible_vals.begin (); + it != possible_vals.end (); it++) + { + if (retval == "") + { + if (*it == default_value ()) + retval = "{" + *it + "}"; + else + retval = *it; + } + else + { + if (*it == default_value ()) + retval += " | {" + *it + "}"; + else + retval += " | " + *it; + } + } + if (retval != "") + retval = "[ " + retval + " ]"; + return retval; +} + +Cell +radio_values::values_as_cell (void) const +{ + octave_idx_type i = 0; + Cell retval (nelem (), 1); + for (std::set<caseless_str>::const_iterator it = possible_vals.begin (); + it != possible_vals.end (); it++) + retval(i++) = std::string (*it); + return retval; +} + bool color_values::str2rgb (std::string str) { @@ -1517,7 +1555,7 @@ int nargin = args.length (); if (nargin == 0) - rep->defaults (); + error ("graphics_object::set: Nothing to set"); else if (nargin % 2 == 0) { for (int i = 0; i < nargin; i += 2) @@ -2416,6 +2454,70 @@ } } +std::string +base_graphics_object::values_as_string (void) +{ + std::string retval; + + if (valid_object ()) + { + Octave_map m = get ().map_value (); + + for (Octave_map::const_iterator pa = m.begin (); pa != m.end (); pa++) + { + if (pa->first != "children") + { + property p = get_properties ().get_property (pa->first); + + if (p.ok () && ! p.is_hidden ()) + { + retval += "\n\t" + std::string (pa->first) + ": "; + if (p.is_radio ()) + retval += p.values_as_string (); + } + } + } + if (retval != "") + retval += "\n"; + } + else + error ("base_graphics_object::values_as_string: invalid graphics object"); + + return retval; +} + +Octave_map +base_graphics_object::values_as_struct (void) +{ + Octave_map retval; + + if (valid_object ()) + { + Octave_map m = get ().map_value (); + + for (Octave_map::const_iterator pa = m.begin (); pa != m.end (); pa++) + { + if (pa->first != "children") + { + property p = get_properties ().get_property (pa->first); + + if (p.ok () && ! p.is_hidden ()) + { + if (p.is_radio ()) + retval.assign (p.get_name (), + octave_value (p.values_as_cell ())); + else + retval.assign (p.get_name (), octave_value (Cell ())); + } + } + } + } + else + error ("base_graphics_object::values_as_struct: invalid graphics object"); + + return retval; +} + // --------------------------------------------------------------------- #include "graphics-props.cc" @@ -4930,7 +5032,7 @@ return retval; } -DEFUN (set, args, , +DEFUN (set, args, nargout, "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} set (@var{h}, @var{property}, @var{value}, @dots{})\n\ @deftypefnx {Built-in Function} {} set (@var{h}, @var{properties}, @var{values})\n\ @@ -5010,6 +5112,17 @@ { obj.set (args(1).map_value ()); } + else if (nargin == 1) + { + if (nargout != 0) + retval = obj.values_as_struct (); + else + { + std::string s = obj.values_as_string (); + if (! error_state) + octave_stdout << s; + } + } else { obj.set (args.splice (0, 1));
--- a/src/graphics.h.in +++ b/src/graphics.h.in @@ -381,6 +381,8 @@ void set_hidden (bool flag) { hidden = flag; } + virtual bool is_radio (void) const { return false; } + int get_id (void) const { return id; } void set_id (int d) { id = d; } @@ -395,6 +397,19 @@ return octave_value (); } + + virtual std::string values_as_string (void) const + { + error ("values_as_string: invalid property \"%s\"", name.c_str ()); + return std::string (); + } + + virtual Cell values_as_cell (void) const + { + error ("values_as_cell: invalid property \"%s\"", name.c_str ()); + return Cell (); + } + base_property& operator = (const octave_value& val) { set (val); @@ -722,6 +737,12 @@ return (possible_vals.find (val) != possible_vals.end ()); } + std::string values_as_string (void) const; + + Cell values_as_cell (void) const; + + octave_idx_type nelem (void) const { return possible_vals.size (); } + private: // Might also want to cache std::string default_val; @@ -753,9 +774,15 @@ const std::string& current_value (void) const { return current_val; } + std::string values_as_string (void) const { return vals.values_as_string (); } + + Cell values_as_cell (void) const { return vals.values_as_cell (); } + bool is (const caseless_str& v) const { return v.compare (current_val); } + bool is_radio (void) const { return true; } + radio_property& operator = (const octave_value& val) { set (val); @@ -1469,6 +1496,9 @@ void set_hidden (bool flag) { rep->set_hidden (flag); } + bool is_radio (void) const + { return rep->is_radio (); } + int get_id (void) const { return rep->get_id (); } @@ -1481,6 +1511,12 @@ bool set (const octave_value& val) { return rep->set (val); } + std::string values_as_string (void) const + { return rep->values_as_string (); } + + Cell values_as_cell (void) const + { return rep->values_as_cell (); } + property& operator = (const octave_value& val) { *rep = val; @@ -2068,6 +2104,10 @@ return octave_value (); } + virtual std::string values_as_string (void); + + virtual Octave_map values_as_struct (void); + virtual graphics_handle get_parent (void) const { if (valid_object ()) @@ -2285,6 +2325,10 @@ return rep->get_factory_defaults (); } + std::string values_as_string (void) { return rep->values_as_string (); } + + Octave_map values_as_struct (void) { return rep->values_as_struct (); } + graphics_handle get_parent (void) const { return rep->get_parent (); } graphics_handle get_handle (void) const { return rep->get_handle (); }