Hi Martin,

> I got the idea for doing this is a sane way after tracing through the
> code that caused list elements to flash. There was code in
> fv_View::_generalUpdate to update every field in the document by
> scanning every run in the document after every keypress. There were
> some good ideas in this code, especially the "isLayoutDependent()"
> method on field runs. I changed the name of this to
> "needsFrequentUpdates()" and put another bool in fl_BlockLayout
> "hasUpdatableField()". This is (un)set during a format if there is a
> field run with "needsFrequentUpdates()" true. Then during the
> background redraw (which happens every 0.5 seconds) blocks with
> "HasUpdatableField()" set have a recalculateFields() done on them. If
> the field width changes on the recalculation, the block is reformated.
> Anyway it all works rather nicely and scales reasonablly well.
Sounds very nice; I wish thought of it myself :-). 

> Fields like "Current Time" and "Word Count" have
> "needsFrequentUpdates()" set true. Fields like "date", "page number"
> and "liast label" do not.
Except the "page number" field is layout dependent and should 
update if as a result of layout changes it moves onto a different 
page. The reason I added the layout rescanning code was that 
fields such as "page reference" would not reliably update. I think 
what we still need is "updateFields" method in 
ap_EditMethods.cpp, that the user could call to update all fields in 
the document, and would be automatically called (or better, based 
on preference settings) before printing.

Tomas

Reply via email to