telegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-servicesmacoslinuxwindowsinboxwhatsappicloudtweetdeckhipchat
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
3.9 KiB
132 lines
3.9 KiB
/** |
|
* Internal utility class that provides a unique cell context. |
|
* @private |
|
*/ |
|
Ext.define('Ext.grid.CellContext', { |
|
|
|
/** |
|
* @property {Boolean} isCellContext |
|
* @readonly |
|
* `true` in this class to identify an object as an instantiated CellContext, or subclass thereof. |
|
*/ |
|
isCellContext: true, |
|
|
|
constructor: function(view) { |
|
this.view = view; |
|
}, |
|
|
|
isEqual: function(other) { |
|
if (other) { |
|
return this.record === other.record && this.column === other.column; |
|
} |
|
return false; |
|
}, |
|
|
|
// Selection row/record & column/columnHeader |
|
setPosition: function(row, col) { |
|
var me = this; |
|
|
|
// We were passed {row: 1, column: 2, view: myView} or [2, 1] |
|
if (arguments.length === 1) { |
|
// A [column, row] array passed |
|
if (row.length) { |
|
col = row[0]; |
|
col = row[1]; |
|
} |
|
// An object containing {row: r, column: c} |
|
else { |
|
if (row.view) { |
|
me.view = row.view; |
|
} |
|
col = row.column; |
|
row = row.row; |
|
} |
|
} |
|
|
|
me.setRow(row); |
|
me.setColumn(col); |
|
return me; |
|
}, |
|
|
|
setAll: function(view, recordIndex, columnIndex, record, columnHeader) { |
|
var me = this; |
|
|
|
me.view = view; |
|
me.rowIdx = recordIndex; |
|
me.colIdx = columnIndex; |
|
me.record = record; |
|
me.column = columnHeader; |
|
return me; |
|
}, |
|
|
|
setRow: function(row) { |
|
var me = this, |
|
dataSource = me.view.dataSource; |
|
|
|
if (row !== undefined) { |
|
// Row index passed |
|
if (typeof row === 'number') { |
|
me.rowIdx = Math.max(Math.min(row, dataSource.getCount() - 1), 0); |
|
me.record = dataSource.getAt(row); |
|
} |
|
// row is a Record |
|
else if (row.isModel) { |
|
me.record = row; |
|
me.rowIdx = dataSource.indexOf(row); |
|
} |
|
// row is a grid row |
|
else if (row.tagName) { |
|
me.record = me.view.getRecord(row); |
|
me.rowIdx = dataSource.indexOf(me.record); |
|
} |
|
} |
|
}, |
|
|
|
setColumn: function(col) { |
|
var me = this, |
|
colMgr = me.view.getVisibleColumnManager(); |
|
|
|
// Maintainer: |
|
// We MUST NOT update the context view with the column's view because this context |
|
// may be for an Ext.locking.View which spans two grid views, and a column references |
|
// its local grid view. |
|
if (col !== undefined) { |
|
if (typeof col === 'number') { |
|
me.colIdx = col; |
|
me.column = colMgr.getHeaderAtIndex(col); |
|
} else if (col.isHeader) { |
|
me.column = col; |
|
// Must use the Manager's indexOf because view may be a locking view |
|
// And Column#getVisibleIndex returns the index of the column within its own header. |
|
me.colIdx = colMgr.indexOf(col); |
|
} |
|
} |
|
}, |
|
|
|
next: function() { |
|
var me = this, |
|
mgr = me.view.getVisibleColumnManager(); |
|
|
|
me.colIdx++; |
|
if (me.colIdx === mgr.getColumns().length) { |
|
me.setPosition(Math.min(me.rowIdx + 1, me.view.dataSource.getCount() - 1), me.colIdx); |
|
} else { |
|
me.setColumn(me.colIdx); |
|
} |
|
}, |
|
|
|
equal: function(other) { |
|
return (other && other.isCellContext && other.view === this.view && other.record === this.record && other.column === this.column); |
|
}, |
|
|
|
clone: function() { |
|
var me = this, |
|
result = new me.self(me.view); |
|
|
|
result.rowIdx = me.rowIdx; |
|
result.colIdx = me.colIdx; |
|
result.record = me.record; |
|
result.column = me.column; |
|
return result; |
|
} |
|
}); |