/**
* Copyright hemingway ( http://wonderfl.net/user/hemingway )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/zEEv
*/
package
{
import com.bit101.components.*;
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.ui.*;
[SWF(width = 800, height = 600, frameRate = 60)]
public class OperaTabs extends Sprite
{
protected var lineSprite :Sprite = new Sprite;
protected var containerSprite :Sprite = new Sprite;
protected var innerContainerSprite :Sprite = new Sprite;
protected var tabSprite :Array = new Array;
internal var innerContainerTop :Number = 90;
internal var stageLabel :Label;
public function OperaTabs()
{
stage.align = StageAlign.TOP;
stage.scaleMode = StageScaleMode.SHOW_ALL;
lineSprite.addEventListener(Event.ADDED_TO_STAGE, addedToStage);
stage.addChild(containerSprite);
for ( var i:int = 0; i < 4; i++ )
{ stage.addChild(tabSprite[i] = new Sprite) }
stage.addChild(innerContainerSprite);
stage.addChild(lineSprite);
stage.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
init();
}
public function init() :void
{
lineSprite.graphics.lineStyle (6, 0xCCD9FF, 0.75);
lineSprite.graphics.moveTo (42, 90);
lineSprite.graphics.lineTo (758, 90);
lineSprite.alpha = 0;
containerSprite.graphics.lineStyle (2, 0, 0.8);
containerSprite.graphics.beginFill (0xFFFFFF, 0.8);
containerSprite.graphics.drawRect (4, 3, 792, 594);
containerSprite.graphics.endFill ();
for ( var i:int = 0; i < 4; i ++ )
{
tabSprite[i].graphics.lineStyle (2, 0, 0.8);
tabSprite[i].graphics.beginFill (0xFFFFFF, 0.8);
tabSprite[i].graphics.drawRect (40 + (132 * (i)), (innerContainerTop - 28), 126, 28);
tabSprite[i].graphics.endFill ();
}
innerContainerSprite.graphics.lineStyle (2, 0, 0.8);
innerContainerSprite.graphics.beginFill (0xFFFFFF, 0.8);
innerContainerSprite.graphics.drawRect (40, innerContainerTop, 720, 480);
innerContainerSprite.graphics.endFill ();
stageLabel = new Label(stage, 40, 18, "OperaTabs: Main container & tab UI behavior\n of the current Opera web browser");
stageLabel = new Label(stage, 520, 18, "TODO: Coordinate-bound drag n' drop for tabs\n Images for tab expansion 'event'");
}
public function uiTrigger($e:MouseEvent = null) :void
{
if ((mouseX > 40 && mouseX < 760) && (mouseY > (innerContainerTop - 2) && mouseY < (innerContainerTop + 10)))
{
lineSprite.alpha = 1;
Mouse.cursor = MouseCursor.HAND;
if ( $e.type == MouseEvent.MOUSE_DOWN )
{ stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove) }
}else{
lineSprite.alpha = 0;
Mouse.cursor = MouseCursor.ARROW;
}
}
public function adjustContentSize() :void
{
if ( mouseY > 90 && mouseY < 180 )
{
lineSprite.y = mouseY - 90;
innerContainerTop = mouseY;
innerContainerSprite.graphics.clear ();
innerContainerSprite.graphics.lineStyle (2, 0, 0.8);
innerContainerSprite.graphics.beginFill (0xFFFFFF, 0.8);
innerContainerSprite.graphics.drawRect (40, innerContainerTop, 720, 480 - innerContainerTop + 90);
innerContainerSprite.graphics.endFill ();
for (var i:int = 0; i < 4; i++)
{
if (innerContainerTop > 110)
{
tabSprite[i].graphics.clear ();
tabSprite[i].graphics.lineStyle (2, 0, 0.8);
tabSprite[i].graphics.beginFill (0xFFFFFF, 0.8);
tabSprite[i].graphics.drawRect (40 + (132 * (i)), (90 - 28), 126, (innerContainerTop - 70));
tabSprite[i].graphics.endFill ();
}else{
tabSprite[i].graphics.clear ();
tabSprite[i].graphics.lineStyle (2, 0, 0.8);
tabSprite[i].graphics.beginFill (0xFFFFFF, 0.8);
tabSprite[i].graphics.drawRect (40 + (132 * (i)), (90 - 28), 126, (innerContainerTop + 28 - 90));
tabSprite[i].graphics.endFill ();
}
}
}
else if ( mouseY < 90 )
{
lineSprite.y = 0
innerContainerTop = 90
innerContainerSprite.graphics.clear ();
innerContainerSprite.graphics.lineStyle (2, 0, 0.8);
innerContainerSprite.graphics.beginFill (0xFFFFFF, 0.8);
innerContainerSprite.graphics.drawRect (40, innerContainerTop, 720, 480 - innerContainerTop + 90);
innerContainerSprite.graphics.endFill ();
for (var j:int = 0; j < 4; j++)
{
tabSprite[j].graphics.clear ();
tabSprite[j].graphics.lineStyle (2, 0, 0.8);
tabSprite[j].graphics.beginFill (0xFFFFFF, 0.8);
tabSprite[j].graphics.drawRect (40 + (132 * (j)), (90 - 28), 126, (innerContainerTop + 28 - 90));
tabSprite[j].graphics.endFill ();
}
}
else if ( mouseY > 180 )
{
lineSprite.y = 90
innerContainerTop = 180
innerContainerSprite.graphics.clear ();
innerContainerSprite.graphics.lineStyle (2, 0, 0.8);
innerContainerSprite.graphics.beginFill (0xFFFFFF, 0.8);
innerContainerSprite.graphics.drawRect (40, innerContainerTop, 720, 480 - innerContainerTop + 90);
innerContainerSprite.graphics.endFill ();
for (var k:int = 0; k < 4; k++)
{
tabSprite[k].graphics.clear ();
tabSprite[k].graphics.lineStyle (2, 0, 0.8);
tabSprite[k].graphics.beginFill (0xFFFFFF, 0.8);
tabSprite[k].graphics.drawRect (40 + (132 * (k)), (90 - 28), 126, (innerContainerTop - 70));
tabSprite[k].graphics.endFill ();
}
}
}
public function onMouseDown($e:MouseEvent) :void
{
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
switch ($e.target)
{
case tabSprite:
break;
case innerContainerSprite || containerSprite:
break;
}
uiTrigger($e);
}
public function onMouseUp($e:MouseEvent) :void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}
public function onMouseMove($e:MouseEvent) :void
{
adjustContentSize();
}
public function onMouseOver($e:MouseEvent) :void
{
stage.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
switch ($e.target)
{
case (new function tS() :Object {for (var i:int = 0; i < 4; i++){if($e.target == tabSprite[i]){return tabSprite[i]}}return null}):
$e.target.alpha = 0.5;
break;
}
}
public function onMouseOut($e:MouseEvent) :void
{
switch ($e.target)
{
case (new function tS() :Object {for (var i:int = 0; i < 4; i++){if($e.target == tabSprite[i]){return tabSprite[i]}}return null}):
$e.target.alpha = 1;
break;
case innerContainerSprite:
lineSprite.alpha = 0;
break;
case containerSprite:
break;
}
}
public function addedToStage($e:Event) :void
{
lineSprite.removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
stage.addEventListener(Event.ENTER_FRAME, frameLoop);
}
public function frameLoop($e:Event) :void
{
uiTrigger();
}
}
}