List Problem
There are some words in the textArea, now I want to set some paras to be the list, but I failed,does anyone know how to add list dynamically?
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:ai="http://ns.adobe.com/ai/2009"
xmlns:d="http://ns.adobe.com/fxg/2008/dt"
xmlns:flm="http://ns.adobe.com/flame/2008"
creationComplete="initApp()">
<fx:Script>
<![CDATA[
import flashx.textLayout.BuildInfo;
import flashx.textLayout.compose.IFlowComposer;
import flashx.textLayout.compose.TextFlowLine;
import flashx.textLayout.conversion.TextConverter;
import flashx.textLayout.edit.IEditManager;
import flashx.textLayout.edit.SelectionFormat;
import flashx.textLayout.edit.SelectionState;
import flashx.textLayout.elements.FlowGroupElement;
import flashx.textLayout.elements.ListElement;
import flashx.textLayout.elements.ListItemElement;
import flashx.textLayout.elements.ParagraphElement;
import flashx.textLayout.elements.SpanElement;
import flashx.textLayout.elements.TextFlow;
import flashx.textLayout.formats.ITextLayoutFormat;
import flashx.textLayout.formats.ListMarkerFormat;
import flashx.textLayout.formats.ListStylePosition;
import flashx.textLayout.formats.ListStyleType;
import flashx.textLayout.operations.SplitParagraphOperation;
import spark.components.TextArea;
import spark.utils.TextFlowUtil;
protected function initApp():void {
var version:String = "";
version += "TLF version: " + BuildInfo.VERSION + "<br/>"+"TLF Build number: " + BuildInfo.kBuildNumber;
var s:String = "";
s += "<TextFlow version='2.0.0' xmlns='http://ns.adobe.com/textLayout/2008'>";
s += "<p>Flex framework"+version+"</p>";
s += "<p>Flex is a free, open source framework for building highly interactive, expressive web applications that dep</p>";
s += "<p>Flex framework</p>";
s += "<p>Flex framework</p>";
s += "<p>I am a new paragraph and I'd like to start at the left below the image</p>";
s += "</TextFlow>";
messageTA.textFlow = TextConverter.importToFlow(s, TextConverter.TEXT_LAYOUT_FORMAT);
}
protected function doSetList():void
{
var interactionManager:IEditManager = messageTA.textFlow.interactionManager as IEditManager;
var selStart:int=messageTA.selectionAnchorPosition
var selFinish:int=messageTA.selectionActivePosition;
interactionManager.selectRange(selStart,selFinish)
var list:ListElement = new ListElement()
list.tabStops="e20 s24";
list.listStyleType=ListStyleType.CHECK
list.listStylePosition=ListStylePosition.INSIDE;
var lm:ListMarkerFormat=new ListMarkerFormat();
//lm.listStyleType=ListStyleType.DECIMAL;
lm.tabStops="e20 s24";
//lm.listStylePosition=ListStylePosition.INSIDE;
lm.fontSize=14
lm.color="0xff0000"
lm.paragraphEndIndent=5;
list.listMarkerFormat=lm;
var pA:Array=getParaArrAtPoint(messageTA,messageTA.mouseX, messageTA.mouseY);
trace("length==="+pA.length)
for(var j:int=0;j<pA.length;j++){
if(pAis ParagraphElement){
var item:ListItemElement = new ListItemElement();
item.addChild(pA);
list.addChild(item);
}
}
messageTA.textFlow.addChild(list);
//interactionManager.applyContainerFormat(lm)
//messageTA.textFlow.interactionManager.setFocus();
messageTA.textFlow.flowComposer.updateAllControllers()
}
private var charIdxAtPoint:int;
private function getParaArrAtPoint(textArea:Object, x:Number, y:Number):Array {
var fc:IFlowComposer = textArea.textFlow.flowComposer;
var sPoint:Point = textArea.localToGlobal(new Point(x, y));
var paraArray:Array=[]
for (var i:int = 0; i<fc.numLines; i++){
var tfLine:TextFlowLine = fc.getLineAt(i);
trace(i+"="+tfLine.paragraph)
paraArray.push(tfLine.paragraph)
return paraArray;
if (y >= tfLine.y && y <tfLine.height+tfLine.y){
var lineAtomPosition:Number = tfLine.getTextLine().getAtomIndexAtPoint(sPoint.x, sPoint.y);
if(lineAtomPosition==-1){
charIdxAtPoint=-1;
return null;
}
if (lineAtomPosition>= 0){
charIdxAtPoint=tfLine.absoluteStart+lineAtomPosition+1;
paraArray.push(tfLine.paragraph)
return paraArray;
}
if (x > tfLine.unjustifiedTextWidth){
charIdxAtPoint=tfLine.absoluteStart+tfLine.textLength-1;
paraArray.push(tfLine.paragraph)
return paraArray;
}
charIdxAtPoint=tfLine.absoluteStart;
paraArray.push(tfLine.paragraph)
return paraArray;
}
}
charIdxAtPoint=textArea.text.length;
paraArray.push(tfLine.paragraph)
return paraArray;
}
protected function testScroll_clickHandler(event:MouseEvent):void
{
point.text = '['+event.localX+', '+event.localY+']';
}
]]>
</fx:Script>
<s:VGroup left="5"
right="5"
top="10"
bottom="82">
<s:Button label="Set List At cursor position"
click="doSetList()"/>
<s:TextArea id="messageTA"
width="100%"
height="100%"
click="testScroll_clickHandler(event)"
editable="true"/>
<mx:ApplicationControlBar width="450">
<s:Label text="Click Point:"/>
<s:Label id="point"
width="60"/>
<s:Label text="charIndex:"/>
<s:Label id="index"
width="30"/>
</mx:ApplicationControlBar>
</s:VGroup>
</s:WindowedApplication>
