⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 panel0.as

📁 flash编程实例
💻 AS
字号:
class Scene.Manage.Panels.Group1.Panel0 extends MovieClip {
	//Const
	var dayOfWeek_array:Array = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
	//Flashcom
	private var appLogStream;
	private var fullDumpStream;
	//Should be :NetStream but then compiler throws a wobly about onLog method
	//UI Eliments
	private var logText:MovieClip;
	//0
	private var checkBox1:MovieClip;
	//1
	private var checkBox2:MovieClip;
	//2
	private var checkBox3:MovieClip;
	//3
	private var clearBtn:MovieClip;
	//4
	private var KeyWords:Array = ["true", "false", "Boolean", "Number", "String",
								  "Function", "Object", "object ","Admin found:", 
								  "User connected:", "Logging out:"];
	
	private var BuiltInPhrase:Array = ["FCApplication loaded successfully","Communication Framework loaded successfully.",
									   "Unloaded application instance", "Playing and resetting", "Pausing",
									   "Unpausing", "Started playing", "Stopped playing", "Recording",
									   "Failed to record", "New NetStream created", "NetStream deleted",
									   "Publishing", "Failed to publish", "Failed to restart virtual host",
									   "Connection to FlashCom has been disconnected.", "Failed to play",
									   "Play stop failed", "Audio receiving", "Failed to enable audio", 
									   "Failed to stop playing", "Video receiving", "Set video fps",
									   "Failed to receive", "Seeking", "Failed to seek"];
	//
	private var ColorKeyword:String = "#000084";
	private var ColorComment:String = "#AE0000";
	private var ColorString:String = "#0000FF";
	//
	private var Lines:Array = new Array();
	private var ColapseData:Object = new Object();
	private var ColapseCheck:Object = new Object();
	private var IgnoreLine:String = "";
	//
	private var objectCopyRefs:Array = new Array();
	//
	function Panel0() {
		//Attach Assets
		attachMovie("TextArea", "logText", 0);
		attachMovie("CheckBox", "checkBox1", 1);
		attachMovie("CheckBox", "checkBox2", 2);
		attachMovie("CheckBox", "checkBox3", 3);
		attachMovie("Button", "clearBtn", 4);
		//Work Assets
		logText._x = 20;
		logText._y = 45;
		logText.editable = false;
		logText.html = true;
		//
		checkBox1.label = "Time Stamp";
		checkBox1._x = 20;
		//
		checkBox2._x = 20;
		checkBox2._y = 21;
		checkBox2.label = "Data Types";
		//
		checkBox3._x = 120;
		checkBox3.label = "Dump Complex Data";
		checkBox3.selected = true;
		checkBox3.setSize(140, 22);
		//
		clearBtn.label = "Clear";
		clearBtn._y = 10;
		clearBtn.addEventListener("click", this);
	}
	//Events
	function click(evt) {
		logText.text = "";
		Lines = new Array();
		ColapseData = new Object();
		ColapseCheck = new Object();
		IgnoreLine = "";
	}
	//
	function activate() {
		//
		appLogStream = new NetStream(_global.Connection.Net);
		var p = this;
		appLogStream.onLog = function(info) {
			var strIn = info.description;
			//
			if (strIn.substr(0, 10) == ":@zf_dump:") {
				var encodeStr = strIn.substr(10, strIn.length - 10);
				//__par.convertToObject(encodeStr)
				var o = p.convertToObject(encodeStr);
				p.traceObject(o);
			} else {
				p.traceObject(info.description);
			}
		};
		appLogStream.play("logs/application/"+_global.selectedApplication, -1);
		//
	}
	function deactivate(){
		appLogStream.close();
	}
	//Lots and lots of code for various things, tracing out objects
	//converting my encoding object string to a real object
	//etc
	function traceObject(obj) {
		var typeString = typeof (obj);
		typeString = "<B>"+typeString.slice(0, 1).toUpperCase()+typeString.slice(1, typeString.length)+"</B>";
		//
		if (typeof (obj) == "object" && checkBox3.selected == true) {
			var method = this+".doColapse";
			var args = Lines.length+":"+0;
			//
			var link = "<a href='asfunction:"+method+","+args+"'>";
			//
			var linkEnd = "</a>";
			//
			var method = this+".doCopy";
			objectCopyRefs.push(obj.toString());
			var args = objectCopyRefs.length-1;
			//
			var copyLink = "<a href='asfunction:"+method+","+args+"'>";
			//
			ColapseCheck[Lines.length+":"] = false;
			appendText(link+"[object Object]"+linkEnd+copyLink+"<font color='#FF0000' size='10'><b>   :copy:</b></font>"+linkEnd, 0);
			var offset = "    ";
			populateSubObject(obj, offset);
		} else {
			if (checkBox2.selected == true) {
				appendText(obj+" - :"+typeString, 0);
			} else {
				appendText(obj.toString()+"", 0);
			}
		}
	}
	function doCopy(data){
		System.setClipboard(objectCopyRefs[Number(data)]);
	}
	function doColapse(data){
		var a = data.split(":");
		var line = Number(a[0]);
		var offset = Number(a[1]);
		//
		if(!ColapseData[line]){
			ColapseData[line] = new Array();
		}
		if(ColapseCheck[line+":"] == false){
			//Close
			for(var i=line+1;i<Lines.length;i++){
				var l = Lines[i];
				if(l.o > offset){
					ColapseData[line].push(i);
					IgnoreLine += ","+i+",";
				}else{
					break;
				}
			}
			ColapseCheck[line+":"] = true;
			relog();
		}else{
			//Open
			var over_ride:String = "";
			for(var i=0;i<ColapseData[line].length;i++){
				var l = ColapseData[line][i];
				//
				if(ColapseCheck[l+":"] == true){
					for(var o=0;o<ColapseData[l].length;o++){
						over_ride += ","+ColapseData[l][o]+",";
					}
				}
				if(over_ride.indexOf(","+l+",") == -1){
					IgnoreLine = IgnoreLine.split(","+l+",").join("");
				}
			}
			ColapseCheck[line+":"] = false;
			relog();
		}
	}
	function relog(){
		var p = logText.vPosition;
		logText.text = "";
		for(var i=0;i<Lines.length;i++){
			if(IgnoreLine.indexOf(","+i+",") == -1){
				logText.text += Lines[i].text;
			}
		}
		logText.vPosition = p;
	}
	function countSpaces(str){
		var s = "";
		for(var i=str.indexOf(" ");i<str.length;i++){
			if(str.substr(i, 1) == " "){
				s += " ";
			}else{
				break;
			}
		}
		return s.length;
	}
	function populateSubObject(data, offset) {
		for (var i in data) {
			if (typeof (data[i]) == "object") {
				//
				var method = this+".doColapse";
				var args = Lines.length+":"+countSpaces(offset).toString();
				//
				var link = "<a href='asfunction:"+method+","+args+"'>";
				//
				var linkEnd = "</a>";
				ColapseCheck[Lines.length+":"] = false;
				//
				var method = this+".doCopy";
				objectCopyRefs.push(data[i].toString());
				var args = objectCopyRefs.length-1;
				//
				var copyLink = "<a href='asfunction:"+method+","+args+"'>";
				//
				appendText(link+offset+"[object Object: "+"<font color='"+ColorKeyword+"'>"+"name</font> = "+i+": "+"<font color='"+ColorKeyword+"'>"+"length</font> = "+i.length+"]"+linkEnd+copyLink+"<font color='#FF0000' size='10'><b>   :copy:</b></font>"+linkEnd, countSpaces(offset));
				populateSubObject(data[i], offset+"    ");
			} else {
				if (checkBox2.selected == true) {
					var typeString = typeof (data[i]);
					typeString = "<B>"+typeString.slice(0, 1).toUpperCase()+typeString.slice(1, typeString.length)+"</B>";
					//
					var s = data[i];
					if(typeof(s) == "string"){
						s = "<font color='"+ColorString+"'>"+'"'+s+'"'+"</font>";
					}
					//
					appendText(offset+i+" = "+s+"; - :"+typeString, countSpaces(offset));
				} else {
					var s = data[i];
					if(typeof(s) == "string"){
						s = "<font color='"+ColorString+"'>"+'"'+s+'"'+"</font>";
					}
					appendText(offset+i+" = "+s+";", countSpaces(offset));
				}
			}
		}
	}
	function appendText(txt, offset) {
		if (txt.indexOf("fcz_fcs_admin_log") == -1) {
			//This is not a useful log, its just telling us we are
			//connected to the admin stream
			var color = "#000000";
			var original = txt;
			//
			for(var i=0;i<KeyWords.length;i++){
				var rV = KeyWords[i];
				txt = txt.split(rV).join("<font color='"+ColorKeyword+"'>"+rV+"</font>");
			}
			for(var i=0;i<BuiltInPhrase.length;i++){
				if(original.indexOf(BuiltInPhrase[i]) != -1){
					txt = "<font color='"+ColorComment+"'> > "+original+"</font>";
					//Can break its already red
					break;
				}
			}
			//
			var fontPrefix:String = "<font face='Verdana' size='10' color='"+color+"'>";
			var fontSuffix:String = "</font><br>";
			var StampString = "";
			//
			if (checkBox1.selected == true) {
				var my_date:Date = new Date();
				var hourObj:Object = getHoursAmPm(my_date.getHours());
				StampString = dayOfWeek_array[my_date.getDay()]+" "+hourObj.hours+":"+my_date.getMinutes()+" "+hourObj.ampm+": ";
			}
			if (logText.text == "") {
				if (checkBox1.selected == true) {
					var t = fontPrefix+StampString+txt+fontSuffix;
					Lines.push({text:t, o:offset});
					logText.text = t;
				} else {
					var t = fontPrefix+txt+fontSuffix;
					Lines.push({text:t, o:offset});
					logText.text = t;
				}
			} else {
				if (checkBox1.selected == true) {
					var t = fontPrefix+StampString+txt+fontSuffix;
					Lines.push({text:t, o:offset});
					logText.text += t;
				} else {
					var t = fontPrefix+txt+fontSuffix;
					Lines.push({text:t, o:offset});
					logText.text += t;
				}
			}
			logText.vPosition = logText.maxVPosition+10;
		}
	}
	function getHoursAmPm(hour24:Number):Object {
		var returnObj:Object = new Object();
		returnObj.ampm = (hour24<12) ? "AM" : "PM";
		var hour12:Number = hour24%12;
		if (hour12 == 0) {
			hour12 = 12;
		}
		returnObj.hours = hour12;
		return returnObj;
	}
	//this converts an object as an {type, val, leve} to real objects
	function itemToObject(item) {
		if (item.type == 0) {
			//Object, needs deeper processing
			var oa = splitStringExpress(item.val, item.level+1);
			return processObjectArray(oa);
		} else {
			//
			if (item.type == 1) {
				//String
				return item.val;
			} else if (item.type == 2) {
				//Number
				return Number(item.val);
			} else if (item.type == 3) {
				//Boolean
				if (item.val == "true") {
					return true;
				} else {
					return false;
				}
			} else if (item.type == 4) {
				//Function
				return function () {
				};
			}
		}
	}
	//This method will take an object array created from the splitStringExpress
	//method and turns it into real objects
	function processObjectArray(ary) {
		var obj = new Object();
		//type:typeRef[Number(datInt)]
		for (var i = 0; i<ary.length; i++) {
			var item = ary[i];
			obj[item.name] = itemToObject(item);
		}
		return obj;
	}
	//This method splits up an encoded string into an array of object reprisentations
	//based on the level, i added a level value to make my life easyer
	//a while back i built one that converts object to {...} reprisentation
	//but converting it back was dificult
	function splitStringExpress(str, level) {
		var lookStr = "¶"+level+":";
		var sPoint = 0;
		var retArray = new Array();
		for (var i = 0; i<str.length; i++) {
			var i = str.indexOf(lookStr, sPoint);
			if (i == -1) {
				break;
			} else {
				var datInsP = i+lookStr.length;
				var datInt = str.substr(datInsP, 1);
				var endStr = datInt+":"+level+"¶";
				//p,2,2:0¶,
				var endPoint = str.indexOf(endStr, i);
				var objectString = str.slice(i+lookStr.length+2, endPoint-1);
				//o,1
				var pName = objectString.slice(0, objectString.indexOf(","));
				var pContent = objectString.split(pName+",")[1];
				//
				retArray.push({type:datInt, name:pName, val:pContent, level:level});
				//
				var len = lookStr.length;
				//Start bit eg ¶0:
				len += 2;
				//the data type and comma
				len += pName.length;
				len += 1;
				//Comma
				len += pContent.length;
				len += 1;
				//Comma
				len += endStr.length;
				//
				sPoint += len;
			}
		}
		return retArray;
	}
	//This is the main convert method
	function convertToObject(string) {
		var res = new Object();
		if (string.substr(0, 2) == "s¶") {
			//Single Value
			var typeID = string.substr(2, 1);
			var dat = string.split("s¶"+typeID+",")[1];
			var item = {type:Number(typeID), val:dat};
			res = itemToObject(item);
		} else {
			//Complex data type
			res = processObjectArray(splitStringExpress(string, 0));
		}
		return res;
	}
	//
	function setSize(w:Number, h:Number) {
		logText.setSize(w-40, h-63);
		clearBtn._x = (w-130);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -