Index: graphics.cc =================================================================== RCS file: /cvs/octave/src/graphics.cc,v retrieving revision 1.22 diff -c -r1.22 graphics.cc *** graphics.cc 28 Jun 2007 15:25:44 -0000 1.22 --- graphics.cc 7 Jul 2007 17:08:58 -0000 *************** *** 171,176 **** --- 171,226 ---- error ("invalid color specification"); } + color_property& color_property::operator = (const octave_value& val) + { + if (val.is_string ()) + { + std::string s = val.string_value (); + + if (! s.empty ()) + { + if (radio_val.validate (s)) + { + current_val = s; + current_type = radio_t; + } + else + { + color_values col (s); + if (! error_state) + { + color_val = col; + current_type = color_t; + } + else + error ("invalid color specification"); + } + } + else + error ("invalid color specification"); + } + else if (val.is_real_matrix ()) + { + Matrix m = val.matrix_value (); + + if (m.numel () == 3) + { + color_values col (m (0), m (1), m(2)); + if (! error_state) + { + color_val = col; + current_type = color_t; + } + } + else + error ("invalid color specification"); + } + else + error ("invalid color specification"); + + return *this; + } + void property_list::set (const property_name& name, const octave_value& val) *************** *** 1564,1570 **** else if (name.compare ("xudata")) xudata = val; else if (name.compare ("color")) ! color = color_property (val); else if (name.compare ("linestyle")) linestyle = val; else if (name.compare ("linewidth")) --- 1614,1620 ---- else if (name.compare ("xudata")) xudata = val; else if (name.compare ("color")) ! color = val; else if (name.compare ("linestyle")) linestyle = val; else if (name.compare ("linewidth")) Index: graphics.h =================================================================== RCS file: /cvs/octave/src/graphics.h,v retrieving revision 1.6 diff -c -r1.6 graphics.h *** graphics.h 28 Jun 2007 15:25:44 -0000 1.6 --- graphics.h 7 Jul 2007 17:08:58 -0000 *************** *** 261,266 **** --- 261,268 ---- return *this; } + color_property& operator = (const octave_value& newval); + bool is_rgb (void) const { return (current_type == color_t); } bool is_radio (void) const { return (current_type == radio_t); }