Andre Poenitz wrote:
> We won't know this until we look at fixing that. I'm inclined, actually, to > do something more general, namely, to try to bring InsetGraphic into the > InsetCommand hierarchy. I think this was intended all along as part of a > more general transition that was never finished.
Could you please elaborate on why having the InsetCommand hierarchy is
useful at all?

As far as I can tell the main benefit was to have a uniform means to
pass "Parameters" through the Controller layer in the Old Days. This
layer is gone now, and it feels a bit strange to pass around unrelated
pieces of data from otherwise unrelated insets in a common structure.
Wouldn't per-inset specific data with direct access from the GUI simplify
overall structure and reduce conversion costs?

Frankly, I don't know the overall structure here well enough to be sure exactly what the advantages or disadvantages to keeping the InsetCommandParams business the way it is. Mostly, I try to go on how Georg explained this to me some time ago, and the understanding I've developed since then of why he (they?) did things the way they did. In particular, Georg insisted that we are not to subclass InsetCommandParams, not unless we have a really, really good reason. There are times it seems it would be very natural to me to do so, but Georg made a strong case (I don't remember all the details) for not doing so, and if that's how he designed the code, then, well, I'm guessing there are reasons, and I'd probably find them out if I violated his orders.

I agree that there's something unhappy about the stringification, unstringification, and so on and so forth. But, as JMarc often says, we know we have to do that anyway---remember that the strings are in exactly the form they are in the .lyx file---so it's not that unreasonable to use the same infrastructure to pass things around. That said, I also agree with Abdel that we shouldn't bind ourselves to doing that if it makes things overly complex, and I don't really care that much how things are passed back and forth from the GUI. But that's really a separate issue from how ICP works. You can build an ICP without all the stringification. You just do it directly:
params.setParam("bibfiles") = whatever;
and then you can pass params itself to the inset if you like. Doing so has a downside, though, one that JMarc (again) is always pointing out, namely, that if you go via an LFUN, you get all kinds of updates, etc, for free; in particular, going via the dispatch mechanism gets you this. But then you do need a common representation of the parameters being passed, and a string is a pretty natural choice. (I don't even want to think about all the casting that would otherwise be required.) But the main point, really, is that this is a different issue. The conversion cost question is really separate from the question whether ICP is A Good Thing. By itself, getting rid of ICP wouldn't help you there.

Anyway, even if there were reasons to do a large scale re-write of this stuff, I don't see anyone doing that any time real soon. So, unless someone is going to do that, then, as things stand, I strongly suspect that there's substantial duplication of code across InsetGraphicsParams, InsetExternalParams, and InsetCommandParams. (There has to be.) Barring the massive re-write, then, the strategy I suggested seems sensible. And for the same reason, barring some large-scale change of direction, I'm reluctant to introduce InsetBibtexParams and take InsetBibtex out of the existing framework.

Hope that helps.

Richard

Reply via email to