flash on 2012-2-27
♥0 |
Line 145 |
Modified 2012-02-27 03:08:33 |
MIT License
archived:2017-03-20 01:32:26
ActionScript3 source code
/**
* Copyright dimitris.1972g ( http://wonderfl.net/user/dimitris.1972g )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/bIiV
*/
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.events.TextEvent;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFieldAutoSize;
import flash.events.MouseEvent;
import flash.text.TextFormatAlign;
import flash.ui.Keyboard;
public class TextFormat_constructorExample extends Sprite {
private var contentTextField:TextField = new TextField();
private var formatTextField:TextField = new TextField();
private var newFormat:TextFormat = new TextFormat();
private var backUpFormat:String;
private var ignoreKeyUp:Boolean = false;
public function TextFormat_constructorExample() {
contentTextField.x = 10;
contentTextField.y = 10;
contentTextField.background = true;
contentTextField.border = true;
contentTextField.multiline = true;
contentTextField.wordWrap = true;
contentTextField.selectable = false;
contentTextField.width = 250;
contentTextField.height =720;
contentTextField.htmlText = "<p>The TextFormat class represents character formatting "
+ "information. Use the TextFormat class to create specific text formatting "
+ "for text fields." +
" </p><br>" + "\tTab One" + "\tTab Two<br>";
formatTextField.x = 10;
formatTextField.y = 140;
formatTextField.background = true;
formatTextField.border = true;
formatTextField.autoSize = TextFieldAutoSize.LEFT;
formatTextField.type = 'input';
formatTextField.restrict = '1234567890,. QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm';
formatTextField.text = "align:|right|\n" + "blockIndent:|10|\n" + "bold:|true|\n" + "bullet:|true|\n" + "color:|0x0000ff|\n"
+ "font:|Arial|\n" + "indent:|20|\n" + "italic:|true|\n" + "leading:|5|\n"
+ "leftMargin:|20|\n" + "letterSpacing:|4|\n" + "rightMargin:|20|\n"
+ "size:|16|\n" + "target:|new window|\n" + "tabStops:|50,150|\n"
+ "underline:|true|\n" + "url:|Adobe Flex page|\n";
backUpFormat = formatTextField.text;
formatTextField.addEventListener(MouseEvent.CLICK, formatTextFieldClickHandler);
formatTextField.addEventListener(MouseEvent.MOUSE_DOWN, checkSelected);
formatTextField.addEventListener(MouseEvent.MOUSE_UP, checkSelected);
formatTextField.addEventListener(MouseEvent.MOUSE_MOVE, checkSelected);
formatTextField.addEventListener(Event.CHANGE, onFormatChange);
formatTextField.addEventListener(KeyboardEvent.KEY_DOWN, onFormatKeyPress);
formatTextField.addEventListener(KeyboardEvent.KEY_UP, onFormatKeyRelease);
contentTextField.addEventListener(MouseEvent.CLICK, contentTextFieldClickHandler);
addChild(contentTextField);
addChild(formatTextField);
}
private function checkSelected(e:Event = null):void {
backUpFormat = formatTextField.text;
var sel: String = formatTextField.selectedText;
var arr:Array = new Array();
arr.push(sel.indexOf('\n'), sel.indexOf('\r'), sel.indexOf('|'), sel.indexOf(':'));
arr.sort();
if (arr[3] == -1) {
return;
}
var selTo:int = 0;
var selFrom:int = 0;
var ind:int = (arr[0] == -1 ? (arr[1] == -1 ? arr[2] : arr[1]) : arr[0]);
if (arr[3] == ind) {
if (ind > sel.length / 2) {
selFrom = formatTextField.selectionBeginIndex + ind + 1;
selTo = formatTextField.selectionEndIndex;
}else {
selFrom = formatTextField.selectionBeginIndex;
selTo = formatTextField.selectionEndIndex - ind - 1;
}
}else {
var sl2: int = int(sel.length / 2);
if ((sl2 < arr[3] - ind && arr[0] == -1 && arr[1] == -1) || (sl2 < arr[2] - ind && arr[0] == -1) || sl2 < arr[1] - arr[0]) {
var fInd: int = (arr[0] == -1 ? (arr[1] == -1 ? 2 : 1) : 0);
selFrom = formatTextField.selectionBeginIndex + arr[fInd] + 1;
selTo = formatTextField.selectionEndIndex - arr[fInd + 1] - 1;
}else{
if (sel.length - arr[3] > ind) {
selFrom = formatTextField.selectionBeginIndex + arr[3] + 1;
selTo = formatTextField.selectionEndIndex;
}else {
selFrom = formatTextField.selectionBeginIndex;
selTo = formatTextField.selectionEndIndex - ind - 1;
}
}
}
formatTextField.setSelection(selTo, selFrom);
}
private function onFormatKeyRelease(e:KeyboardEvent):void {
if (ignoreKeyUp) {
ignoreKeyUp = false;
formatTextField.text = backUpFormat;
}
}
private function onFormatKeyPress(e:KeyboardEvent):void {
checkSelected();
if (formatTextField.selectedText.length > 0) {
return;
}
var pos: int = formatTextField.caretIndex;
var targetChar:String;
switch(e.keyCode) {
case Keyboard.BACKSPACE:
targetChar = formatTextField.text.charAt(pos - 1);
if (targetChar == '|' || targetChar == '\r' || targetChar == '\n' || targetChar == ':') {
ignoreKeyUp = true;
}
break;
case Keyboard.DELETE:
targetChar = formatTextField.text.charAt(pos);
if (targetChar == '|' || targetChar == '\r' || targetChar == '\n' || targetChar == ':') {
ignoreKeyUp = true;
}
break;
}
}
private function onFormatChange(e:Event):void {
if (formatTextField.text.split('|').length != backUpFormat.split('|').length || formatTextField.text.split('\n').length != backUpFormat.split('\n').length || formatTextField.text.split('\r').length != backUpFormat.split('\r').length || formatTextField.text.split(':').length != backUpFormat.split(':').length) {
formatTextField.text = backUpFormat;
}
}
private function formatTextFieldClickHandler(e:MouseEvent):void {
var value:String= "";
var i:uint = 0;
var index:int = formatTextField.getLineIndexAtPoint(e.localX, e.localY);
var line:String = formatTextField.getLineText(index);
var arr:Array = line.replace('|\n', '').replace('|\r', '').split(':|');
try {
newFormat[arr[0]] = arr[1].indexOf(',') != -1 ? arr[1].split(',') : arr[1];
}catch (er:Error) {
trace(er.getStackTrace() + '\n * |' + arr[0] + '|\n * |' + arr[1]+ '|\r\n');
}
contentTextField.setTextFormat(newFormat);
}
private function contentTextFieldClickHandler(e:MouseEvent):void {
contentTextField.setTextFormat(contentTextField.defaultTextFormat);
newFormat = contentTextField.defaultTextFormat;
}
}
}