FineUI控件集合

2018-07-03 16:38:54 浏览数 (1)

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

代码语言:javascript复制
 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 }
代码语言:javascript复制
  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 人点赞