`
jakielong
  • 浏览: 228378 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Flex AIR--简单文本编辑器源码

    博客分类:
  • Flex
阅读更多

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
	 width="800" height="600" title="Text Editor" applicationComplete="onAppInit();">
	
	<mx:Script>
		<![CDATA[
			import mx.validators.ValidationResult;
			import mx.events.FileEvent;
			import flash.events.KeyboardEvent;
			import flash.filesystem.File;
			import flash.filesystem.FileMode;
			import flash.filesystem.FileStream;
			import flash.net.FileFilter;
			import mx.controls.Alert;
			import mx.events.CloseEvent;
			import mx.events.MenuEvent;
			
			private var browseHolder:File;
			private var currentFile:File;
			private var defaultFile:File;
			private var fileStream:FileStream;
			private var fileToOpen:File;
			private var fileToSave:File;
			private var textChanged:Boolean;
			
			public function onAppInit():void
			{
				title = "Text Editor - Untitled.txt";
				defaultFile = File.documentsDirectory.resolvePath("untitled.txt");
				textChanged = false;
				
				application.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
			}
			
			private function onKeyUp(event:KeyboardEvent):void
			{
				if (event.keyCode==Keyboard.TAB&&!event.altKey&&!event.shiftKey&&!event.ctrlKey)
				{
					var sb:Number = fileTextArea.selectionBeginIndex;
					var se:Number = fileTextArea.selectionEndIndex;
					
					var firstPart:String = fileTextArea.text.slice(0,sb);
					var secondPart:String = fileTextArea.text.slice(se);
					
					fileTextArea.text = firstPart + "\t" + secondPart;
				}
			}
			
			private function onItemClick(event:MenuEvent):void
			{
				switch(event.label)
				{
					case "New":
						newDocument();
						break;
					case "Open":
						promptUserToOpenFile();
						break;
					case "Save":
						saveFile();
						break;
					case "Save As...":
						promptUserToSaveFile();
						break;
				}
			}
			
			private function onAlertClose(event:CloseEvent):void
			{
				switch(event.detail)
				{
					case Alert.YES:
						saveFile();
						break;
					case Alert.NO:
						textChanged = false;
						newDocument();
						break;
				}
			}
			
			private function onFileOpenSelect(event:FileEvent):void
			{
				currentFile = event.file as File;
				openFile();
			}
			
			private function onFileSaveSelect(event:FileEvent):void
			{
				currentFile = event.file as File;
				textChanged = false;
				title = "Text Editor - " + currentFile.name;
				saveFile();
			}
			
			private function onOpenComplete(event:Event):void
			{
				var theText:String = fileStream.readUTFBytes(fileStream.bytesAvailable);
				var lineEndPattern:RegExp = new RegExp(File.lineEnding,"g");
				
				fileTextArea.text = theText.replace(lineEndPattern,"\n");
				textChanged = false;
				title = "Text Editor - " + currentFile.name;
				fileStream.close();
			}
			
			private function onReadIOError(event:IOErrorEvent):void
			{
				Alert.show("The specified file cannot be opened.","Error",Alert.OK,this);
			}
			
			private function onWriteIOError(event:IOErrorEvent):void
			{
				Alert.show("The specified file cannot be saved.","Error",Alert.OK,this);
			}
			
			private function openFile():void
			{
				if (fileStream!=null)
				{
					fileStream.close();
				}
				fileStream = new FileStream();
				fileStream.addEventListener(Event.COMPLETE,onOpenComplete);
				fileStream.addEventListener(IOErrorEvent.IO_ERROR,onReadIOError);
				fileStream.openAsync(currentFile,FileMode.READ);
			}
			
			private function saveFile():void
			{
				if (currentFile)
				{
					if (fileStream!=null)
					{
						fileStream.close();
					}
					var theText:String = fileTextArea.text;
					theText = theText.replace(/\r/g,"\n");
					theText = theText.replace(/\n/g,File.lineEnding);
					
					fileStream = new FileStream();
					fileStream.openAsync(currentFile,FileMode.WRITE);
					fileStream.addEventListener(IOErrorEvent.IO_ERROR,onWriteIOError);
					fileStream.writeUTFBytes(theText);
					fileStream.close();
					textChanged = false;
				}
				else
				{
					promptUserToSaveFile();
				}
			}
			
			private function promptUserToOpenFile():void
			{
				fileToOpen = (currentFile!=null)?currentFile.parent:File.documentsDirectory;
				fileToOpen.removeEventListener(Event.SELECT,onFileSaveSelect);
				
				var textFilter:FileFilter = new FileFilter("Text","*.as;*.css;*.html;*.txt;*.xml");
				var allFilter:FileFilter = new FileFilter("All Files","*.*");
				
				try
				{
					fileToOpen.browseForOpen("Open",[textFilter,allFilter]);
					fileToOpen.addEventListener(Event.SELECT,onFileOpenSelect);
				}
				catch(error:Error)
				{
					trace("Failed:",error.message);
				}
			}
			
			private function promptUserToSaveFile():void
			{
				fileToSave = (currentFile)?currentFile:defaultFile;
				fileToSave.removeEventListener(Event.SELECT,onFileOpenSelect);
				
				var typeFilter:FileFilter = new FileFilter("Text","*.as;*.css;*.html;*.txt;*.xml");
				
				try
				{
					fileToSave.browseForSave("Save");
					fileToSave.addEventListener(Event.SELECT,onFileSaveSelect);
				}
				catch(error:Error)
				{
					trace("Failed:",error.message);
				}
			}
			
			private function newDocument():void
			{
				if (textChanged)
				{
					Alert.show("The text in your current document has changed.\nDo" + 
							" you want to save your changes?","Alert",(Alert.YES|Alert.NO|Alert.CANCEL),this,onAlertClose);
				}
				else
				{
					currentFile = undefined;
					textChanged = false;
					fileTextArea.text = "";
				}
			}
		]]>
	</mx:Script>
	
	<mx:MenuBar id="myMenuBar" labelField="@label"
		 left="0" top="0" right="0" tabEnabled="false"
		 itemClick="onItemClick(event);">
		<mx:XMLList>
			<menuitem label="File">
				<menuitem label="New"/>
				<menuitem label="Open"/>
				<menuitem label="Save"/>
				<menuitem label="Save As..."/>
			</menuitem>
		</mx:XMLList>
	</mx:MenuBar>
	<mx:TextArea id="fileTextArea"
		 top="21" left="0" right="0" bottom="0"
		 focusThickness="0" fontFamily="Arial"
		 fontSize="14" tabEnabled="false"
		 change="textChanged=true;"/>
</mx:WindowedApplication>
 
分享到:
评论

相关推荐

    Flex-图片编辑器-air源码实例

    这个“Flex-图片编辑器-air源码实例”提供了一个使用Flex技术实现的图片编辑器应用,它具备基础的图像处理功能,如扭曲、色调调整和扩散效果。在深入讨论这个源码实例之前,我们先来了解一下Flex和Adobe AIR的相关...

    Flex Air音乐播放器源码

    Flex Air音乐播放器源码是基于Adobe Flex Builder 3开发的一款应用程序,主要使用ActionScript编程语言,这使得它能够在Adobe AIR(Adobe Integrated Runtime)平台上运行。Adobe Flex是用于构建富互联网应用程序...

    flex/air 护眼健康卫士源码

    flex/air 护眼健康卫士源码

    AIR捕鱼路线编辑器(贝塞尔曲线)内含源码

    《AIR捕鱼路线编辑器(贝塞尔曲线)内含源码》是一个专为游戏开发设计的工具,主要用于创建和编辑鱼类移动的路径。该编辑器基于Adobe AIR技术,它允许开发者在2D空间中通过贝塞尔曲线来精细地设计游戏中的鱼类行动轨迹...

    使用FlexBuilder3制作并导出AIR1.0正式版应用

    1. **安装FlexBuilder3**: 首先,你需要在计算机上安装Adobe Flex Builder 3,该软件提供了一个集成的开发环境,包括代码编辑器、调试器和项目管理工具。 2. **创建新项目**: 打开FlexBuilder3,创建一个新的Flex...

    flex mmorpg 地图编辑器demo

    本篇将深入探讨一款基于Flex技术的大型多人在线角色扮演游戏(MMORPG)地图编辑器的Demo,通过分析其源码和功能,来揭示其中蕴含的IT知识点。 首先,我们要明确的是,"Flex"是一种基于ActionScript 3的开源框架,...

    flex第一步全部源码

    开发者也可以选择使用免费的Flex SDK,配合文本编辑器进行开发。 3. 源码结构: 在"flex第一步全部源码"中,"library.swf"是一个预编译的SWF文件,它是Flex应用的核心组成部分。SWF是Adobe Flash Player或Adobe AIR...

    Flex Air 拖拽排版 类似 ps 图层

    开发者需要设计直观的UI,包括图层面板、属性编辑器等,让用户能方便地添加、删除、调整图层及其属性。 7. **事件处理**:在Flex中,事件驱动编程是常见的模式。工具中的每一个交互,如拖动、释放、缩放等,都需要...

    特效编辑器源码

    特效编辑器源码是一款基于 Rich Internet Application(RIA)技术开发的工具,主要针对特效制作和编辑。RIA 技术旨在提供更加丰富、交互性更强的网络应用体验,它结合了客户端和服务器端的优势,使用户在网页上可以...

    flex相册展示源码

    Flex框架的核心是Flex Builder(现更名为Flash Builder),这是一个集成开发环境(IDE),提供了可视化设计界面和代码编辑器,支持MXML和ActionScript的编写。MXML是Flex的一种标记语言,用于描述用户界面的布局和...

    fckEditor air内容编辑器的使用以及在air中使用

    **fckEditor air内容编辑器的使用以及在Adobe AIR中集成** fckEditor是一个开源的、基于JavaScript的富文本编辑器,它允许用户在网页上创建和编辑内容,类似于Word的功能,但适用于Web环境。本篇文章将深入探讨如何...

    FLEX流程设计源码

    在"流程编辑器"这个子文件中,我们可以预见到源码包含了创建和编辑流程图的核心功能。这可能包括图形拖放、连接线的动态调整、节点编辑以及保存和加载流程数据等功能。Flex的强大力量在于它可以轻松地将这些功能整合...

    Flex中文帮助源码

    它提供了代码编辑器、项目管理工具、调试器等功能,极大地提高了开发效率。 5. **组件库**:Flex提供了丰富的组件集,如Button、TextInput、List、Accordion等,这些组件可以快速构建出功能丰富的用户界面。开发者...

    精典flex图形化流程设计器源码

    Flex图形化流程设计器源码是一套用于创建和编辑工作流的高级开发工具,它基于Adobe Flex技术,提供了直观的可视化界面,使得用户可以方便地构建、定制和管理各种业务流程。这一源码对于开发者来说是极其宝贵的资源,...

    MyEclipse 8.5+flex4 源码

    它包含了代码编辑器、调试器、数据库连接工具、部署工具等一系列开发必备功能,极大地提升了开发效率。特别地,MyEclipse 8.5版本还增强了对AJAX、GWT和Flex的支持,使得开发者可以在一个统一的环境中进行多技术栈的...

    基于Flex3的透明记事本源码

    标题中的“基于Flex3的透明记事本源码”指的是一个使用Adobe Flex 3框架开发的文本编辑器应用,该应用具有独特的透明效果和系统托盘功能。Flex3是Adobe Flex的一个版本,它是一个用于构建富互联网应用程序(RIA)的...

    flex游戏引擎(PushButton)-简单移动飞机在背景上

    至于“工具”标签,可能指的是使用了Flex Builder或Flash Builder这样的集成开发环境(IDE),这些工具提供了可视化的布局编辑器和代码编辑器,使得开发过程更为便捷。 综上所述,通过这个Flex游戏引擎示例,我们...

    Flex官方设置样式界面源码

    Flex是Adobe公司开发的一种用于构建富互联网应用(RIA)的框架,它基于ActionScript和Flash Player或Adobe AIR运行时环境。在Flex中,样式是控制组件外观的关键元素,可以定义颜色、字体、尺寸、布局等多种视觉特性...

    Flex 4.0 模拟抽奖系统源码

    它提供了一整套的开发工具,包括代码编辑器、调试器和项目管理功能,使得开发者可以高效地编写、测试和部署Flex应用。在这个环境中,开发者可以创建和配置项目,设置源码路径,添加库引用等。 源码结构分析: 1. `...

    Flex基础

    它允许开发者在任何文本编辑器中编写代码。Flex Builder是基于Eclipse的集成开发环境(IDE),提供了更友好的图形界面和调试工具,方便开发者进行快速开发。 2. **ActionScript与MXML** ActionScript是Flex的主要...

Global site tag (gtag.js) - Google Analytics