]> git.proxmox.com Git - extjs.git/blame - extjs/packages/ux/classic/src/Explorer.js
add extjs 6.0.1 sources
[extjs.git] / extjs / packages / ux / classic / src / Explorer.js
CommitLineData
6527f429
DM
1/**\r
2 * An explorer component for navigating hierarchical content. Consists of a breadcrumb bar\r
3 * at the top, tree navigation on the left, and a center panel which displays the contents\r
4 * of a given node.\r
5 */\r
6Ext.define('Ext.ux.Explorer', {\r
7 extend: 'Ext.panel.Panel',\r
8 xtype: 'explorer',\r
9 requires: [\r
10 'Ext.layout.container.Border',\r
11 'Ext.toolbar.Breadcrumb',\r
12 'Ext.tree.Panel'\r
13 ],\r
14\r
15 config: {\r
16 /**\r
17 * @cfg {Object} breadcrumb\r
18 * Configuration object for the breadcrumb toolbar\r
19 */\r
20 breadcrumb: {\r
21 dock: 'top',\r
22 xtype: 'breadcrumb',\r
23 reference: 'breadcrumb'\r
24 },\r
25\r
26 /**\r
27 * @cfg {Object} contentView\r
28 * Configuration object for the "content" data view\r
29 */\r
30 contentView: {\r
31 xtype: 'dataview',\r
32 reference: 'contentView',\r
33 region: 'center',\r
34 cls: Ext.baseCSSPrefix + 'explorer-view',\r
35 itemSelector: '.' + Ext.baseCSSPrefix + 'explorer-item',\r
36 tpl:\r
37 '<tpl for=".">' +\r
38 '<div class="' + Ext.baseCSSPrefix + 'explorer-item">' +\r
39 '<div class="{iconCls}">' +\r
40 '<div class="' + Ext.baseCSSPrefix + 'explorer-node-icon' +\r
41 '{[values.leaf ? " ' + Ext.baseCSSPrefix + 'explorer-leaf-icon' + '" : ""]}' + '">' +\r
42 '</div>' +\r
43 '<div class="' + Ext.baseCSSPrefix + 'explorer-item-text">{text}</div>' +\r
44 '</div>' +\r
45 '</div>' +\r
46 '</tpl>'\r
47 },\r
48\r
49 /**\r
50 * @cfg {Ext.data.TreeStore} store\r
51 * The TreeStore to use as the data source\r
52 */\r
53 store: null,\r
54\r
55 /**\r
56 * @cfg {Object} tree\r
57 * Configuration object for the tree\r
58 */\r
59 tree: {\r
60 xtype: 'treepanel',\r
61 reference: 'tree',\r
62 region: 'west',\r
63 width: 200\r
64 }\r
65 },\r
66\r
67 renderConfig: {\r
68 /**\r
69 * @cfg {Ext.data.TreeModel} selection\r
70 * The selected node\r
71 * @accessor\r
72 */\r
73 selection: null\r
74 },\r
75\r
76 layout: 'border',\r
77 referenceHolder: true,\r
78 defaultListenerScope: true,\r
79 cls: Ext.baseCSSPrefix + 'explorer',\r
80\r
81 initComponent: function() {\r
82 var me = this,\r
83 store = me.getStore();\r
84\r
85 //<debug>\r
86 if (!store) {\r
87 Ext.raise('Ext.ux.Explorer requires a store.');\r
88 }\r
89 //</debug>\r
90\r
91 me.dockedItems = [ me.getBreadcrumb() ];\r
92\r
93 me.items = [ me.getTree(), me.getContentView() ];\r
94\r
95 me.callParent();\r
96 },\r
97\r
98 applyBreadcrumb: function(breadcrumb) {\r
99 var store = this.getStore();\r
100\r
101 breadcrumb = Ext.create(Ext.apply({\r
102 store: store,\r
103 selection: store.getRoot()\r
104 }, breadcrumb));\r
105\r
106 breadcrumb.on('selectionchange', '_onBreadcrumbSelectionChange', this);\r
107\r
108 return breadcrumb;\r
109 },\r
110\r
111 applyContentView: function(contentView) {\r
112 /**\r
113 * @property {Ext.data.Store} contentStore\r
114 * @private\r
115 * The backing store for the content view\r
116 */\r
117 var contentStore = this.contentStore = new Ext.data.Store({\r
118 model: this.getStore().model\r
119 });\r
120\r
121 contentView = Ext.create(Ext.apply({\r
122 store: contentStore\r
123 }, contentView));\r
124\r
125 return contentView;\r
126 },\r
127\r
128 applyTree: function(tree) {\r
129 tree = Ext.create(Ext.apply({\r
130 store: this.getStore()\r
131 }, tree));\r
132\r
133 tree.on('selectionchange', '_onTreeSelectionChange', this);\r
134\r
135 return tree;\r
136 },\r
137\r
138 updateSelection: function(node) {\r
139 var me = this,\r
140 refs = me.getReferences(),\r
141 breadcrumb = refs.breadcrumb,\r
142 tree = refs.tree,\r
143 treeSelectionModel = tree.getSelectionModel(),\r
144 contentStore = me.contentStore,\r
145 parentNode, treeView;\r
146\r
147 if (breadcrumb.getSelection() !== node) {\r
148 breadcrumb.setSelection(node);\r
149 }\r
150\r
151 if (treeSelectionModel.getSelection()[0] !== node) {\r
152 treeSelectionModel.select([node]);\r
153 parentNode = node.parentNode;\r
154 if (parentNode) {\r
155 parentNode.expand();\r
156 }\r
157 treeView = tree.getView();\r
158 treeView.scrollRowIntoView(treeView.getRow(node));\r
159 }\r
160\r
161 contentStore.removeAll();\r
162 contentStore.add(node.hasChildNodes() ? node.childNodes : [node]);\r
163 },\r
164\r
165 updateStore: function(store) {\r
166 this.getBreadcrumb().setStore(store);\r
167 },\r
168\r
169 privates: {\r
170 /**\r
171 * Handles the tree's selectionchange event\r
172 * @private\r
173 * @param {Ext.tree.Panel} tree\r
174 * @param {Ext.data.TreeModel[]} selection\r
175 */\r
176 _onTreeSelectionChange: function(tree, selection) {\r
177 this.setSelection(selection[0]);\r
178 },\r
179\r
180 /**\r
181 * Handles the breadcrumb bar's selectionchange event\r
182 */\r
183 _onBreadcrumbSelectionChange: function(breadcrumb, selection) {\r
184 this.setSelection(selection);\r
185 }\r
186 }\r
187});\r