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 条评论
登录 后参与评论

相关文章

来自专栏哲学驱动设计

P of EAA 总结

看了几遍了,就只在书上勾了下,也没什么总结。暂且先把关键内容摘抄如下: Domain Logic Patterns Transaction Script Org...

1835
来自专栏GIS讲堂

唐宋文学诗人分布展示

本文的数据是从搜韵获取而来的,地址为http://sou-yun.com/poetlife.html,为方便大家使用,将数据保存到了百度云盘,下载信息为:链接:...

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

Flash/Flex学习笔记(17):按键捕获

先来看简单的单个按键捕获: package { import flash.display.Sprite; import fl.controls.Label...

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

ExtJs学习笔记(2)_Basic GridPanel[基本网格]

这一节,将学习如何使用网络上最常见的UI控件_Grid 1.静态示例: 静态示例其实官方下载包里,就有sample,这里只贴出代码,后面的如何跟WCF结合,做出...

1949
来自专栏增长技术

PullToRefreshLayout

PullToRefreshLayout是一个用法同系统SwipeRefreshLayout可灵活自定义下拉刷新、上拉加载视图的Android库.

601
来自专栏Jerry的SAP技术分享

如何在ABAP里用函数式编程思想打印出非波拉契Fibonacci(数列)

在JavaScript里可以用ES6提供的FunctionGenerator这种黑科技来打印非波拉契数列,具体细节参考我这篇文章。

883
来自专栏林德熙的博客

WPF 如何在 WriteableBitmap 写文字

最近看到WPF 使用不安全代码快速从数组转 WriteableBitmap 可以快速从数组转 WriteableBitmap 所以就让他画一些元素,但是发现元素...

651
来自专栏编程之旅

iOS开发——多线程完成短信获取按钮倒计时

现在的APP应用中,用手机获取短信验证码是非常常见的一个功能,而往往要求的效果就是在按下获取验证码之后,验证码的按钮开始倒计时,例如30秒后重新获取。而我们如何...

1154
来自专栏iOSDevLog

《iOS UI 开发捷径 利用 Interface Builder 高效、优雅地开发 UI》 读书笔记第1章 Interface Bundle 概要第2章 使用 Interface Builder第3

3448
来自专栏后端之路

SpringBoot之内容协商器

背景 使用了restful的小伙伴对于导出这些需求本能就是拒绝的~破坏了restful的url的一致性【严格矫正 不是http json就是restful 很多...

4047

扫码关注云+社区