LockingView.html 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>The source code</title>
  6. <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
  7. <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
  8. <style type="text/css">
  9. .highlight { display: block; background-color: #ddd; }
  10. </style>
  11. <script type="text/javascript">
  12. function highlight() {
  13. document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
  14. }
  15. </script>
  16. </head>
  17. <body onload="prettyPrint(); highlight();">
  18. <pre class="prettyprint lang-js"><span id='Ext-grid-LockingView'>/**
  19. </span> * This class is used internally to provide a single interface when using
  20. * a locking grid. Internally, the locking grid creates two separate grids,
  21. * so this class is used to map calls appropriately.
  22. * @private
  23. */
  24. Ext.define('Ext.grid.LockingView', {
  25. mixins: {
  26. observable: 'Ext.util.Observable'
  27. },
  28. eventRelayRe: /^(beforeitem|beforecontainer|item|container|cell)/,
  29. constructor: function(config){
  30. var me = this,
  31. eventNames = [],
  32. eventRe = me.eventRelayRe,
  33. locked = config.locked.getView(),
  34. normal = config.normal.getView(),
  35. events,
  36. event;
  37. Ext.apply(me, {
  38. lockedView: locked,
  39. normalView: normal,
  40. lockedGrid: config.locked,
  41. normalGrid: config.normal,
  42. panel: config.panel
  43. });
  44. me.mixins.observable.constructor.call(me, config);
  45. // relay events
  46. events = locked.events;
  47. for (event in events) {
  48. if (events.hasOwnProperty(event) &amp;&amp; eventRe.test(event)) {
  49. eventNames.push(event);
  50. }
  51. }
  52. me.relayEvents(locked, eventNames);
  53. me.relayEvents(normal, eventNames);
  54. normal.on({
  55. scope: me,
  56. itemmouseleave: me.onItemMouseLeave,
  57. itemmouseenter: me.onItemMouseEnter
  58. });
  59. locked.on({
  60. scope: me,
  61. itemmouseleave: me.onItemMouseLeave,
  62. itemmouseenter: me.onItemMouseEnter
  63. });
  64. },
  65. getGridColumns: function() {
  66. var cols = this.lockedGrid.headerCt.getGridColumns();
  67. return cols.concat(this.normalGrid.headerCt.getGridColumns());
  68. },
  69. getEl: function(column){
  70. return this.getViewForColumn(column).getEl();
  71. },
  72. getViewForColumn: function(column) {
  73. var view = this.lockedView,
  74. inLocked;
  75. view.headerCt.cascade(function(col){
  76. if (col === column) {
  77. inLocked = true;
  78. return false;
  79. }
  80. });
  81. return inLocked ? view : this.normalView;
  82. },
  83. onItemMouseEnter: function(view, record){
  84. var me = this,
  85. locked = me.lockedView,
  86. other = me.normalView,
  87. item;
  88. if (view.trackOver) {
  89. if (view !== locked) {
  90. other = locked;
  91. }
  92. item = other.getNode(record);
  93. other.highlightItem(item);
  94. }
  95. },
  96. onItemMouseLeave: function(view, record){
  97. var me = this,
  98. locked = me.lockedView,
  99. other = me.normalView;
  100. if (view.trackOver) {
  101. if (view !== locked) {
  102. other = locked;
  103. }
  104. other.clearHighlight();
  105. }
  106. },
  107. relayFn: function(name, args){
  108. args = args || [];
  109. var view = this.lockedView;
  110. view[name].apply(view, args || []);
  111. view = this.normalView;
  112. view[name].apply(view, args || []);
  113. },
  114. getSelectionModel: function(){
  115. return this.panel.getSelectionModel();
  116. },
  117. getStore: function(){
  118. return this.panel.store;
  119. },
  120. getNode: function(nodeInfo){
  121. // default to the normal view
  122. return this.normalView.getNode(nodeInfo);
  123. },
  124. getCell: function(record, column){
  125. var view = this.getViewForColumn(column),
  126. row;
  127. row = view.getNode(record);
  128. return Ext.fly(row).down(column.getCellSelector());
  129. },
  130. getRecord: function(node){
  131. var result = this.lockedView.getRecord(node);
  132. if (!node) {
  133. result = this.normalView.getRecord(node);
  134. }
  135. return result;
  136. },
  137. addElListener: function(eventName, fn, scope){
  138. this.relayFn('addElListener', arguments);
  139. },
  140. refreshNode: function(){
  141. this.relayFn('refreshNode', arguments);
  142. },
  143. refresh: function(){
  144. this.relayFn('refresh', arguments);
  145. },
  146. bindStore: function(){
  147. this.relayFn('bindStore', arguments);
  148. },
  149. addRowCls: function(){
  150. this.relayFn('addRowCls', arguments);
  151. },
  152. removeRowCls: function(){
  153. this.relayFn('removeRowCls', arguments);
  154. }
  155. });</pre>
  156. </body>
  157. </html>