Joseph
            So your approach is to fine out were you are within a block of 
text, i could also do this, see example




in my case is "build" the text from single sentences, each sentence has an 
associated sound clip, i play this clips by added and event handle to each 
sentence




then i reconstruct the passage from the sentence, this is an good example 
http://www.java2s.com/Code/Flex/Components/Addparagraphtoflowelements.htm








I have 2 challenges, why can i not add more that 1 span to a paragraph




 or why can i not build a textFlow as a process




                                for each (var sentence:XML in data.sentence)
                                {
                                        addSentence(sentence);
                                        progress.push(false);
                                }




should add to the over all text




i.e.  you can not do    ta.textFlow = ta.textFlow +  textFlow;




this is example, of my code




                protected function buildParagraphView(event:FlexEvent):void
                        {
                                //reset array
                                progress.length = 0;
                                for each (var sentence:XML in data.sentence)
                                {
                                        addSentence(sentence);
                                        progress.push(false);
                                }

                        }








                        private function addSentence(model:XML):void
                        {

                                paraCount++;
                                var linkWrapper:LinkElement = new LinkElement();
                                
linkWrapper.addEventListener(FlowElementMouseEvent.MOUSE_UP, 
clickActionHandle(model.clip));

                                span1.id = "span1";
                                paragraph1.id = "paragraph" + paraCount;  // 
create a unique name
                                span1.text = model.text;

                                linkWrapper.addChild(span1)
                                paragraph1.addChild(linkWrapper);
                                textFlow.addChild(paragraph1);

                                ta.textFlow =  textFlow;


                        }












my problem not is how do i dynamical add more Textflows to the screen








example of mouse over text if this helps anyone




<?xml version="1.0"?>
<!-- sparktextcontrols/SparkSelectionExample.mxml -->
<s:Application
        xmlns:fx="http://ns.adobe.com/mxml/2009";
        xmlns:mx="library://ns.adobe.com/flex/mx"
        xmlns:s="library://ns.adobe.com/flex/spark">

        <s:layout>
                <s:VerticalLayout/>
        </s:layout>

        <fx:Script>
                <![CDATA[
                        import flashx.textLayout.elements.TextRange;
                        import flashx.textLayout.elements.*;

                        private function selectSomeText(e:Event):void {
                                /* Get the location of the cursor. This is the 
character position of the
                                cursor in the RichEditableText control after 
the user clicks on it. */
                                var activePos:int = 
richTxt1.selectionActivePosition;

                                /* Get the first SpanElement in the TextFlow. */
                                var leaf:SpanElement = new SpanElement();
                                leaf = 
SpanElement(richTxt1.textFlow.getFirstLeaf());

                                /* Get the start and end index values for the 
first SpanElement. */
                                var spanStart:int = 
leaf.getParagraph().parentRelativeStart;
                                var spanEnd:int = 
leaf.getParagraph().parentRelativeEnd;

                                /* For the first SpanElement, if the cursor 
position falls within the
                                SpanElement's character range, then select the 
entire SpanElement. */
                                if (activePos >= spanStart && activePos <= 
spanEnd) {
                                        selectSpan(spanStart, spanEnd);
                                        return;
                                }

                                /* Perform the same operations for each leaf in 
the TextFlow. */
                                while(leaf = SpanElement(leaf.getNextLeaf())) {
                                        spanStart = 
leaf.getParagraph().parentRelativeStart;
                                        spanEnd = 
leaf.getParagraph().parentRelativeEnd;
                                        if (activePos >= spanStart && activePos 
<= spanEnd) {
                                                selectSpan(spanStart, spanEnd);
                                                return;
                                        }
                                }
                        }

                        private function selectSpan(i1:int, i2:int):void {
                                richTxt1.selectRange(i1, i2);
                        }

                ]]>
        </fx:Script>

        <s:Panel width="480" title="this is some text">
                <s:RichEditableText id="richTxt1" height="27" 
click="selectSomeText(event)" editable="true"
                                                        percentWidth="100" 
selectable="true" text="line one" textAlign="justify">
<!--                    <s:textFlow>
                                <s:TextFlow>
                                        <s:p><s:span>1) Lorem ipsum dolor sit 
