Date: prev next · Thread: first prev next last
2011 Archives by date, by thread · List index


Hi Jonas,

On Sun, 2011-02-13 at 21:44 +0100, Jonas Finnemann Jensen wrote:

It would be major step to get that issue fixed... And you're going the
right way, but your patch doesn't work if the formula is written in
multiple lines...
try, writing the formula 3+3+3 \n \n \n \n +4+4 (replace \n by line
break not NEWLINE but whitespace linebreak).
Then in visual editor delete +3, go into the command editor again and
back into the visual editor and notice that it now says 3+3+4+4+4+4.
The command editor will say  { 3 + 3 + 4 + 4 }  \n \n \n \n +4+4,
because the SetText(0, formula) only replaced the first paragraph...


Ah, I guess I got a bit too excited too quickly. I should have known
better than to think it was that easy. :)


What I understand from editeng_8.cxx line 1621 (see [1]) is that the
number you pass in setText(0, formula), is the paragraph to be
replaced by the text...
The method signature is EditEngine::SetText( sal_uInt16 nPara, const
XubString& rTxt ), and it calls SelectParagraph(nPara)........
At least that's what I can decrypt from the sources... (I think I've
seen ROT13 variants that was easier to read).


Yeah, I saw nPara, and thought about it for a couple of seconds, figured
that since SmNodeToTextVisitor puts it all on one line it would be okay.
I thought that through badly :(


I have no idea how to solve this... Maybe we can
call EditEngine::UndoActionStart(USHORT nId) (see [2])
and EditEngine::UndoActionEnd(USHORT nId), before and after the called
to EditEngine::SetText(formula)...
But in that case I don't know if we can pass any value as nId, the
existing ones are defined in [3] (line 64).
The only place I can see EDITUNDO_INSERT used is to call
UndoActionStart/End and in one switch case where labels are
generated...


I had a very bad solution that seemed to work but made the unit tests
not work.
I replaced SetText with:
    SmGetActiveView()->GetEditWindow()->SelectAll();
    SmGetActiveView()->GetEditWindow()->InsertText(formula);

but it would really need to be done properly.


We can probably enable the visual editor as an non-default editing
mode (i.e. activated from toolbar) once the formatting issue is
addressed... Then when we've integrated it properly, so that users of
the command editor doesn't feel any uncomfort, we can make it
default...
But as long as it discards formatting information (font, bold, color,
alignment, etc) we probably shouldn't enable it by default... Users
hate regressions, especially if it eats all their formatting
information without asking nicely first :)


Oh yeah, forgot about the formatting. Yes, I agree. I guess I just got a
little excited.

I'm very sorry for bothering you with solutions that don't work.
Thanks for putting up with me. :)

Regards,
Luke



Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.