Here is the code for the custom dropdown component.
/**
* @file Sample.fla
* @author Abhishek Kumar
*/
import com.engine.CDropdown;
import flash.display.MovieClip;
var cb:CDropdown = new CDropdown(dropdown_mc, onclick);
cb.attachListeners();
function onclick(mc:MovieClip):void
{
trace(mc.name);
}
The pseudo code of application (Sample.fla) design architecture.
{
movieclip: 'dropdown_mc'
{
movieclip: 'controller'
{
textfield: 'caption',
frames: [up, over, down]
}
movieclip: 'dropdown'
{
movieclip: 'item0'
{
textfield: 'caption',
movieclip: 'selected',
frames: [up, over, down]
}
movieclip: 'item1'
{
textfield: 'caption',
movieclip: 'selected',
frames: [up, over, down]
}
movieclip: 'item2'
{
textfield: 'caption',
movieclip: 'selected',
frames: [up, over, down]
}
movieclip: 'item3'
{
textfield: 'caption',
movieclip: 'selected',
frames: [up, over, down]
}
}
}
}
The source code of the component library.
/**
* @file Dropdown.as
* @author Abhishek Kumar
*/
package com.engine
{
import flash.display.MovieClip;
public class CDropdown
{
private var container:MovieClip;
private var proceed:Function;
private var controller:CButton;
private var dropdown:CList;
private var isopen:Boolean;
public function CDropdown(mc:MovieClip, fn:Function)
{
container = mc;
proceed = fn;
initialize();
}
private function initialize():void
{
isopen = false;
controller = new CButton(container.controller, onCick_controller);
dropdown = new CList(container.dropdown, onClick_dropdown, 4);
dropdown.hide();
}
public function attachListeners():void
{
controller.attachListeners();
}
public function detachListeners():void
{
controller.detachListeners();
}
private function onCick_controller(mc:MovieClip):void
{
if (isopen)
{
dropdown.hide();
dropdown.detachListeners();
}
else
{
dropdown.attachListeners();
dropdown.show();
}
isopen = !isopen;
}
private function onClick_dropdown(mc:MovieClip):void
{
proceed(mc);
}
}
}
/**
* @file CList.as
* @author Abhishek Kumar
*/
package com.engine
{
import flash.display.MovieClip;
public class CList
{
private var container:MovieClip;
private var proceed:Function;
private var items:Array;
private var itemcount:int;
public function CList(mc:MovieClip, fn:Function, icount:int)
{
container = mc;
proceed = fn;
itemcount = icount;
initialize();
}
private function initialize():void
{
items = [];
for (var i:int = 0; i < itemcount; i++)
{
if(container['item' + i].getChildByName('selected') != null)
{
container['item' + i].selected.visible = false;
}
items[i] = new CButton(container['item' + i], onClick);
}
}
public function attachListeners():void
{
for (var i:int = 0; i < itemcount; i++)
{
CButton(items[i]).attachListeners();
}
}
public function detachListeners():void
{
for (var i:int = 0; i < itemcount; i++)
{
CButton(items[i]).detachListeners();
}
}
private function onClick(mc:MovieClip):void
{
for (var i:int = 0; i < itemcount; i++)
{
if(container['item' + i].getChildByName('selected') != null)
{
container['item' + i].selected.visible = (mc.name == 'item' + i);
}
}
proceed(mc);
}
public function show():void
{
container.visible = true;
}
public function hide():void
{
container.visible = false;
}
}
}
/**
* @file CButton.as
* @author Abhishek Kumar
*/
package com.engine
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
public class CButton
{
private var container:MovieClip;
private var proceed:Function;
public function CButton(mc:MovieClip, fn:Function)
{
container = mc;
proceed = fn;
initialize();
}
private function initialize():void
{
container.gotoAndStop('up');
container.buttonMode = true;
container.mouseChildren = false;
}
public function attachListeners():void
{
container.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
container.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
container.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
container.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
}
public function detachListeners():void
{
container.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
container.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
container.removeEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
container.removeEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
}
private function onMouseUp(me:MouseEvent):void
{
container.gotoAndStop('up');
proceed(me.target);
}
private function onMouseDown(me:MouseEvent):void
{
container.gotoAndStop('down');
}
private function onMouseOver(me:MouseEvent):void
{
container.gotoAndStop('over');
}
private function onMouseOut(me:MouseEvent):void
{
container.gotoAndStop('up');
}
public function show():void
{
container.visible = true;
}
public function hide():void
{
container.visible = false;
}
}
}
Damn, why you don't publish the sources?!
ReplyDelete