amet, consectetur adipiscing elit.</s:span></s:p>
                                        <s:p><s:span>2) Cras posuere posuere 
sem, eu congue orci mattis quis.</s:span></s:p>
                                        <s:p><s:span>3) Curabitur pulvinar 
tellus venenatis ipsum tempus lobortis.</s:span></s:p>
                                </s:TextFlow>
                        </s:textFlow>-->
                </s:RichEditableText>
        </s:Panel>

</s:Application>
















________________________________________
From: Joseph Balderson [[email protected]]
Sent: Friday, April 04, 2014 4:01 PM
To: [email protected]
Subject: Re: <BR> in TextArea




Actually, if you create a BreakElement at the right place, it isn't substituted
for a line break character "\n", and it isn't stripped out when you convert to
TLF or HTML code.




As fortune would have it, I am dealing with exactly that TLF issue right now in
my project. I can't share the actual source, but I can tell you how I did it:




1) Create a break element <br /> manually:
        - ideas for solving it were in "I wanted to contribute some code...":
http://stackoverflow.com/questions/9937419/how-do-i-insert-a-spanelement-in-a-textflow
        - but splitting the TextFlow and re-assembling really wasn't cutting it 
for
complex structures like lists
        SOLUTION:
        1. find the LeafElement for the cursor position (which is a SpanElement)
        --> textflow.findLeaf(interactionManager.activePosition) as SpanElement
        2. find the relative position of the cursor within that SpanElement
        --> since there is no way to get the absolute cursor position relative 
to a
LeafElement, for this you need a hack comparing strings indexed from
cursorPos+pxAfter and cursorPos-pxBefore with SpanElement.getText();
        3. find the parent ParagraphElement for that LeafElement
        --> targetPara = leafElement.getParagraph();
        4. find the index for that SpanElement within the ParagraphElement (b/c 
you
might have several SpanElements within a ParagraphElement
        --> leafElement.getParagraph().getChildIndex(leafElement);
        5. split the SpanElement
        --> leafElement.splitAtPosition(relPos);
        6. insert BreakElement after the 1st part of the original SpanElement
        --> targetPara.addChildAt(leafIndex+1,flowElement);




2) Allow for creation of break element <br/> with Shift-Enter (not natively
supported):
        1. detect the shift-key pressed
        2. disable the default Enter key behaviour [it's read-only, so you have 
to use
your own]
        --> config = editor.textFlow.configuration as Configuration;
        config.manageEnterKey = false/true;
        3. if the Enter key is pressed right after, then create a line break at 
the
cursor (see above)
        4. on Mouseup on the Shift key, restore default Enter key behaviour (so 
new
<li> or <p> work)








_______________________________________________________________________




Joseph Balderson, Flex & Flash Platform Developer :: http://joeflash.ca
Author, Professional Flex 3 :: http://tinyurl.com/proflex3book




Scott Matheson wrote:
> Hi
>    I am trying to build a Paragraph from sentences,
>
> this builds the Paragraph (from am XML file and itemRender)
>
> the build function looks like
>
>
> var linkWrapper:LinkElement = new LinkElement();
>
> var sentence:SpanElement = new SpanElement();
>
> sentence.styleName = 'linkStyle';
>
> sentence.textDecoration = TextDecoration.NONE;
>
> sentence.text = model.text + " ";
>
> linkWrapper.addChild(sentence);
>
> paragraphArea.addChild(linkWrapper);
>
>
>
> Layout
>
>
>
> <s:TextArea id="ta" minHeight="0"  width="100%" editable="false"
>
> <s:p id="paragraphArea" paragraphSpaceBefore="0">
>
> </s:p>
>
> </s:TextArea>
>
>
>
> I get
>
>
> sentence1
>
> sentence2
>
> sentence3
>
>
>
> my problem is how to i add a <br> in to the Paragraph and end up with
>
>
> sentence1
>
>
> sentence2
>
>
> sentence3
>
>
>
> it would be good if the  input text  model.text  could be 
> "sentence1<br>sentence2<br>sentence3"
>
>
>
>
>
> ________________________________
>
> Disclaimer: This electronic mail and any attachments are confidential and may 
> be privileged. If you are not the intended recipient, please notify the 
> sender immediately by replying to this email, and destroy all copies of this 
> email and any attachments. Thank you.
>




