/**
* Copyright hemingway ( http://wonderfl.net/user/hemingway )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/38xh
*/
package {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
[SWF(frameRate = 60, width = 800, height = 600)]
public class WLD_WindowInterface extends Sprite
{
internal var backGround:Sprite = new Sprite();
internal var foreGround:Sprite = new Sprite();
internal var btnAddWind:Button = new Button(WLD_WindowInterface(this));
//internal var testWindow:Window = new Window(120, 90, 400, 300); now handled by Button class
public var displayArray:Array = new Array();
public var displayLimit:Number = 20;
public var dockedCount :Number = 0;
public function WLD_WindowInterface()
{
backGround.graphics.lineStyle (1);
backGround.graphics.drawRect (0, 0, 799, 599);
foreGround.graphics.lineStyle (1);
foreGround.graphics.drawRect (0, 572, 799, 0);
_init();
}
public function _init(displayList:Array = null, instance:Number = 0) :void
{
removeAll();
switch (instance)
{
case 0:
addChild(btnAddWind);
if (displayList != null)
{for(var i:Number = 0; i < displayList.length; i++) {addChild(displayList[i])}}
break;
case 1:
break;
case 2:
break;
}
addChild(foreGround);
addChild(backGround);
}
public function removeAll() :void
{
while ( numChildren )
{ removeChildAt(0) }
}
}
}
import flash.display.*;
import flash.events.*;
import flash.utils.*;
import flash.text.*;
import flash.geom.*;
class Window extends Sprite
{
/**********************
* CONSTRUCTION *
**********************/
internal var WI :WLD_WindowInterface;
internal var BT :Button;
protected var _x :Number;
protected var _y :Number;
protected var _width :Number;
protected var _height :Number;
protected var _alpha :Number;
protected var _docked :Boolean;
internal var windowHandle :Sprite = new Sprite();
internal var handleHeight :Number = 26;
internal var handleAlpha :Number;
internal var handleText :DisplayText;
internal var windowExit :Sprite = new Sprite();
internal var windowSize :Sprite = new Sprite();
internal var windowHide :Sprite = new Sprite();
internal var btnOffset :Point = new Point();
internal var firstPoint :Point = null;
internal var currentPoint :Point = null;
internal var calcPoint :Point = null;
internal var mouseObject :Object;
/**
* Window constructor
* @param xPos : initial X position
* @param yPos : initial Y position
* @param w : initial width
* @param h : initial height
* @param alpha : initial transparency
*/
public function Window(windowInterface:WLD_WindowInterface, button:Button, xPos:Number = 0, yPos:Number = 0, w:Number = 400, h:Number = 300, transparency:Number = 0.6)
{
addEventListener(Event.ADDED_TO_STAGE, addedToStage);
WI = windowInterface;
BT = button;
_x = xPos;
_y = yPos;
_width = w;
_height = h;
_alpha = transparency;
handleAlpha = (_alpha < 0.75) ? (_alpha + 0.25) : 1;
this.addChild(windowHandle);
handleText = new DisplayText(windowHandle, false, "$testWindow", "Helvetica", 0xCFCFCF);
btnOffset.x = (_width * 0.82);
btnOffset.y = (handleHeight * 0.87);
windowHandle.addChild(handleText);
windowHandle.addChild(windowHide);
windowHandle.addChild(windowSize);
windowHandle.addChild(windowExit);
}
/**********************
* DRAW *
**********************/
public function _init() :void
{
graphics.clear();
windowHandle.graphics.clear();
windowHide.graphics.clear();
windowSize.graphics.clear();
windowExit.graphics.clear();
graphics.lineStyle (1, 0, _alpha);
graphics.beginFill (0xE5F9FF, _alpha);
graphics.drawRect (_x, _y, _width, _height);
graphics.endFill ();
windowHandle.graphics.beginFill (0x666666, 0.9);
windowHandle.graphics.drawRect (_x, (_y - handleHeight), (_width + 1), handleHeight);
windowHandle.graphics.endFill ();
handleText.x = (_x + 12);
handleText.y = (_y - btnOffset.y);
windowHide.graphics.beginFill (0xFFFFCC, handleAlpha);
windowHide.graphics.drawRect (_x + (btnOffset.x), _y - (btnOffset.y), 20, 20);
windowHide.graphics.endFill ();
windowSize.graphics.beginFill (0xCCFFFF, handleAlpha);
windowSize.graphics.drawRect (_x + (btnOffset.x + (_width * 0.06)), _y - (btnOffset.y), 20, 20);
windowSize.graphics.endFill ();
windowExit.graphics.beginFill (0xFFCCCC, handleAlpha);
windowExit.graphics.drawRect (_x + (btnOffset.x + (_width * 0.12)), _y - (btnOffset.y), 20, 20);
windowExit.graphics.endFill ();
}
/**********************
* CODE *
**********************/
public function removeWindow() :void
{
for (var i:Number = 0; i < (WI.displayArray.length); i++)
{ if (WI.displayArray[i] == this) { WI.displayArray.splice(i, 1) }}
WI._init(WI.displayArray);
}
public function bringToFront() :void
{
WI.setChildIndex(this, (WI.numChildren - 2));
}
/**********************
* EVENTS *
**********************/
public function addedToStage($e:Event) :void
{
_init();
addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
public function onMouseOver($e:MouseEvent) :void
{
stage.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
switch ($e.target)
{
case windowHide:
windowHide.alpha = 0.75;
break;
case windowSize:
windowSize.alpha = 0.75;
break;
case windowExit:
windowExit.alpha = 0.75;
break;
}
}
public function onMouseOut($e:MouseEvent) :void
{
if (parent)
{
stage.removeEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
windowExit.alpha = 1;
windowSize.alpha = 1;
windowHide.alpha = 1;
}
}
public function onMouseDown($e:MouseEvent) :void
{
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
mouseObject = $e.target;
firstPoint = new Point($e.stageX, $e.stageY);
switch ($e.target)
{
case windowHandle:
if (_docked)
{
_docked = false;
--WI.dockedCount;
}
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
bringToFront();
break;
}
}
public function onMouseMove($e:MouseEvent) :void
{
if (($e.stageX > 0) && ($e.stageY > 0) && ($e.stageX < 800) && ($e.stageY < 600))
{
currentPoint = new Point($e.stageX, $e.stageY);
calcPoint = currentPoint.subtract(firstPoint);
x = (x + calcPoint.x);
y = (y + calcPoint.y);
firstPoint = currentPoint;
}
}
public function onMouseUp($e:MouseEvent) :void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
switch($e.target)
{
case mouseObject:
switch (mouseObject)
{
case windowHide:
_docked = true;
windowHandle.parent.alpha = 0;
windowHide.visible = false;
windowSize.visible = false;
width *= 0.33;
windowExit.x -= width * 1.78;
x = 28 + (134 * (WI.dockedCount));
y = 599;
++WI.dockedCount;
break;
case windowSize:
windowHandle.parent.alpha = 0.6;
break;
case windowExit:
if (_docked)
{
_docked = false;
--WI.dockedCount;
}
removeWindow();
break;
}
break;
}
}
public function onEnterFrame($e:Event) :void
{
}
/**********************
* GETTERS/SETTERS *
**********************/
public override function get x() :Number
{ return _x }
public override function get y() :Number
{ return _y }
public override function get width() :Number
{ return _width }
public override function get height() :Number
{ return _height }
public override function get alpha() :Number
{ return _alpha }
public function get docked() :Boolean
{ return _docked }
public override function set x(value:Number) :void
{
_x = value;
_invalidate();
}
public override function set y(value:Number) :void
{
_y = value;
_invalidate();
}
public override function set width(value:Number) :void
{
_width = value;
_invalidate();
}
public override function set height(value:Number) :void
{
_height = value;
_invalidate();
}
public override function set alpha(value:Number) :void
{
_alpha = value;
_invalidate();
}
/**********************
* INVALIDATION *
**********************/
private function _invalidate() :void
{
if (!hasEventListener(Event.ENTER_FRAME) )
{ addEventListener(Event.ENTER_FRAME, _invalidateCallback) }
}
private function _invalidateCallback($e:Event) :void
{
removeEventListener(Event.ENTER_FRAME, _invalidateCallback);
_init();
}
public function refresh() :void
{ _invalidate() }
}
class Button extends Sprite
{
/**********************
* CONSTRUCTION *
**********************/
internal var WI :WLD_WindowInterface;
private var buttonCross :Sprite;
protected var _x :Number;
protected var _y :Number;
protected var _width :Number;
protected var _height :Number;
protected var _alpha :Number;
internal var mouseObject :Object;
internal var testWindow :Window;
/**
* Button constructor
* @param xPos : initial X position
* @param yPos : initial Y position
* @param w : initial width
* @param h : initial height
* @param alpha : initial transparency
*/
public function Button(windowInterface:WLD_WindowInterface, xPos:Number = 2, yPos:Number = 574, w:Number = 24, h:Number = 24, transparency:Number = 0.7)
{
addEventListener(Event.ADDED_TO_STAGE, addedToStage);
WI = windowInterface;
_x = xPos;
_y = yPos;
_width = w;
_height = h;
_alpha = transparency;
}
/**********************
* DRAW *
**********************/
public function _init() :void
{
graphics.lineStyle (2, 0x666666, 1);
graphics.beginFill (0xE5F9FF, _alpha);
graphics.drawRect (_x, _y, _width, _height);
graphics.endFill ();
}
/**********************
* CODE *
**********************/
public function addWindow() :void
{
if (WI.displayArray.length < WI.displayLimit)
{
testWindow = new Window(WI, this, 0 + (WI.displayArray.length * 26), 26 + (WI.displayArray.length * 26));
WI.displayArray.push(testWindow);
WI._init(WI.displayArray);
}
}
/**********************
* EVENTS *
**********************/
public function addedToStage($e:Event) :void
{
_init();
addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
public function onMouseDown($e:MouseEvent) :void
{
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
mouseObject = $e.target;
mouseObject.alpha = (_alpha / 2);
}
public function onMouseUp($e:MouseEvent) :void
{
if ($e.target == mouseObject)
{
addWindow();
}
mouseObject.alpha = _alpha;
}
}
class DisplayText extends TextField
{
/**********************
* CONSTRUCTION *
**********************/
private var _text :String;
private var _textF :String;
private var _color :Number;
private var _size :Number;
private var _x :Number;
private var _y :Number;
private var _bold :Boolean;
internal var _frameCount :Boolean;
internal var _frameNum :Number;
internal var first :uint = getTimer();
public function DisplayText (
parent:Object, frameCount :Boolean= false,
text :String = "", textF :String = "Helvetica",
color :Number = 0 , size :Number = 12,
x :Number = 0 , y :Number = 0,
bold :Boolean = false
)
{
addEventListener(Event.ADDED_TO_STAGE, addedToStage);
_text = text;
_textF = textF;
_size = size;
_color = color;
if (x == 0 && y == 0)
{
_x = (parent.x + 12);
_y = (parent.y + 5);
}else{
_x = x;
_y = y;
}
_bold = bold;
_frameCount = frameCount;
mouseEnabled = false;
selectable = false;
draw();
}
/**********************
* DRAW *
**********************/
public function draw() :void
{
var textFormat:TextFormat = new TextFormat(_textF, _size, _color, _bold);
text = _text;
x = _x;
y = _y;
setTextFormat(textFormat);
width = (4 + textWidth);
height = (4 + textHeight);
}
/**********************
* CODE *
**********************/
public function frameCount() :void
{
var last :uint = getTimer();
var delta :uint = (last - first);
if (delta > 1000)
{
var fps :uint = (_frameNum / delta) * 1000;
text = ("FPS: " + fps);
_frameNum = 0;
first = last;
}
}
/**********************
* EVENTS *
**********************/
public function addedToStage($e:Event) :void
{
if ( _frameCount )
{ stage.addEventListener(Event.ENTER_FRAME, onEnterFrame) }
}
public function onEnterFrame($e:Event) :void
{
_frameNum ++;
frameCount();
}
}