📄 stdlook.as
字号:
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 + -