________________________________________
From: Joseph Balderson [[email protected]]
Sent: Friday, April 04, 2014 4:01 PM
To: [email protected]
Subject: Re: <BR> in TextArea

Actually, if you create a BreakElement at the right place, it isn't substituted
for a line break character "\n", and it isn't stripped out when you convert to
TLF or HTML code.

As fortune would have it, I am dealing with exactly that TLF issue right now in
my project. I can't share the actual source, but I can tell you how I did it:

1) Create a break element <br /> manually:
        - ideas for solving it were in "I wanted to contribute some code...":
http://stackoverflow.com/questions/9937419/how-do-i-insert-a-spanelement-in-a-textflow
        - but splitting the TextFlow and re-assembling really wasn't cutting it 
for
complex structures like lists
        SOLUTION:
        1. find the LeafElement for the cursor position (which is a SpanElement)
        --> textflow.findLeaf(interactionManager.activePosition) as SpanElement
        2. find the relative position of the cursor within that SpanElement
        --> since there is no way to get the absolute cursor position relative 
to a
LeafElement, for this you need a hack comparing strings indexed from
cursorPos+pxAfter and cursorPos-pxBefore with SpanElement.getText();
        3. find the parent ParagraphElement for that LeafElement
        --> targetPara = leafElement.getParagraph();
        4. find the index for that SpanElement within the ParagraphElement (b/c 
you
might have several SpanElements within a ParagraphElement
        --> leafElement.getParagraph().getChildIndex(leafElement);
        5. split the SpanElement
        --> leafElement.splitAtPosition(relPos);
        6. insert BreakElement after the 1st part of the original SpanElement
        --> targetPara.addChildAt(leafIndex+1,flowElement);

2) Allow for creation of break element <br/> with Shift-Enter (not natively
supported):
        1. detect the shift-key pressed
        2. disable the default Enter key behaviour [it's read-only, so you have 
to use
your own]
        --> config = editor.textFlow.configuration as Configuration;
        config.manageEnterKey = false/true;
        3. if the Enter key is pressed right after, then create a line break at 
the
cursor (see above)
        4. on Mouseup on the Shift key, restore default Enter key behaviour (so 
new
<li> or <p> work)


_______________________________________________________________________

Joseph Balderson, Flex & Flash Platform Developer :: http://joeflash.ca
Author, Professional Flex 3 :: http://tinyurl.com/proflex3book

Scott Matheson wrote:
> Hi
>    I am trying to build a Paragraph from sentences,
>
> this builds the Paragraph (from am XML file and itemRender)
>
> the build function looks like
>
>
> var linkWrapper:LinkElement = new LinkElement();
>
> var sentence:SpanElement = new SpanElement();
>
> sentence.styleName = 'linkStyle';
>
> sentence.textDecoration = TextDecoration.NONE;
>
> sentence.text = model.text + " ";
>
> linkWrapper.addChild(sentence);
>
> paragraphArea.addChild(linkWrapper);
>
>
>
> Layout
>
>
>
> <s:TextArea id="ta" minHeight="0"  width="100%" editable="false"
>
> <s:p id="paragraphArea" paragraphSpaceBefore="0">
>
> </s:p>
>
> </s:TextArea>
>
>
>
> I get
>
>
> sentence1
>
> sentence2
>
> sentence3
>
>
>
> my problem is how to i add a <br> in to the Paragraph and end up with
>
>
> sentence1
>
>
> sentence2
>
>
> sentence3
>
>
>
> it would be good if the  input text  model.text  could be 
> "sentence1<br>sentence2<br>sentence3"
>
>
>
>
>
> ________________________________
>
> Disclaimer: This electronic mail and any attachments are confidential and may 
> be privileged. If you are not the intended recipient, please notify the 
> sender immediately by replying to this email, and destroy all copies of this 
> email and any attachments. Thank you.
>

________________________________

Disclaimer: This electronic mail and any attachments are confidential and may 
be privileged. If you are not the intended recipient, please notify the sender 
immediately by replying to this email, and destroy all copies of this email and 
any attachments. Thank you.

Reply via email to