flash on 2012-2-27

by dimitris.1972g
♥0 | Line 145 | Modified 2012-02-27 03:08:33 | MIT License
play

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;
         }
     }
}