四方向弹出的按钮列表

package helpers.pops
{
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	
	import mx.binding.utils.BindingUtils;
	import mx.collections.IList;
	import mx.controls.Button;
	import mx.core.UIComponent;
	import mx.events.FlexEvent;
	import mx.events.FlexMouseEvent;
	import mx.events.ListEvent;
	import mx.events.ResizeEvent;
	import mx.managers.PopUpManager;

	[Event(type="mx.events.ListEvent",name="change")]
	/**
	 * 四方向弹出的按钮列表 
	 * @author chzcb
	 * @email chzcb2008@gmail.com
	 * 
	 */
	public class PopUpBtnList extends Button
	{
		private var _datalist:IList;
		
		private var _labelField:String;
		
		private var _labelFunction:Function;
		
		/**
		 * up down left right
		 */
		private var _direction:String = "up";
		
		private var _selectIndex:int = -1;
		
		private var _selectItem:Object;
		
		private var _poplist:UIComponent;
		
		public function PopUpBtnList()
		{
			super();
			_poplist = new UIComponent();
			_poplist.addEventListener(FlexMouseEvent.MOUSE_DOWN_OUTSIDE,mousedownoutsideHandler);
			this.addEventListener(FlexEvent.CREATION_COMPLETE,createdHandler);
		}
		
		private function mousedownoutsideHandler(event:FlexMouseEvent):void
		{
			this._poplist.visible = false;
		}
		
		override protected function clickHandler(event:MouseEvent):void
		{
			super.clickHandler(event);
			this._poplist.visible = true;
			this.changePopPostion();
		}
		
		private function resizeHandler(event:Event):void
		{
			this.changePopPostion();
		}
		
		private function createdHandler(event:FlexEvent):void
		{
			this.systemManager.addEventListener(Event.RESIZE,resizeHandler);
			drawList();
		}
		
		protected function drawList():void
		{
			if(_datalist&&_datalist.length>0){
				var i:int = 0;
				for(;i<_datalist.length;i++){
					var btn:Button = new Button();
					btn.styleName = this.styleName;
					btn.width = this.width;
					btn.height = this.height;
					if(Boolean(_labelFunction)){
						btn.label = _labelFunction(_datalist.getItemAt(i));
					}
					else if(_labelField)
						btn.label = _datalist.getItemAt(i)[this._labelField];
					else
						btn.label = _datalist.getItemAt(i) as String;
					switch(this._direction)
					{
						case "up":
							btn.x = 0;
							btn.y = -(i+1)*btn.height;
							break;
						case "down":
							btn.x = 0;
							btn.y = (i+1)*btn.height;
							break;
						case "left":
							btn.x = -(i+1)*btn.width;
							btn.y = 0;
							break;
						case "right":
							btn.x = (i+1)*btn.width;
							btn.y = 0;
							break;
					}
					btn.data = _datalist.getItemAt(i);
					btn.addEventListener(MouseEvent.CLICK,clickItemHandler);
					this._poplist.addChild(btn);
					this._poplist.visible = false;
					PopUpManager.addPopUp(this._poplist,this);
					changePopPostion();
				}
				if(_selectIndex>-1){
					selectIndex = _selectIndex;
				}
			}
		}
		
		private function clickItemHandler(event:MouseEvent):void
		{
			var index:int = this._datalist.getItemIndex(event.target.data);
			this.selectIndex = index;
			this._poplist.visible = false;
			this.dispatchEvent(new ListEvent(ListEvent.CHANGE,false,false,-1,index));
		}
		
		private function changePopPostion():void
		{
			var curp:Point = new Point(this.x,this.y);
			var globalp:Point = this.parent.localToGlobal(curp);
			this._poplist.x = globalp.x;
			this._poplist.y = globalp.y;
		}
		
		
		public function set dataProvider(value:IList):void
		{
			if(value){
				this._datalist = value;
			}
		}
		
		public function get dataProvider():IList
		{
			return this._datalist;
		}
		
		public function set direction(value:String):void
		{
			_direction = value;
		}
		
		public function get direction():String
		{
			return _direction;
		}

		public function get selectIndex():int
		{
			return _selectIndex;
		}

		public function set selectIndex(value:int):void
		{
			_selectIndex = value;
			if(this._datalist){
				if(value>-1 && value<this._datalist.length)
				{
					_selectItem = this._datalist.getItemAt(value);
				}
				if(Boolean(_labelFunction!=null)){
					this.label = _labelFunction(_selectItem);
				}
				else if(_labelField)
					this.label = _selectItem[this._labelField];
				else
					this.label = _selectItem as String;
			}
		}

		public function get selectItem():Object
		{
			return _selectItem;
		}

		public function set selectItem(value:Object):void
		{
			var index:int = this._datalist.getItemIndex(value);
			if(index == -1){
				return;
			}
			_selectItem = value;
			_selectIndex = index;
			if(_labelField)
				this.label = _selectItem[this._labelField];
			else
				this.label = _selectItem as String;
		}

		public function get labelField():String
		{
			return _labelField;
		}

		public function set labelField(value:String):void
		{
			_labelField = value;
		}

		public function get labelFunction():Function
		{
			return _labelFunction;
		}

		public function set labelFunction(value:Function):void
		{
			_labelFunction = value;
		}

		
	}
}

早上花了两个小时写的,测试了下,还可以,具体的注释就不写了,一般人都能看得懂的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
驾驶室方向盘上的LIN通讯按钮是指一种用于车辆内部通信的技术。LIN(Local Interconnect Network)是一种成本低廉、低速度、短距离的串行通信总线系统,主要用于在车辆内部的模块之间进行简单的数据交换。 方向盘上的LIN通讯按钮通常用于与车辆的多功能显示屏或者仪表盘进行通信。通过按钮的操作,驾驶员可以进行一系列的操作,例如调整音量、切换功能菜单、接听电话等。这些操作将通过LIN总线发送给车辆内部的控制模块,然后由模块进行相应的功能控制。 在LIN通讯系统中,方向盘按钮充当了用户与车辆之间的接口角色。通过简单的按钮操作,用户可以轻松地控制车辆的各种功能。与其他更复杂的通讯系统相比,LIN通讯系统的优势之一是成本低廉,从而降低了车辆制造成本,特别适用于经济型轿车或者小型商用车。 需要注意的是,方向盘上的LIN通讯按钮是与车辆内部的LIN总线系统直接相连的。因此,如果使用不当或者现故障,可能会影响到车辆的电子系统运行。为了确保安全和可靠性,厂商在设计和生产过程中会采取相应的措施,例如提供电路保护、故障检测和防护功能。 总之,驾驶室方向盘上的LIN通讯按钮是一种用于车辆内部通信的简单、经济的技术。它允许驾驶员通过按钮操作来控制车辆的不同功能,提供了便利和舒适的驾驶体验。为了确保安全和可靠性,厂商会在设计生产过程中加入相应的保护和检测机制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值