ext-neptune-debug.js 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924
  1. /*
  2. Ext JS 4.1 - JavaScript Library
  3. Copyright (c) 2006-2012, Sencha Inc.
  4. All rights reserved.
  5. licensing@sencha.com
  6. http://www.sencha.com/license
  7. Open Source License
  8. ------------------------------------------------------------------------------------------
  9. This version of Ext JS is licensed under the terms of the Open Source GPL 3.0 license.
  10. http://www.gnu.org/licenses/gpl.html
  11. There are several FLOSS exceptions available for use with this release for
  12. open source applications that are distributed under a license other than GPL.
  13. * Open Source License Exception for Applications
  14. http://www.sencha.com/products/floss-exception.php
  15. * Open Source License Exception for Development
  16. http://www.sencha.com/products/ux-exception.php
  17. Alternate Licensing
  18. ------------------------------------------------------------------------------------------
  19. Commercial and OEM Licenses are available for an alternate download of Ext JS.
  20. This is the appropriate option if you are creating proprietary applications and you are
  21. not prepared to distribute and share the source code of your application under the
  22. GPL v3 license. Please visit http://www.sencha.com/license for more details.
  23. --
  24. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT OF THIRD-PARTY INTELLECTUAL PROPERTY RIGHTS. See the GNU General Public License for more details.
  25. */
  26. /*
  27. Ext JS 4.1 - JavaScript Library
  28. Copyright (c) 2006-2012, Sencha Inc.
  29. All rights reserved.
  30. licensing@sencha.com
  31. http://www.sencha.com/license
  32. Open Source License
  33. ------------------------------------------------------------------------------------------
  34. This version of Ext JS is licensed under the terms of the Open Source GPL 3.0 license.
  35. http://www.gnu.org/licenses/gpl.html
  36. There are several FLOSS exceptions available for use with this release for
  37. open source applications that are distributed under a license other than GPL.
  38. * Open Source License Exception for Applications
  39. http://www.sencha.com/products/floss-exception.php
  40. * Open Source License Exception for Development
  41. http://www.sencha.com/products/ux-exception.php
  42. Alternate Licensing
  43. ------------------------------------------------------------------------------------------
  44. Commercial and OEM Licenses are available for an alternate download of Ext JS.
  45. This is the appropriate option if you are creating proprietary applications and you are
  46. not prepared to distribute and share the source code of your application under the
  47. GPL v3 license. Please visit http://www.sencha.com/license for more details.
  48. --
  49. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT OF THIRD-PARTY INTELLECTUAL PROPERTY RIGHTS. See the GNU General Public License for more details.
  50. */
  51. /*
  52. Ext JS 4.1 - JavaScript Library
  53. Copyright (c) 2006-2012, Sencha Inc.
  54. All rights reserved.
  55. licensing@sencha.com
  56. http://www.sencha.com/license
  57. Open Source License
  58. ------------------------------------------------------------------------------------------
  59. This version of Ext JS is licensed under the terms of the Open Source GPL 3.0 license.
  60. http://www.gnu.org/licenses/gpl.html
  61. There are several FLOSS exceptions available for use with this release for
  62. open source applications that are distributed under a license other than GPL.
  63. * Open Source License Exception for Applications
  64. http://www.sencha.com/products/floss-exception.php
  65. * Open Source License Exception for Development
  66. http://www.sencha.com/products/ux-exception.php
  67. Alternate Licensing
  68. ------------------------------------------------------------------------------------------
  69. Commercial and OEM Licenses are available for an alternate download of Ext JS.
  70. This is the appropriate option if you are creating proprietary applications and you are
  71. not prepared to distribute and share the source code of your application under the
  72. GPL v3 license. Please visit http://www.sencha.com/license for more details.
  73. --
  74. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT OF THIRD-PARTY INTELLECTUAL PROPERTY RIGHTS. See the GNU General Public License for more details.
  75. */
  76. /*
  77. This file is part of Ext JS 4.1
  78. Copyright (c) 2011-2012 Sencha Inc
  79. Contact: http://www.sencha.com/contact
  80. GNU General Public License Usage
  81. This file may be used under the terms of the GNU General Public License version 3.0 as
  82. published by the Free Software Foundation and appearing in the file LICENSE included in the
  83. packaging of this file.
  84. Please review the following information to ensure the GNU General Public License version 3.0
  85. requirements will be met: http://www.gnu.org/copyleft/gpl.html.
  86. If you are unsure which license is appropriate for your use, please contact the sales department
  87. at http://www.sencha.com/contact.
  88. Build date: 2012-07-04 21:11:01 (65ff594cd80b9bad45df640c22cc0adb52c95a7b)
  89. */
  90. Ext.define('Ext.Neptune.button.Button', {
  91. override: 'Ext.button.Button',
  92. setScale: function(scale) {
  93. this.callParent(arguments);
  94. this.removeCls(this.allowedScales);
  95. this.addCls(scale);
  96. }
  97. });
  98. Ext.define('Ext.Neptune.tab.Bar', {
  99. override: 'Ext.tab.Bar',
  100. onAdd: function(tab) {
  101. tab.position = this.dock;
  102. tab.ui = this.ui;
  103. this.callParent(arguments);
  104. }
  105. });
  106. Ext.define('Ext.Neptune.container.ButtonGroup', {
  107. override: 'Ext.container.ButtonGroup',
  108. beforeRender: function() {
  109. var me = this;
  110. me.callParent();
  111. if (me.header) {
  112. delete me.header.items.items[0].flex;
  113. }
  114. me.callParent(arguments);
  115. }
  116. });
  117. Ext.define('Ext.Neptune.layout.component.field.Trigger', {
  118. override: 'Ext.layout.component.field.Trigger',
  119. sizeBodyContents: function(width, height, ownerContext) {
  120. var me = this,
  121. owner = me.owner,
  122. triggerWidth = owner.getTriggerWidth();
  123. if (owner.hideTrigger || owner.readOnly || triggerWidth > 0) {
  124. ownerContext.inputContext.setProp('width', width, true);
  125. }
  126. }
  127. });
  128. Ext.define('Ext.Neptune.menu.Menu', {
  129. override: 'Ext.menu.Menu',
  130. baseCls: Ext.baseCSSPrefix + 'menu',
  131. initComponent: function() {
  132. var me = this;
  133. me.addEvents(
  134. 'click',
  135. 'mouseenter',
  136. 'mouseleave',
  137. 'mouseover'
  138. );
  139. Ext.menu.Manager.register(me);
  140. if (me.plain) {
  141. me.cls = Ext.baseCSSPrefix + 'menu-plain';
  142. }
  143. if (!me.layout) {
  144. me.layout = {
  145. type: 'vbox',
  146. align: 'stretchmax',
  147. overflowHandler: 'Scroller'
  148. };
  149. if (!me.floating) {
  150. me.layout.align = 'stretch';
  151. }
  152. }
  153. if (me.floating === false && me.initialConfig.hidden !== true) {
  154. me.hidden = false;
  155. }
  156. me.callParent(arguments);
  157. me.on('beforeshow', function() {
  158. var hasItems = !!me.items.length;
  159. if (hasItems && me.rendered) {
  160. me.el.setStyle('visibility', null);
  161. }
  162. return hasItems;
  163. });
  164. }
  165. });
  166. Ext.define('Ext.Neptune.panel.Tool', {
  167. override: 'Ext.panel.Tool',
  168. renderTpl: ['<div id="{id}-toolEl" class="{baseCls}-{type}" role="presentation"></div>']
  169. });
  170. Ext.define('Ext.Neptune.window.MessageBox', {
  171. override: 'Ext.window.MessageBox',
  172. initComponent: function() {
  173. var me = this,
  174. i, button;
  175. me.title = '&#160;';
  176. me.topContainer = new Ext.container.Container({
  177. anchor: '100%',
  178. style: {
  179. padding: '10px',
  180. overflow: 'hidden'
  181. },
  182. items: [
  183. me.iconComponent = new Ext.Component({
  184. cls: me.baseCls + '-icon',
  185. width: 50,
  186. height: me.iconHeight,
  187. style: {
  188. 'float': 'left'
  189. }
  190. }),
  191. me.promptContainer = new Ext.container.Container({
  192. layout: {
  193. type: 'anchor'
  194. },
  195. items: [
  196. me.msg = new Ext.Component({
  197. autoEl: { tag: 'span' },
  198. cls: me.baseCls + '-text'
  199. }),
  200. me.textField = new Ext.form.field.Text({
  201. anchor: '100%',
  202. enableKeyEvents: true,
  203. listeners: {
  204. keydown: me.onPromptKey,
  205. scope: me
  206. }
  207. }),
  208. me.textArea = new Ext.form.field.TextArea({
  209. anchor: '100%',
  210. height: 75
  211. })
  212. ]
  213. })
  214. ]
  215. });
  216. me.progressBar = new Ext.ProgressBar({
  217. anchor: '-10',
  218. style: 'margin-left:10px'
  219. });
  220. me.items = [me.topContainer, me.progressBar];
  221. me.msgButtons = [];
  222. for (i = 0; i < 4; i++) {
  223. button = me.makeButton(i);
  224. me.msgButtons[button.itemId] = button;
  225. me.msgButtons.push(button);
  226. }
  227. me.bottomTb = new Ext.toolbar.Toolbar({
  228. ui: 'footer',
  229. dock: 'bottom',
  230. layout: {
  231. pack: 'end'
  232. },
  233. items: [
  234. me.msgButtons[0],
  235. me.msgButtons[1],
  236. me.msgButtons[2],
  237. me.msgButtons[3]
  238. ]
  239. });
  240. me.dockedItems = [me.bottomTb];
  241. me.callParent();
  242. }
  243. });
  244. Ext.define('Ext.Neptune.grid.column.Column', {
  245. override: 'Ext.grid.column.Column',
  246. initComponent: function() {
  247. var me = this,
  248. i,
  249. len,
  250. item;
  251. if (Ext.isDefined(me.header)) {
  252. me.text = me.header;
  253. delete me.header;
  254. }
  255. if (me.flex) {
  256. me.minWidth = me.minWidth || Ext.grid.plugin.HeaderResizer.prototype.minColWidth;
  257. }
  258. if (!me.triStateSort) {
  259. me.possibleSortStates.length = 2;
  260. }
  261. if (Ext.isDefined(me.columns)) {
  262. me.isGroupHeader = true;
  263. if (me.dataIndex) {
  264. Ext.Error.raise('Ext.grid.column.Column: Group header may not accept a dataIndex');
  265. }
  266. if ((me.width && me.width !== Ext.grid.header.Container.prototype.defaultWidth) || me.flex) {
  267. Ext.Error.raise('Ext.grid.column.Column: Group header does not support setting explicit widths or flexs. The group header width is calculated by the sum of its children.');
  268. }
  269. me.items = me.columns;
  270. delete me.columns;
  271. delete me.flex;
  272. delete me.width;
  273. me.cls = (me.cls||'') + ' ' + Ext.baseCSSPrefix + 'group-header';
  274. me.sortable = false;
  275. me.resizable = false;
  276. me.align = 'center';
  277. } else {
  278. me.isContainer = false;
  279. }
  280. me.addCls(Ext.baseCSSPrefix + 'column-header-align-' + me.align);
  281. if (me.sortable) {
  282. me.addCls(Ext.baseCSSPrefix + 'column-header-sortable');
  283. }
  284. Ext.grid.column.Column.superclass.initComponent.call(this, arguments);
  285. me.on({
  286. element: 'el',
  287. click: me.onElClick,
  288. dblclick: me.onElDblClick,
  289. scope: me
  290. });
  291. me.on({
  292. element: 'titleEl',
  293. mouseenter: me.onTitleMouseOver,
  294. mouseleave: me.onTitleMouseOut,
  295. scope: me
  296. });
  297. }
  298. });
  299. Ext.define('Ext.Neptune.Shadow', {
  300. override: 'Ext.Shadow',
  301. offset: 3
  302. });
  303. Ext.define('Ext.Neptune.layout.container.Accordion', {
  304. override: 'Ext.layout.container.Accordion',
  305. targetCls: Ext.baseCSSPrefix + 'box-layout-ct ' + Ext.baseCSSPrefix + 'accordion-body',
  306. collapseFirst : true,
  307. beforeRenderItems: function (items) {
  308. var me = this,
  309. ln = items.length,
  310. i, comp;
  311. for (i = 0; i < ln; i++) {
  312. comp = items[i];
  313. if (!comp.rendered) {
  314. comp.on({
  315. beforerender: me.onChildPanelRender,
  316. single: true
  317. });
  318. if (me.collapseFirst) {
  319. comp.collapseFirst = me.collapseFirst;
  320. }
  321. if (me.hideCollapseTool) {
  322. comp.hideCollapseTool = me.hideCollapseTool;
  323. comp.titleCollapse = true;
  324. }
  325. else if (me.titleCollapse) {
  326. comp.titleCollapse = me.titleCollapse;
  327. }
  328. delete comp.hideHeader;
  329. delete comp.width;
  330. comp.collapsible = true;
  331. comp.title = comp.title || '&#160;';
  332. comp.toolsFirst = true;
  333. comp.addBodyCls(Ext.baseCSSPrefix + 'accordion-body');
  334. if (me.fill) {
  335. if (me.expandedItem !== undefined) {
  336. comp.collapsed = true;
  337. }
  338. else if (comp.hasOwnProperty('collapsed') && comp.collapsed === false) {
  339. me.expandedItem = i;
  340. } else {
  341. comp.collapsed = true;
  342. }
  343. me.owner.mon(comp, {
  344. show: me.onComponentShow,
  345. beforeexpand: me.onComponentExpand,
  346. beforecollapse: me.onComponentCollapse,
  347. scope: me
  348. });
  349. } else {
  350. comp.animCollapse = me.initialAnimate;
  351. comp.autoScroll = false;
  352. }
  353. comp.border = comp.collapsed;
  354. }
  355. }
  356. if (ln && me.expandedItem === undefined) {
  357. me.expandedItem = 0;
  358. comp = items[0];
  359. comp.collapsed = comp.border = false;
  360. }
  361. }
  362. });
  363. Ext.define('Ext.Neptune.panel.Header', {
  364. override: 'Ext.panel.Header',
  365. toolsFirst: false,
  366. initComponent: function() {
  367. var me = this,
  368. ruleStyle,
  369. rule,
  370. style,
  371. ui,
  372. tempEl;
  373. me.indicateDragCls = me.baseCls + '-draggable';
  374. me.title = me.title || '&#160;';
  375. me.tools = me.tools || [];
  376. me.items = me.items || [];
  377. me.orientation = me.orientation || 'horizontal';
  378. me.dock = (me.dock) ? me.dock : (me.orientation == 'horizontal') ? 'top' : 'left';
  379. me.addClsWithUI([me.orientation, me.dock]);
  380. if (me.indicateDrag) {
  381. me.addCls(me.indicateDragCls);
  382. }
  383. if (!Ext.isEmpty(me.iconCls)) {
  384. me.initIconCmp();
  385. me.items.push(me.iconCmp);
  386. }
  387. if (me.orientation == 'vertical') {
  388. me.layout = {
  389. type : 'vbox',
  390. align: 'center'
  391. };
  392. me.textConfig = {
  393. width: 15,
  394. cls: me.baseCls + '-text',
  395. type: 'text',
  396. text: me.title,
  397. rotate: {
  398. degrees: 90
  399. }
  400. };
  401. ui = me.ui;
  402. if (Ext.isArray(ui)) {
  403. ui = ui[0];
  404. }
  405. ruleStyle = '.' + me.baseCls + '-text-' + ui;
  406. if (Ext.scopeResetCSS) {
  407. ruleStyle = '.' + Ext.baseCSSPrefix + 'reset ' + ruleStyle;
  408. }
  409. rule = Ext.util.CSS.getRule(ruleStyle);
  410. if (rule) {
  411. style = rule.style;
  412. }else {
  413. style = (tempEl = Ext.getBody().createChild({style: 'position:absolute', cls: me.baseCls + '-text-' + ui})).getStyles('fontFamily', 'fontWeight', 'fontSize', 'color');
  414. tempEl.remove();
  415. }
  416. if (style) {
  417. Ext.apply(me.textConfig, {
  418. 'font-family': style.fontFamily,
  419. 'font-weight': style.fontWeight,
  420. 'font-size': style.fontSize,
  421. fill: style.color
  422. });
  423. }
  424. me.titleCmp = new Ext.draw.Component({
  425. ariaRole : 'heading',
  426. focusable : false,
  427. viewBox : false,
  428. flex : 1,
  429. id : me.id + '_hd',
  430. autoSize : true,
  431. margins : '5 0 0 0',
  432. items : [ me.textConfig ],
  433. xhooks: {
  434. setSize: function (width) {
  435. this.callParent([width]);
  436. }
  437. },
  438. childEls : [
  439. { name: 'textEl', select: '.' + me.baseCls + '-text' }
  440. ]
  441. });
  442. } else {
  443. me.layout = {
  444. type : 'hbox',
  445. align: 'middle'
  446. };
  447. me.titleCmp = new Ext.Component({
  448. xtype : 'component',
  449. ariaRole : 'heading',
  450. focusable : false,
  451. noWrap : true,
  452. flex : 1,
  453. id : me.id + '_hd',
  454. cls : me.baseCls + '-text-container',
  455. renderTpl : me.getTpl('headingTpl'),
  456. renderData: {
  457. title: me.title,
  458. cls : me.baseCls,
  459. ui : me.ui
  460. },
  461. childEls : ['textEl']
  462. });
  463. }
  464. if (me.toolsFirst) {
  465. me.addCls(me.baseCls + '-tools-first');
  466. me.items = me.items.concat(me.tools);
  467. me.items.push(me.titleCmp);
  468. } else {
  469. me.items.push(me.titleCmp);
  470. me.items = me.items.concat(me.tools);
  471. }
  472. Ext.panel.Header.superclass.initComponent.call(this, arguments);
  473. me.on({
  474. click: me.onClick,
  475. mouseover: me.onMouseOver,
  476. mouseout : me.onMouseOut,
  477. mousedown: me.onMouseDown,
  478. mouseup: me.onMouseUp,
  479. element: 'el',
  480. scope: me
  481. });
  482. },
  483. onRender: function() {
  484. var me = this;
  485. me.doc = Ext.getDoc();
  486. me.callParent(arguments);
  487. },
  488. onMouseOver: function() {
  489. this.addCls(this.baseCls + '-over');
  490. },
  491. onMouseOut: function() {
  492. this.removeCls(this.baseCls + '-over');
  493. this.removeCls(this.baseCls + '-pressed');
  494. },
  495. onMouseDown: function() {
  496. this.addCls(this.baseCls + '-pressed');
  497. },
  498. onMouseUp: function(e) {
  499. this.removeCls(this.baseCls + '-pressed');
  500. }
  501. });
  502. Ext.define('Ext.Neptune.panel.Panel', {
  503. override: 'Ext.panel.Panel',
  504. toolsFirst: false,
  505. updateHeader: function(force) {
  506. var me = this,
  507. header = me.header,
  508. title = me.title,
  509. tools = me.tools;
  510. if (!me.preventHeader && (force || title || (tools && tools.length))) {
  511. if (header) {
  512. header.show();
  513. } else {
  514. header = me.header = new Ext.panel.Header({
  515. title : title,
  516. orientation : (me.headerPosition == 'left' || me.headerPosition == 'right') ? 'vertical' : 'horizontal',
  517. dock : me.headerPosition || 'top',
  518. textCls : me.headerTextCls,
  519. iconCls : me.iconCls,
  520. baseCls : me.baseCls + '-header',
  521. tools : tools,
  522. ui : me.ui,
  523. id : me.id + '_header',
  524. indicateDrag: me.draggable,
  525. toolsFirst : me.toolsFirst,
  526. border : me.border,
  527. frame : me.frame && me.frameHeader,
  528. ignoreParentFrame : me.frame || me.overlapHeader,
  529. ignoreBorderManagement: me.frame || me.ignoreHeaderBorderManagement,
  530. listeners : me.collapsible && me.titleCollapse ? {
  531. click: me.toggleCollapse,
  532. scope: me
  533. } : null
  534. });
  535. me.addDocked(header, 0);
  536. me.tools = header.tools;
  537. }
  538. me.initHeaderAria();
  539. me.addCls(me.baseCls + '-hasheader-' + me.headerPosition);
  540. } else if (header) {
  541. header.hide();
  542. me.removeCls(me.baseCls + '-hasheader-' + me.headerPosition);
  543. }
  544. }
  545. });
  546. Ext.define('Ext.Neptune.resizer.Splitter', {
  547. override: 'Ext.resizer.Splitter',
  548. onRender: function() {
  549. var me = this;
  550. me.callParent(arguments);
  551. if (me.performCollapse !== false) {
  552. if (me.renderData.collapsible) {
  553. me.mon(me.collapseEl, 'click', me.toggleTargetCmp, me);
  554. }
  555. if (me.collapseOnDblClick) {
  556. me.mon(me.el, 'dblclick', me.toggleTargetCmp, me);
  557. }
  558. }
  559. me.mon(me.getCollapseTarget(), {
  560. collapse: me.onTargetCollapse,
  561. expand: me.onTargetExpand,
  562. scope: me
  563. });
  564. me.mon(me.el, 'mouseover', me.onMouseOver, me);
  565. me.mon(me.el, 'mouseout', me.onMouseOut, me);
  566. me.el.unselectable();
  567. me.tracker = Ext.create(me.getTrackerConfig());
  568. me.relayEvents(me.tracker, [ 'beforedragstart', 'dragstart', 'dragend' ]);
  569. },
  570. onMouseOver: function() {
  571. this.el.addCls(this.baseCls + '-over');
  572. },
  573. onMouseOut: function() {
  574. this.el.removeCls(this.baseCls + '-over');
  575. }
  576. });
  577. Ext.define('Ext.Neptune.tree.Panel', {
  578. override: 'Ext.tree.Panel',
  579. initComponent: function() {
  580. var me = this,
  581. cls = [me.treeCls],
  582. view;
  583. if (me.useArrows) {
  584. cls.push(Ext.baseCSSPrefix + 'tree-arrows');
  585. } else {
  586. cls.push(Ext.baseCSSPrefix + 'tree-no-arrows');
  587. }
  588. if (me.lines) {
  589. cls.push(Ext.baseCSSPrefix + 'tree-lines');
  590. } else {
  591. cls.push(Ext.baseCSSPrefix + 'tree-no-lines');
  592. }
  593. if (Ext.isString(me.store)) {
  594. me.store = Ext.StoreMgr.lookup(me.store);
  595. } else if (!me.store || Ext.isObject(me.store) && !me.store.isStore) {
  596. me.store = new Ext.data.TreeStore(Ext.apply({}, me.store || {}, {
  597. root: me.root,
  598. fields: me.fields,
  599. model: me.model,
  600. folderSort: me.folderSort
  601. }));
  602. } else if (me.root) {
  603. me.store = Ext.data.StoreManager.lookup(me.store);
  604. me.store.setRootNode(me.root);
  605. if (me.folderSort !== undefined) {
  606. me.store.folderSort = me.folderSort;
  607. me.store.sort();
  608. }
  609. }
  610. me.viewConfig = Ext.applyIf(me.viewConfig || {}, {
  611. rootVisible: me.rootVisible,
  612. animate: me.enableAnimations,
  613. singleExpand: me.singleExpand,
  614. node: me.store.getRootNode(),
  615. hideHeaders: me.hideHeaders
  616. });
  617. me.mon(me.store, {
  618. scope: me,
  619. rootchange: me.onRootChange,
  620. clear: me.onClear
  621. });
  622. me.relayEvents(me.store, [
  623. 'beforeload',
  624. 'load'
  625. ]);
  626. me.store.on({
  627. append: me.createRelayer('itemappend'),
  628. remove: me.createRelayer('itemremove'),
  629. move: me.createRelayer('itemmove'),
  630. insert: me.createRelayer('iteminsert'),
  631. beforeappend: me.createRelayer('beforeitemappend'),
  632. beforeremove: me.createRelayer('beforeitemremove'),
  633. beforemove: me.createRelayer('beforeitemmove'),
  634. beforeinsert: me.createRelayer('beforeiteminsert'),
  635. expand: me.createRelayer('itemexpand'),
  636. collapse: me.createRelayer('itemcollapse'),
  637. beforeexpand: me.createRelayer('beforeitemexpand'),
  638. beforecollapse: me.createRelayer('beforeitemcollapse')
  639. });
  640. if (!me.columns) {
  641. if (me.initialConfig.hideHeaders === undefined) {
  642. me.hideHeaders = true;
  643. }
  644. me.autoWidth = true;
  645. me.addCls(Ext.baseCSSPrefix + 'autowidth-table');
  646. me.columns = [{
  647. xtype : 'treecolumn',
  648. text : 'Name',
  649. width : Ext.isIE6 ? null : 10000,
  650. dataIndex: me.displayField
  651. }];
  652. }
  653. if (me.cls) {
  654. cls.push(me.cls);
  655. }
  656. me.cls = cls.join(' ');
  657. Ext.tree.Panel.superclass.initComponent.apply(me, arguments);
  658. view = me.getView();
  659. if (Ext.isIE6 && me.autoWidth) {
  660. view.afterRender = Ext.Function.createSequence(view.afterRender, function() {
  661. this.stretcher = view.el.down('th').createChild({style:"height:0px;width:" + (this.getWidth() - Ext.getScrollbarSize().width) + "px"});
  662. });
  663. view.afterComponentLayout = Ext.Function.createSequence(view.afterComponentLayout, function() {
  664. this.stretcher.setWidth((this.getWidth() - Ext.getScrollbarSize().width));
  665. });
  666. }
  667. me.relayEvents(view, [
  668. 'checkchange',
  669. 'afteritemexpand',
  670. 'afteritemcollapse'
  671. ]);
  672. if (!view.rootVisible && !me.getRootNode()) {
  673. me.setRootNode({
  674. expanded: true
  675. });
  676. }
  677. }
  678. });