comparison libinterp/interpfcn/graphics.cc @ 15760:1ac3c906990a

graphics.cc (graphics_object::set (const octave_map& m)): set structure property/value in the order in which they were originally stored. Add test.
author Pantxo Diribarne <pantxo.diribarne@gmail.com>
date Sun, 09 Dec 2012 13:01:53 -0500
parents d803cd07f31a
children 2338a92e9782
comparison
equal deleted inserted replaced
15759:b0ad083e1958 15760:1ac3c906990a
2043 2043
2044 // Set properties given in a struct array 2044 // Set properties given in a struct array
2045 void 2045 void
2046 graphics_object::set (const octave_map& m) 2046 graphics_object::set (const octave_map& m)
2047 { 2047 {
2048 for (octave_map::const_iterator p = m.begin (); 2048 for (octave_idx_type p = 0; p < m.nfields (); p++)
2049 p != m.end (); p++) 2049 {
2050 { 2050 caseless_str name = m.keys ()[p];
2051 caseless_str name = m.key (p); 2051
2052 2052 octave_value val = octave_value (m.contents (name).elem (m.numel () - 1));
2053 octave_value val = octave_value (m.contents (p).elem (m.numel () - 1)); 2053
2054
2055 set_value_or_default (name, val); 2054 set_value_or_default (name, val);
2056 2055
2057 if (error_state) 2056 if (error_state)
2058 break; 2057 break;
2059 } 2058 }
2068 %! assert (get (h, "linewidth"), 10); 2067 %! assert (get (h, "linewidth"), 10);
2069 %! assert (get (h, "marker"), "x"); 2068 %! assert (get (h, "marker"), "x");
2070 %! h = plot (1:10, 10:-1:1, 1:10, 1:10); 2069 %! h = plot (1:10, 10:-1:1, 1:10, 1:10);
2071 %! set (h, struct ("linewidth", {5, 10})); 2070 %! set (h, struct ("linewidth", {5, 10}));
2072 %! assert (get (h, "linewidth"), {10; 10}); 2071 %! assert (get (h, "linewidth"), {10; 10});
2072 ## test ordering
2073 %!test
2074 %! markchanged = @(h, foobar, name) set (h, "userdata", [get(h,"userdata"); {name}]);
2075 %! figure (1, "visible", "off")
2076 %! clf ()
2077 %! h = line ();
2078 %! set (h, "userdata", {})
2079 %! addlistener (h, "color", {markchanged, "color"})
2080 %! addlistener (h, "linewidth", {markchanged, "linewidth"})
2081 %! # "linewidth" first
2082 %! props.linewidth = 2;
2083 %! props.color = "r";
2084 %! set (h, props);
2085 %! assert (get (h, "userdata"), fieldnames (props))
2086 %! clear props
2087 %! clf ()
2088 %! h = line ();
2089 %! set (h, "userdata", {})
2090 %! addlistener (h, "color", {markchanged, "color"})
2091 %! addlistener (h, "linewidth", {markchanged, "linewidth"})
2092 %! # "color" first
2093 %! props.color = "r";
2094 %! props.linewidth = 2;
2095 %! set (h, props);
2096 %! assert (get (h, "userdata"), fieldnames (props))
2097 %! close (1)
2073 */ 2098 */
2074 2099
2075 // Set a property to a value or to its (factory) default value. 2100 // Set a property to a value or to its (factory) default value.
2076 2101
2077 void 2102 void