FineUI控件集合

FineUI(开源版)基于 ExtJS 的开源 ASP.NET 控件库。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using System.Collections.ObjectModel;
 5 using System.Web.UI;
 6 using System.Collections;
 7 
 8 namespace FineUI
 9 {
10     /// <summary>
11     /// 控件集合,继承自Collection<T>
12     /// </summary>
13     public class BaseCollection<T> : Collection<T> where T : ControlBase
14     {
15         private ControlBase _parent;
16         private string _groupName;
17 
18         /// <summary>
19         /// 构造函数
20         /// </summary>
21         /// <param name="parentControl">父控件实例</param>
22         public BaseCollection(ControlBase parentControl)
23         {
24             _parent = parentControl;
25             _groupName = Guid.NewGuid().ToString();
26         }
27 
28         /// <summary>
29         /// 向集合中插入一个元素
30         /// </summary>
31         /// <param name="index"></param>
32         /// <param name="item"></param>
33         protected override void InsertItem(int index, T item)
34         {
35             item.CollectionGroupName = _groupName;
36             item.RenderWrapperNode = false;
37 
38             int startIndex = GetStartIndex();
39             _parent.Controls.AddAt(startIndex + index, item);
40 
41             base.InsertItem(index, item);
42         }
43 
44         /// <summary>
45         /// 删除集合中的一个元素
46         /// </summary>
47         /// <param name="index"></param>
48         protected override void RemoveItem(int index)
49         {
50             int startIndex = GetStartIndex();
51             _parent.Controls.RemoveAt(startIndex + index);
52 
53             base.RemoveItem(index);
54         }
55 
56         /// <summary>
57         /// 清空集合
58         /// </summary>
59         protected override void ClearItems()
60         {
61             int startIndex = GetStartIndex();
62             // We should only remove this collection related controls
63             // Note we must loop from the last element(Count-1) to the first one(0)
64             for (int i = startIndex + Count - 1; i >= startIndex; i--)
65             {
66                 _parent.Controls.RemoveAt(i);
67             }
68 
69             base.ClearItems();
70         }
71 
72 
73         /// <summary>
74         /// 获取类型 T 在父控件子集中的开始位置
75         /// </summary>
76         /// <returns></returns>
77         private int GetStartIndex()
78         {
79             int startIndex = 0;
80 
81             foreach (Control control in _parent.Controls)
82             {
83                 if (control is ControlBase && (control as ControlBase).CollectionGroupName == _groupName)
84                 {
85                     break;
86                 }
87                 startIndex++;
88             }
89 
90             return startIndex;
91         }
92 
93     }
94 }
  1 function onReady() {
  2     var btnExpandAll = Ext.getCmp(IDS.btnExpandAll);
  3     var btnCollapseAll = Ext.getCmp(IDS.btnCollapseAll);
  4     var mainMenu = Ext.getCmp(IDS.mainMenu);
  5     var mainTabStrip = Ext.getCmp(IDS.mainTabStrip);
  6     var windowSourceCode = Ext.getCmp(IDS.windowSourceCode);
  7 
  8     function getExpandedPanel() {
  9         var panel = null;
 10         mainMenu.items.each(function (item) {
 11             if (!item.collapsed) {
 12                 panel = item;
 13             }
 14         });
 15         return panel;
 16     }
 17 
 18     // 点击全部展开按钮
 19     btnExpandAll.on('click', function () {
 20         if (IDS.menuType == "menu") {
 21             mainMenu.expandAll();
 22         } else {
 23             var expandedPanel = getExpandedPanel();
 24             if (expandedPanel) {
 25                 expandedPanel.items.itemAt(0).expandAll();
 26             }
 27         }
 28     });
 29 
 30     // 点击全部折叠按钮
 31     btnCollapseAll.on('click', function () {
 32         if (IDS.menuType == "menu") {
 33             mainMenu.collapseAll();
 34         } else {
 35             var expandedPanel = getExpandedPanel();
 36             if (expandedPanel) {
 37                 expandedPanel.items.itemAt(0).collapseAll();
 38             }
 39         }
 40     });
 41 
 42     function createToolbar() {
 43 
 44         // 由工具栏上按钮获得当前标签页中的iframe节点
 45         function getCurrentIframeNode(button) {
 46             // 注意:button.ownerCt 是工具栏,button.ownerCt.ownerCt 就是当前激活的标签页。
 47             return Ext.DomQuery.selectNode('iframe', button.ownerCt.ownerCt.el.dom);
 48         }
 49 
 50         // 动态创建按钮
 51         var sourcecodeButton = new Ext.Button({
 52             text: "源代码",
 53             type: "button",
 54             cls: "x-btn-text-icon",
 55             icon: "./icon/page_white_code.png",
 56             listeners: {
 57                 click: function (button, e) {
 58                     windowSourceCode.x_show('./common/source.aspx?files=' + getCurrentIframeNode(button).attributes['src'].value, '源代码');
 59                     e.stopEvent();
 60                 }
 61             }
 62         });
 63 
 64         var openNewWindowButton = new Ext.Button({
 65             text: '新标签页中打开',
 66             type: "button",
 67             cls: "x-btn-text-icon",
 68             icon: "./icon/tab_go.png",
 69             listeners: {
 70                 click: function (button, e) {
 71                     window.open(getCurrentIframeNode(button).src, "_blank");
 72                     e.stopEvent();
 73                 }
 74             }
 75         });
 76 
 77         var refreshButton = new Ext.Button({
 78             text: '刷新',
 79             type: "button",
 80             cls: "x-btn-text-icon",
 81             icon: "./icon/reload.png",
 82             listeners: {
 83                 click: function (button, e) {
 84                     getCurrentIframeNode(button).contentWindow.location.reload(); //.replace(href);
 85                     e.stopEvent();
 86                 }
 87             }
 88         });
 89 
 90         return new Ext.Toolbar({
 91             items: ['->', sourcecodeButton, '-', refreshButton, '-', openNewWindowButton]
 92         });
 93     }
 94 
 95 
 96     // 初始化主框架中的树(或者Accordion+Tree)和选项卡互动,以及地址栏的更新
 97     // 1. treeMenu, 主框架中的树控件实例,或者内嵌树控件的手风琴控件实例
 98     // 2. mainTabStrip, 主框架中的选项卡控件实例
 99     // 3. tbarCallback, 在每个选项卡上创建工具栏的回调函数,如果不需要选项卡工具栏,可以设置此值为null
100     // 4. updateLocationHash, 切换选项卡时是否在top.location.hash记录当前页面的地址
101     X.util.initTreeTabStrip(mainMenu, mainTabStrip, createToolbar, true);
102 
103 
104     // 公开添加示例标签页的方法
105     window.addExampleTab = function (id, url, text, icon) {
106         X.util.addMainTab(mainTabStrip, id, url, text, icon);
107     };
108 
109     window.removeActiveTab = function () {
110         var activeTab = mainTabStrip.getActiveTab();
111         mainTabStrip.removeTab(activeTab.id);
112     };
113 
114 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏柠檬先生

jQuery 效果使用

.hide()   隐藏匹配的元素。   .hide()     这个方法不接受任何参数。   .hide([duration][,comp...

2029
来自专栏iOS开发随笔

iOS去除导航栏和tabbar的1px横线

1194
来自专栏码农阿宇

利用GDI+在Winfrom绘制验证码

string yzm; private void yangzhengma() { Bitma...

2887
来自专栏菩提树下的杨过

Silverlight:Mouse Avoiding 躲避鼠标效果

昨晚在一国外博客上(从域名后缀pl上猜想应该是波兰)看到这种效果(Mouse Avoid 躲避鼠标),是基于Flash/AS3开发的,这个示例把弹性运动,摩擦力...

2017
来自专栏菩提树下的杨过

Silverlight:利用Panel实现自定义布局

虽然Silverlight提供了几种基本的布局方式,比如Canvas,Grid,StackPanel,Border...,但有时候可能仍然会觉得不够用。 这时候...

2089
来自专栏海说

java swing 添加 jcheckbox复选框

总体上而言,Java Swing编程有两大特点:麻烦、效果差。        麻烦是说由于设计器的使用不方便(如果您希望使用窗体设计器通过快速拖拽控件建立您的J...

2520
来自专栏web编程技术分享

【H5 音乐播放实例】第五节 音轨制作

833
来自专栏Flutter&Dart

Flutter之DataTable使用详解

1572
来自专栏Java后端技术

HTML标签汇总

651
来自专栏互联网杂技

JavaScript 常用方法总结

经常使用的 JS 方法,今天记下,以便以后查询 /* 手机类型判断 */ var BrowserInfo = { userAgent: navigator.us...

3405

扫码关注云+社区