<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:flexlib="http://code.google.com/p/flexlib/"
creationComplete="init()" fontSize="12">
<mx:Script>
<![CDATA[
import flexlib.controls.tabBarClasses.SuperTab;
import flexlib.events.SuperTabEvent;
import mx.containers.dividedBoxClasses.BoxDivider;
import mx.controls.Alert;
import mx.controls.Button;
import mx.core.EventPriority;
import mx.events.FlexEvent;
private var tabMenu:ContextMenu;
private var close_cur:String="关闭当前页";
private var close_other:String="关闭其他页";
private var close_all:String="关闭所有页";
private var closeTabItem:ContextMenuItem;
private var closeOthersItem:ContextMenuItem;
private var closeAllItem:ContextMenuItem;
[Embed(source="../assets/home.png")]
private var home_icon:Class;
[Embed(source="../assets/document.png")]
private var app_icon:Class;
private function init():void{
this.initCompents();
this.addTabNavigator();
//延后执行
callLater(addTabMenu);
this.addGuiListeners();
}
//初始化某些组件
private function initCompents():void{
tabMenu = new ContextMenu();
closeTabItem = new ContextMenuItem(close_cur);
closeOthersItem = new ContextMenuItem(close_other);
closeAllItem = new ContextMenuItem(close_all);
tabMenu.hideBuiltInItems();
tabMenu.customItems.push(closeTabItem);
tabMenu.customItems.push(closeOthersItem);
tabMenu.customItems.push(closeAllItem);
//处理中间分隔条
var bdriver:BoxDivider=this.hdbox.getDividerAt(0);
bdriver.doubleClickEnabled=true;
bdriver.addEventListener(MouseEvent.DOUBLE_CLICK, maxsizeHandler);
}
//添加几个tab页
private function addTabNavigator():void{
for(var i:uint=0;i<5;i++ ){
var vbox:VBox=new VBox();
vbox.label="Tab"+i;
if(i==0){
vbox.label="首页";
vbox.icon=home_icon;
}else
vbox.icon=app_icon;
tabs.addChild(vbox);
}
}
//给tab页添加菜单
private function addTabMenu():void{
//设置首页不可关闭
this.tabs.setClosePolicyForTab(0,SuperTab.CLOSE_NEVER);
for(var i:uint=0;i<tabs.getChildren().length;i++){
var tabBtn:Button=tabs.getTabAt(i);
//添加双击tab页事件监听
tabBtn.addEventListener(MouseEvent.DOUBLE_CLICK,maxsizeHandler);
tabBtn.contextMenu=tabMenu;
}
}
private function addGuiListeners():void{
closeTabItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,tabRightMenuHandler);
closeOthersItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,tabRightMenuHandler);
closeAllItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,tabRightMenuHandler);
tabMenu.addEventListener(ContextMenuEvent.MENU_SELECT,tabMenuHandler);
this.tabs.addEventListener(SuperTabEvent.TAB_CLOSE,closeSuperTabHandler);
}
//取消双击tab页事件的监听
private function closeSuperTabHandler(ev:SuperTabEvent):void{
var tabIdx:Number = ev.tabIndex;
var tabBtn:Button=tabs.getTabAt(tabIdx);
tabBtn.removeEventListener(MouseEvent.DOUBLE_CLICK,maxsizeHandler);
}
//最大化
private function maxsizeHandler(ev:Event):void{
if(this.leftBox.percentWidth==0){
this.leftBox.percentWidth=20;
this.rightBox.percentWidth=80;
}else{
this.leftBox.percentWidth=0;
this.rightBox.percentWidth=100;
}
}
//处理tab右键关闭事件
private function tabRightMenuHandler(ev:ContextMenuEvent):void{
var cap:String = (ev.target as ContextMenuItem).caption;
var home:* = this.tabs.getChildAt(0);
var idx:int;
switch(cap){
case close_cur:
idx = this.tabs.selectedIndex;
if(idx >= 0)
this.tabs.removeChildAt(idx);
break;
case close_other:
var selected:* = this.tabs.selectedChild;
for each(var cnt:* in this.tabs.getChildren()){
if(cnt != selected && cnt != home){
this.tabs.removeChild(cnt);
}
}
break;
case close_all:
// this.tabs.removeAllChildren();
for each(var tab:* in this.tabs.getChildren()){
if(tab != home)
this.tabs.removeChild(tab);
}
break;
}
}
private function tabMenuHandler(ev:ContextMenuEvent):void{
var tag:DisplayObject=ev.mouseTarget as DisplayObject;
var idx:uint=this.tabs.selectedIndex;
if(tag){
//下面这句非常犀利,发送一个单击事件
tag.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
closeTabItem.visible = true;
closeOthersItem.visible = true;
closeAllItem.visible = true;
if(idx==0)
closeTabItem.enabled = false;
else
closeTabItem.enabled = true;
if(this.tabs.numChildren==1 || (this.tabs.numChildren==2 && idx>0))
closeOthersItem.enabled = false;
else
closeOthersItem.enabled = true;
if(this.tabs.numChildren==1 && idx==0)
closeAllItem.enabled = false;
else
closeAllItem.enabled = true;
return;
}
closeTabItem.visible = false;
closeOthersItem.visible = false;
closeAllItem.visible = false;
}
]]>
</mx:Script>
<mx:VBox width="100%" height="100%">
<mx:Spacer height="20" />
<mx:HDividedBox id="hdbox" width="100%" height="80%" liveDragging="true">
<mx:VBox id="leftBox" width="20%" height="100%">
<mx:Tree width="100%" height="100%"/>
</mx:VBox>
<mx:VBox id="rightBox" width="80%" height="100%">
<flexlib:SuperTabNavigator id="tabs" width="100%" height="100%" creationPolicy="all" paddingTop="1">
</flexlib:SuperTabNavigator>
</mx:VBox>
</mx:HDividedBox>
</mx:VBox>
</mx:Application>
分享到:
相关推荐
Flexlib 2.5与Flex 4的兼容性使得开发者可以利用这些新特性,比如皮肤和样式系统,来实现复杂的应用设计。 2. **多样化组件**: Flexlib 2.5包含了多个自定义组件,这些组件在标准Flex组件库中可能无法找到: - *...
4. **实例应用**:提供的实例可以帮助我们看到如何在实际项目中使用Flexlib组件。这些示例可能包括各种功能的演示,如动态数据绑定、动画效果、用户交互等,有助于快速上手并掌握组件的用法。 5. **性能优化**:...
4. **事件处理**: 除了Flex内置的事件处理机制,Flexlib可能包含了额外的事件监听器和事件类型,使得事件管理更加灵活和强大。 5. **国际化和本地化支持**: 对于大型应用,国际化和本地化是必不可少的。Flexlib可能...
NULL 博文链接:https://toeo.iteye.com/blog/644341
1. 源代码:Flexlib库的AS3源代码,开发者可以查看并学习其实现细节。 2. 示例项目:展示如何在实际应用中使用Flexlib组件的示例项目,帮助快速上手。 3. 文档:包括API参考文档和用户指南,解释如何使用库中的各个...
4. **易用性和性能**:尽管FlexLib引入了Web开发的思路,但它是为iOS原生平台优化的,因此在性能上与传统方法相当,同时提供了更好的开发体验。 5. **社区支持**:作为开源项目,FlexLib拥有活跃的社区支持,开发者...
4. 国际化支持:对于多语言应用,Flexlib.swc提供了强大的本地化和国际化支持,使得应用可以轻松适应不同地区的语言环境。 三、使用方法 要将Flexlib.swc集成到项目中,开发者需要将该库文件添加到Flex Builder或...
这对于开发者来说是一份宝贵的资源,他们可以直接查看和研究组件的实现细节,甚至可以根据需要进行修改和扩展。源代码的学习有助于开发者深入理解组件的工作原理,从而更好地利用它们来满足项目需求。 Flexlib 2.5...
例如,你可以使用flexlib的Accordion组件来实现以下功能: 1. 自定义样式:通过CSS样式表定制Accordion的颜色、边框、背景等视觉元素。 2. 动画效果:调整折叠和展开的动画速度,或者替换为其他过渡效果。 3. 多选...
4. 媒体播放组件:支持音频和视频播放,可能具备播放控制、媒体源选择等功能,适合构建多媒体应用。 5. 拖放组件:允许用户在界面上进行拖放操作,常用于文件管理或数据组织应用。 6. 表格和列表增强:提供更灵活...
Flexlib开源类库是专为Flex 4设计的一个强大工具集,它提供了许多高级功能和组件,以增强Flex开发者的编程体验。这个类库的主要目标是简化开发过程,提高代码的可重用性和效率,同时也增加了应用程序的灵活性。...
`src`目录则包含了FlexLib的源代码,这对于那些希望深入研究组件实现细节或进行定制化修改的开发者来说非常有价值。源代码可以让开发者理解组件的设计思路,学习优秀的编程实践,并可能启发他们开发出更具创新性的...
在flexlib的imagemap上依据数值进行着色(负荷图)
flexlib 关于flex的地图热点时间的lib包
Flexlib是Google发布的一个开源组件库,专门为Adobe Flex开发者提供了一系列功能丰富的组件和工具,以增强Flex应用程序的用户体验和开发效率。Flex是一种基于ActionScript 3.0的开放源代码框架,用于构建富互联网...
超强的flex扩展组件,让你有意外的惊喜 flexlib2.4
4. **事件与通信**:flexlib扩展了Flex的事件处理机制,提供了一些自定义事件类。此外,它还支持AMF(Action Message Format)通信协议,使得与服务器间的数据交换更加高效。 5. **国际化与本地化**:flexlib支持多...
出色的Flex开源组件库FlexLib, 高质量的开源Flex UI组件库项目
修改MDIWindow.as文件的 onWindowMove 添加两个属性 只有在 windowManager.enforceBoundaries =false时候可用 1. floatInCanvas 是否停靠 2.floatSize 停靠边界露出部分的宽度或者高度 默认为 30px ...