Remove Header::BaselineOffset and move arrows as needed instead The baseline offset was used to keep 5px of distance between the tip of the arrow and the scroll area. This way, the shadow that is drawn around the arrow when it's selected won't get cropped. However, we can do this differently: instead of always keeping the empty space around, we make the arrows align at the edge of the widget space as they should and when they're selected, we push them aside to the left so the shadow can still be painted without cropping. Logically, one would assume that the arrow's label also should be moving left but I decided against it because this way it looks as if the arrow didn't actually move, keeping all arrow labels lined up.
Rework signaling mechanism for trace repainting Before, analog traces would request a repaint of the entire view when they receive data. To understand how bad this was, consider 4 enabled analog channels during capture. Every time one channel would receive a bunch of sample data, it would force a repaint of the view, resulting in 4 unnecessary repaints. To fix this, the analog traces no longer request a repaint on incoming sample data. Instead, the mechanism now is such that the view "collates" repaint requests from all used signalbases by means of a one-shot timer, i.e. any repaint request is ignored if the timer is already running. With the timer, we can also establish an upper bound on how often the trace should update at most, currently 25Hz. Since this functionality is very useful for any kind of view, the existing one-shot timer was moved to the ViewBase and then extended as explained.
Trace: Make popup forms compatible with OSX Qt behaves differently on OSX regarding widget lifetime it seems, causing the addition of a stacked decoder to crash PV. According to Elias, the object popup_form_ gets destroyed, yet it still has the parent popup_ which in turn will destroy it again at the end of its life. Either removing the parent, or the preliminary destruction, fixes the crash.