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

📄 stdlook.as

📁 太烦了
💻 AS
📖 第 1 页 / 共 4 页
字号:
class pseudo.look.StdLook implements pseudo.look.ILabelLook,
	pseudo.look.IEditLook, pseudo.look.IWindowManagerLook
{
	private var m_clrWindow:Number;
	private var m_clrHighlight:Number;
	private var m_clrBtnFace:Number;
	private var m_clrBtnShadow:Number;
	private var m_clrHilightText:Number;
	private var m_clrBtnText:Number;
	private var m_clrBtnHover:Number;
	private var m_clrBtnPressed:Number;
	private var m_clrBtnChecked:Number;
	private var m_clrBgHalf:Number;
	private var m_clrCellOver:Number;
	private var m_clrCellOut1:Number;
	private var m_clrCellOut2:Number;
	private var m_clrBox1:Number;
	private var m_clrBox2:Number;
	private var m_clrCellPress:Number;
	private var m_data:Object;
	private var m_strThemeId:String;

	static private var m_instance:pseudo.look.StdLook = null;

	//
	// PUBLIC METHODS
	//
	static public function getInstance():pseudo.look.StdLook
	{
		if(!m_instance) m_instance = new pseudo.look.StdLook();
		return m_instance;
	}

	public function setTheme(clrWindow:Number, clrHighlight:Number, clrBtnFace:Number,
		clrBtnShadow:Number, clrHilightText:Number, clrBtnText:Number):Void
	{
		m_clrWindow = clrWindow;
		m_clrHighlight = clrHighlight;
		m_clrBtnFace = clrBtnFace;
		m_clrBtnShadow = clrBtnShadow;
		m_clrHilightText = clrHilightText;
		m_clrBtnText = clrBtnText;

		var r1, r2, r3, g1, g2, g3, b1, b2, b3:Number;
		r1 = pseudo.Global.getR(m_clrWindow);
		g1 = pseudo.Global.getG(m_clrWindow);
		b1 = pseudo.Global.getB(m_clrWindow);
		r2 = pseudo.Global.getR(m_clrHighlight);
		g2 = pseudo.Global.getG(m_clrHighlight);
		b2 = pseudo.Global.getB(m_clrHighlight);
		r3 = pseudo.Global.getR(m_clrBtnFace);
		g3 = pseudo.Global.getG(m_clrBtnFace);
		b3 = pseudo.Global.getB(m_clrBtnFace);
	
		m_clrBtnHover = pseudo.Global.RGB(Math.round((r1 * 7 + r2 * 3) / 10), Math.round((g1 * 7 + g2 * 3) / 10), Math.round((b1 * 7 + b2 * 3) / 10));
		m_clrBtnPressed = pseudo.Global.RGB(Math.round((r1 + r2) / 2), Math.round((g1 + g2) / 2), Math.round((b1 + b2) / 2));
		m_clrBtnChecked = pseudo.Global.RGB(Math.round((r1 * 24 + r2 * 5 + r3 * 21) / 50), Math.round((g1 * 24 + g2 * 5 + g3 * 21) / 50), Math.round((b1 * 24 + b2 * 5 + b3 * 21) / 50));
		m_clrBgHalf = pseudo.Global.getBlendedColor(m_clrHighlight, 0xffffff, 10);
		m_clrCellOver = pseudo.Global.getBlendedColor(m_clrHighlight, 0xffffff, 12);
		m_clrCellOut1 = pseudo.Global.getBlendedColor(pseudo.Global.getBlendedColor(
			m_clrHighlight, m_clrWindow, 35), 0xffffff, 40);
		m_clrCellOut2 = pseudo.Global.getBlendedColor(pseudo.Global.getBlendedColor(
			m_clrHighlight, m_clrWindow, 60), 0xffffff, 40);
		m_clrBox1 = pseudo.Global.getBlendedColor(pseudo.Global.getBlendedColor(
			m_clrHighlight, m_clrWindow, 35), 0xffffff, 40);
		m_clrBox2 = pseudo.Global.getBlendedColor(pseudo.Global.getBlendedColor(
			m_clrHighlight, m_clrWindow, 60), 0xffffff, 60);
		m_clrCellPress = pseudo.Global.getBlendedColor(m_clrHighlight, 0xffffff, 5);
	}

	public function setData(data:Object):Void
	{
		m_data = data;
		m_strThemeId = m_data.getAttr("default");
		var arrThemes:Array = data.getNodes("theme");
		for(var i:Number = 0; i , arrThemes.length; i++)
			if(arrThemes[i].getAttr("id") == m_strThemeId)
			{
				fromXML(arrThemes[i]);
				break;
			}
	}

	public function getId():String
	{
		return m_data.getAttr("id");
	}

	public function isSameTheme(xmlTheme:XML):Boolean
	{
		var xmlCurTheme:XML = toXML();
		return (xmlCurTheme.attributes.id == xmlTheme.attributes.id &&
			parseInt(xmlCurTheme.attributes.clrWindow) == parseInt(xmlTheme.attributes.clrWindow) &&
			parseInt(xmlCurTheme.attributes.clrHighlight) == parseInt(xmlTheme.attributes.clrHighlight) &&
			parseInt(xmlCurTheme.attributes.clrBtnFace) == parseInt(xmlTheme.attributes.clrBtnFace) &&
			parseInt(xmlCurTheme.attributes.clrBtnShadow) == parseInt(xmlTheme.attributes.clrBtnShadow) &&
			parseInt(xmlCurTheme.attributes.clrHilightText) == parseInt(xmlTheme.attributes.clrHilightText) &&
			parseInt(xmlCurTheme.attributes.clrBtnText) == parseInt(xmlTheme.attributes.clrBtnText));
	}

	//
	// CONTENT METHODS (begin)
	//
	public function fillContent(movie:MovieClip, ctrls:Object):Void
	{
		movie.addListener("update", this, onUpdateContent);
		var list:MovieClip = movie.addItem(ctrls.List, "list", 1);
		list.setCellClass(ctrls.CellRenderer);
		list.addListener("changed", this, onChangeTheme, list);
		list.setData({border:6});
		var arrListData:Array = new Array();
		var arrXMLThemes:Array = m_data.getNodes("theme");
		var nSelId:Number = -1;
		for(var i:Number = 0; i < arrXMLThemes.length; i++)
		{
			arrListData.push({data:arrXMLThemes[i], text:arrXMLThemes[i].getAttr("name")});
			if(arrXMLThemes[i].getAttr("id") == m_strThemeId) nSelId = i;
		}
		list.setListData(arrListData);
		list.setSelCell(nSelId);
	}

	private function onUpdateContent(movie:MovieClip, nW:Number, nH:Number):Void
	{
		var list:MovieClip = movie.getItem("list");
		list.setSize(nW, nH);
	}

	private function onChangeTheme(list:Object):Void
	{
		var data:Object = list.getSelData().data;
		fromXML(data);
		_global.themesManager.setLook(this);
		_global.main.update();
		_global.main.draw();
	}

	public function setThemeId(strId:String):Void
	{
		var arrXMLThemes:Array = m_data.getNodes("theme");
		for(var i:Number = 0; i < arrXMLThemes.length; i++)
			if(arrXMLThemes[i].getAttr("id") == strId)
			{
				fromXML(arrXMLThemes[i]);
				break;
			}
	}

	public function toXML():XML
  {
    var xml:XML = new XML();
		var node:XMLNode = xml.createElement("theme");
		node.attributes.id = m_strThemeId;
		node.attributes.clrWindow = m_clrWindow;
		node.attributes.clrHighlight = m_clrHighlight
		node.attributes.clrBtnFace = m_clrBtnFace;
		node.attributes.clrBtnShadow = m_clrBtnShadow;
		node.attributes.clrHilightText = m_clrHilightText;
		node.attributes.clrBtnText = m_clrBtnText;
		xml.appendChild(node);
    return xml.childNodes[0];
  }

	public function fromXML(data:Object):Void
	{
		m_strThemeId = data.getAttr("id");
		setTheme(
			parseInt(data.getAttr("clrWindow")), parseInt(data.getAttr("clrHighlight")),
			parseInt(data.getAttr("clrBtnFace")), parseInt(data.getAttr("clrBtnShadow")),
			parseInt(data.getAttr("clrHilightText")), parseInt(data.getAttr("clrBtnText"))
		);
	}

	public function getThemeId():String
	{
		return m_strThemeId;
	}

	//
	// CONTENT METHODS (end)
	//

	public function getIconPath(strIcon:String):String
	{
		switch(strIcon)
		{
			case "newForum":
				return "themes/stdLook_new_forum.swf";
			case "oldForum":
			case "newUser":
				return "themes/stdLook_new_user.swf";
			case "forgotPass":
				return "themes/stdLook_forgot_pass.swf";
			case "search":
				return "themes/stdLook_search.swf";
			case "members":
				return "themes/stdLook_members.swf";
			case "groups":
				return "themes/stdLook_groups.swf";
			case "profile":
				return "themes/stdLook_profile.swf";
			case "private_messages":
				return "themes/stdLook_private_messages.swf";
			case "themes":
				return "themes/stdLook_themes.swf";
			case "faq":
				return "themes/stdLook_faq.swf";
			case "chat":
				return "themes/stdLook_chat.swf";
			case "stats":
				return "themes/stdLook_stats.swf";
			case "about":
				return "themes/stdLook_about.swf";
			case "iconWarning":
				return "themes/stdLook_iconWarning.swf";
			case "iconInfo":
				return "themes/stdLook_iconInfo.swf";
			case "iconQuestion":
				return "themes/stdLook_iconQuestion.swf";
			case "iconError":
				return "themes/stdLook_iconError.swf";
			case "contentPreloader":
				return "themes/stdLook_contentPreloader.swf";
		}
		return null;
	}

	public function getCursorPath(strCursor:String):String
	{
		switch(strCursor)
		{
			case "move":
				return "themes/stdLook_move.swf";
			case "diagResize1":
				return "themes/stdLook_diagResize1.swf";
			case "horzResize":
				return "themes/stdLook_horzResize.swf";
			case "vertResize":
				return "themes/stdLook_vertResize.swf";
		}
		return null;
	}

	public function getCursors():Array
	{
		return new Array("diagResize1", "horzResize", "vertResize", "move");
	}

	//
	// IBaseLook implementation
	//
	public function getBorder(strBorder:String, data:Object):Number
	{
		var nBorderPos:Number = 0;
		switch(strBorder)
		{
			case "top": nBorderPos = 1; break;
			case "left": nBorderPos = 2; break;
			case "bottom": nBorderPos = 4; break;
			case "right": nBorderPos = 8; break;
		}
		switch(data.type)
		{
			case "btnTab":
				return strBorder == "right" ? 3 : (strBorder == "left" ? 1 : 0);
			case "main":
			case "titledIconButton":
			case "url":
			case "gallery":
				return 0;
			case "resizeTitle":
				return 1;
			default:
				return (data.border == undefined || data.border == null) || data.border & nBorderPos ? 1 : 0;
		}
		return 0;
	}

	public function getMargin(strMargin:String, data:Object):Number
	{
		var nMargin:Number = 0;
		var strType:String = data.type;
		switch(data.className)
		{
			case "WindowPaneTitle":
			case "PaneTitle":
				strType = "windowPaneTitle";
				break;
			case "WindowTitle":
				strType = "titleBtnBack";
				break;
			case "Label":
				switch(strType)
				{
					case "edit":
					case "textArea":
					case "comboBoxTitle":
					case "info":
						break;
					//case "titleBtnBack":
					//case "resizeTitle":
					default:
						strType = "label";
					break;
				}
				break;
		}
		switch(strType)
		{
			case "tabMark":
				nMargin = getBorder(strMargin, data);
				switch(strMargin)
				{
					case "left":
				 		nMargin += 9;
				 		break;
					case "top":
				 		nMargin += 1;
				 		break;
				}
				break;
			case "windowPaneTitle":
				nMargin = getBorder(strMargin, data);
				switch(strMargin)
				{
					case "left":
						nMargin += 10;
						break;
					case "right":
						nMargin += 2;
						break;
					case "top":
					case "bottom":
						nMargin += 1;
						break;
				}
				break;
			case "main":
				nMargin = 5;
				break;
			case "cell":
				nMargin = 2 + getBorder(strMargin, data);
				break;
			case "titleBtnBack":
			case "tabBack":
				nMargin = getBorder(strMargin, data);
				switch(strMargin)
				{
					case "right":
					case "left":
						nMargin += 2;
						break;
					case "top":
					case "bottom":
						nMargin += 1;
						break;
				}
				break;
			case "resizeTitle":
				nMargin = getBorder(strMargin, data) + (strMargin == "right" ? 18 : 2);
				break;
			case "edit":
			case "textArea":
			case "comboBoxTitle":
			case "info":
				nMargin = strMargin == "left" || strMargin == "right" ? 2 : 0;
				break;
			case "gallery":
				nMargin = 5 + getBorder(strMargin, data);
				break;
			case "label":
			case "titledIconButton":
			case "url":
				break;
			case "cellThread":
				nMargin = getBorder(strMargin, data) + 3;
				break;
			case "checkbox":
				nMargin = getBorder(strMargin, data) + (strMargin == "left" ? 14 : 0);
				break;

⌨️ 快捷键说明

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