Finn Bock wrote: > > The solution that I am leaning toward is to have > > you subclass AddLMVisitor instead. If we then give you a set accessor in > > LayoutManagerLS to set the subclass, and we use what is stored > there, do you > > have a place in your code where you can conveniently use that > accessor to > > set a subclass instead of AddLMVisitor? > > I think that would work for me just as well assuming the accessor is > somehow available from the Driver instance.
Right now, the Layout Strategy gets set at line 584 in Driver. I will instantiate it with a null value for the Visitor object that it will use, then create a regular one before using it if I find the null value. So you just need to set the value to the subclassed object between those two points in time. > The acceptVisitor method in my TextField extension would then look like > this: > > public void acceptVisitor(FOTreeVisitor fotv) { > ((MyLMVisitor) fotv).serveVisitor(this); > } > > and I must add a serveVisitor method to MyLMVisitor > > public void serveVisitor(TextField node) { > ... > } > > That is quite elegant (except for the cast in acceptVisitor). I would like to get rid of the cast as well, as my goal is to maintain the FOTree as an independent module (especially that it doesn't need any information about layout). Assuming that "this" is a (direct or indirect) subclass of FONode, I think the cast should be unnecessary, but I'll test it on this end to make sure first. After looking at the code for a bit, I need to stop and tie some of the pieces of the LM Tree together a bit better. Right now I am creating an AddLMVisitor for each iterator, which is not what I want. It will take me a while to get that pushed up to LayoutManagerLS and to tie the LM Tree to that. I'll post back after I get it done, hopefully before the weekend is out. > I'm not sure how a AddLMVisitor subclass would work if two different > extensions are used in the same document, but that is not an issue in my > use. AFAIK, it should just be a matter of setting up a method in the subclass for each of the extensions. But maybe I am misunderstanding your question. Victor Mote