How do I access the new value of an PropertyEvent in MATLAB R2014b?

652 Views Asked by At

Background

In previous versions of MATLAB (e.g. R2013b), I had a neat trick where I would attach a listener to an axes handle's YLim property, which would notify me when the axes y-limits were changed:

addlistener(gca, 'YLim', 'PreSet', @(src,ev_data) disp(ev_data.NewValue))

I was using this to update a second figure which would show some summary statistics of the subset of data visible in these axes. And that was awesome! You zoom in, and the second figure updates itself. Great.

Making it a PreSet (rather than PostSet) listener was useful because then I could check if the new value was the same as the old value, and thus avoid recomputing these statistics when unnecessary.

The problem

However, this no longer works for me in R2014b. I'm able to attach the event listener, but when I trigger the event, I get this error message:

No appropriate method, property, or field NewValue for class event.PropertyEvent.

I believe this has something to do with the HG2 graphics system. With an appropriate breakpoint, we can look at the event data. In R2013b:

K>> ev_data
ev_data =
    handle.PropertySetEventData

K>> get(ev_data)
              Type: 'PropertyPreSet'
            Source: [1x1 schema.prop]
    AffectedObject: [1x1 axes]
          NewValue: [0.5000 220.5000]

In R2014b, we seem to be missing the NewValue field:

K>> ev_data
ev_data = 
  PropertyEvent with properties:

    AffectedObject: [1x1 Axes]
            Source: [1x1 matlab.graphics.internal.GraphicsMetaProperty]
         EventName: 'PreSet'

Where did it go?! Surely there must be a way to access it. A property pre-set event handler is kinda useless if you can't access the new value you're trying to set it to.

1

There are 1 best solutions below

0
On

The property meta.property object contains function handles to the property's set and get methods. SetMethod property contains a function handle to the property's set method and the GetMethod property contains a function handle to the property's get method. Hopefully, this link will help you aloot