OperaTabs

by hemingway
@line(s):
192 & 202...

although in this context I now prefer the enumeration function over logical or, but is there a particular reason I am only allowed to filter to the first object when making case declarations like this?

case (extraneousObject || extraneousRelatedObject):

Do case declarations not have support for negation like this?

thanks in advance
♥0 | Line 189 | Modified 2012-10-31 02:19:34 | MIT License
play

ActionScript3 source code

/**
 * 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();
        }
    }
}