forked from kyr0/extjs4spreadsheet-gpl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspread-all.js
1 lines (1 loc) · 43.1 KB
/
spread-all.js
1
Ext.define("Spread.overrides.Column",{override:"Ext.grid.column.Column",initialPanelEditModeStyling:false,selectable:true,editable:true,autoCommit:false,cellwriter:null,cellreader:null,editModeStyling:true,allowedEditKeys:[],initComponent:function(){this.initDynamicColumnTdCls();this.callParent(arguments)},initDynamicColumnTdCls:function(){if(!this.selectable){this.editable=false;this.tdCls="spreadsheet-cell-unselectable"}if(this.editable&&this.editModeStyling&&this.initialPanelEditModeStyling){this.tdCls+=" spreadsheet-cell-editable"}}});Ext.define("Spread.command.Commander",{spreadPanel:null,constructor:function(a){Ext.apply(this,a)},redrawEditModeStyling:function(){var a=spreadPanel.getView();a.editable.displayCellsEditing(a.editable.editModeStyling)},getPosition:function(a,b){return new Spread.selection.Position(this.spreadPanel.getView(),a,b).validate()},getRowRange:function(a){return Spread.selection.Range.fromSpreadRows(this.spreadPanel,[a])},getRowsRange:function(a){return Spread.selection.Range.fromSpreadRows(this.spreadPanel,a)},getColumnRange:function(a){return Spread.selection.Range.fromSpreadColumns(this.spreadPanel,[a])},getColumnsRange:function(a){return Spread.selection.Range.fromSpreadColumns(this.spreadPanel,a)},select:function(a,b){Spread.selection.Range.fromSpreadPositions(this.spreadPanel,a).select(b);return this},selectRow:function(b,a){return this.selectRows([b],a)},selectRows:function(a,b){Spread.selection.Range.fromSpreadRows(this.spreadPanel,a).select(b);return this},selectColumn:function(a,b){return this.selectColumns([a],b)},selectColumns:function(a,b){Spread.selection.Range.fromSpreadColumns(this.spreadPanel,a).select(b);return this},deselect:function(a,b){Spread.selection.Range.fromSpreadPositions(this.spreadPanel,a).deselect(b);return this},deselectRow:function(b,a){return this.deselectRows([b],a)},deselectRows:function(a,b){Spread.selection.Range.fromSpreadRows(this.spreadPanel,a).deselect(b);return this},deselectColumn:function(a,b){return this.deselectColumns([a],b)},deselectColumns:function(a,b){Spread.selection.Range.fromSpreadColumns(this.spreadPanel,a).deselect(b);return this},focusPosition:function(a,b){new Spread.selection.Position(this.spreadPanel.getView(),a,b).validate().focus()},startEditPosition:function(b,c,a){if(!Ext.isDefined(a)){this.focusPosition(b,c)}new Spread.selection.Position(this.spreadPanel.getView(),b,c).validate().setEditing(true);return this},stopEditPosition:function(a,b){new Spread.selection.Position(this.spreadPanel.getView(),a,b).validate().setEditing(false);return this},setEditModeStyling:function(b,a){Spread.selection.Range.fromSpreadPositions(this.spreadPanel,b).setEditModeStyling(a);return this},setRowEditModeStyling:function(b,a){return this.setRowsEditModeStyling([b],a)},setRowsEditModeStyling:function(b,a){Spread.selection.Range.fromSpreadRows(this.spreadPanel,b).setEditModeStyling(a);return this},setColumnEditModeStyling:function(b,a){return this.setColumnsEditModeStyling([b],a)},setColumnsEditModeStyling:function(a,b){Spread.selection.Range.fromSpreadColumns(this.spreadPanel,a).setEditModeStyling(b);return this},setPositionEditable:function(b,c,a){new Spread.selection.Position(this.spreadPanel.getView(),b,c).validate().setEditable(a);return this},setEditable:function(b,a){Spread.selection.Range.fromSpreadPositions(this.spreadPanel,b).setEditable(a);return this},setRowEditable:function(b,a){this.setRowsEditable([b],a);return this},setRowsEditable:function(b,a){Spread.selection.Range.fromSpreadRows(this.spreadPanel,b).setEditable(a);return this},setColumnEditable:function(b,a){this.setColumnsEditable([b],a);return this},setColumnsEditable:function(a,b){Spread.selection.Range.fromSpreadColumns(this.spreadPanel,a).setEditable(b);return this},setPositionSelectable:function(b,c,a){new Spread.selection.Position(this.spreadPanel.getView(),b,c).validate().setSelectable(a);return this},setSelectable:function(b,a){Spread.selection.Range.fromSpreadPositions(this.spreadPanel,b).setSelectable(a);return this},setRowSelectable:function(b,a){this.setRowsSelectable([b],a);return this},setRowsSelectable:function(b,a){Spread.selection.Range.fromSpreadRows(this.spreadPanel,b).setSelectable(a);return this},setColumnSelectable:function(b,a){this.setColumnsSelectable([b],a);return this},setColumnsSelectable:function(a,b){Spread.selection.Range.fromSpreadColumns(this.spreadPanel,a).setSelectable(b);return this}});Ext.define("Spread.grid.Panel",{extend:Ext.grid.Panel,alias:"widget.spread",viewType:"spreadview",closeAction:"destroy",pluginRegistry:{},columnLines:true,autoFocusRootPosition:true,enableKeyNav:true,editable:true,autoCommit:false,editModeStyling:true,editablePluginConfig:{},copyablePluginConfig:{},pasteablePluginConfig:{},clearRangePluginConfig:{},instanceStateId:"undefined",constructor:function(a){var b=this;b.instanceStateId="spread-state-"+new Date().getTime()+"-"+Math.random(0,65535);b.instantiatePlugins();b.addEvents("beforecovercell","covercell","beforehighlightcells","highlightcells","beforeeditfieldblur","editfieldblur","beforecoverdblclick","coverdblclick","beforecoverkeypressed","coverkeypressed","beforeeditingenabled","editingenabled","beforeeditingdisabled","editingdisabled","covercelleditable","editablechange","beforecopy","copy","beforepaste","paste");b.manageViewConfig(a);b.manageSelectionModelConfig(a);b.callParent(arguments);b.relayEvents(b.getView(),["beforecovercell","covercell","beforehighlightcells","highlightcells","beforeeditfieldblur","editfieldblur","beforecoverdblclick","coverdblclick","beforecoverkeypressed","coverkeypressed","beforeeditingenabled","editingenabled","beforeeditingdisabled","editingdisabled","beforecopy","copy","beforepaste","paste","editablechange","covercelleditable"]);b.editablePluginInstance.on("covercelleditable",function(){b.setEditable(b.editable);b.setEditModeStyling(b.editModeStyling)},b,{single:true})},initComponent:function(){this.initColumns();return this.callParent(arguments)},getCommander:function(){return Ext.create("Spread.command.Commander",{spreadPanel:this})},initColumns:function(){for(var a=0;a<this.columns.length;a++){this.columns[a].view=this}},instantiatePlugins:function(){this.editablePluginConfig.autoCommit=this.autoCommit;this.editablePluginInstance=Ext.create("Spread.grid.plugin.Editable",this.editablePluginConfig);this.pluginRegistry["Spread.grid.plugin.Editable"]=this.editablePluginInstance;this.copyablePluginInstance=Ext.create("Spread.grid.plugin.Copyable",this.copyablePluginConfig);this.pluginRegistry["Spread.grid.plugin.Copyable"]=this.copyablePluginInstance;this.pasteablePluginConfig.autoCommit=this.autoCommit;this.pasteablePluginInstance=Ext.create("Spread.grid.plugin.Pasteable",this.pasteablePluginConfig);this.pluginRegistry["Spread.grid.plugin.Pasteable"]=this.pasteablePluginInstance;this.clearRangePluginConfig.autoCommit=this.autoCommit;this.clearRangePluginInstance=Ext.create("Spread.grid.plugin.ClearRange",this.clearRangePluginConfig);this.pluginRegistry["Spread.grid.plugin.ClearRange"]=this.clearRangePluginInstance},getPlugin:function(a){return this.pluginRegistry[a]},manageViewConfig:function(a){this.hasView=false;var c=this,b=function(e){e.viewConfig.spreadPlugins=[];e.viewConfig.spreadPlugins.push(c.editablePluginInstance,c.copyablePluginInstance,c.pasteablePluginInstance,c.clearRangePluginInstance)};if(a.viewConfig){if(a.viewConfig.spreadPlugins&&Ext.isArray(a.viewConfig.spreadPlugins)){var d=function(e,h){var g=false;for(var f=0;f<a.viewConfig.spreadPlugins.length;f++){if(a.viewConfig.spreadPlugins[f] instanceof e){g=true}}if(!g){a.viewConfig.spreadPlugins.push(h)}};d(Spread.grid.plugin.Editable,this.editablePluginInstance);d(Spread.grid.plugin.Copyable,this.copyablePluginInstance);d(Spread.grid.plugin.Pasteable,this.pasteablePluginInstance);d(Spread.grid.plugin.ClearRange,this.clearRangePluginInstance)}else{b(a)}if(Ext.isDefined(a.viewConfig.stripeRows)){a.viewConfig.stripeRows=a.viewConfig.stripeRows}else{a.viewConfig.stripeRows=this.stripeRows}}else{a.viewConfig={};b(a)}},manageSelectionModelConfig:function(b){var a={selType:"range",grid:this};if(Ext.isDefined(b.autoFocusRootPosition)){a.autoFocusRootPosition=b.autoFocusRootPosition}else{a.autoFocusRootPosition=this.autoFocusRootPosition}if(Ext.isDefined(b.enableKeyNav)){a.enableKeyNav=b.enableKeyNav}else{a.enableKeyNav=this.enableKeyNav}this.selModel=a},setEditable:function(a){this.editable=a;if(this.getView().editable&&this.getView().editable.setDisabled){this.getView().editable.setDisabled(this.editable);this.getView().editable.autoCommit=this.autoCommit}else{throw"You want the grid to be editable, but editing plugin isn't activated!"}},setEditModeStyling:function(a){this.editModeStyling=a;if(this.getView().editable&&this.getView().editable.displayCellsEditing){this.getView().editable.editModeStyling=this.editModeStyling;if(this.editModeStyling&&this.editable){this.getView().editable.displayCellsEditing(true)}else{this.getView().editable.displayCellsEditing(false)}}else{throw"You want the grid to change it's edit mode styling, but editing plugin isn't activated!"}},isEditable:function(){return this.editable},statics:{getPositionCount:function(a){var c=a.headerCt.getColumnCount();var b=a.getStore().getCount();return{columnCount:c,rowCount:b}}}});Ext.define("Spread.grid.View",{extend:Ext.grid.View,alias:"widget.spreadview",stripeRows:false,trackOver:false,spreadViewBaseCls:"spreadsheet-view",cellCoverEl:null,currentCoverPosition:null,currentHighlightPositions:[],dataChangedRecently:true,spreadPanel:null,autoFocus:true,autoFocusDelay:50,cellFocusDelay:30,cellCoverZIndex:2,selectionCoverZIndex:1,coverPositionTopSubstract:2,coverPositionLeftSubstract:2,coverWidthAddition:3,coverHeightAddition:3,initComponent:function(){var b=this;b.stripeRows=false;b.baseCls=b.baseCls+" "+b.spreadViewBaseCls;b.addEvents("beforecovercell","covercell","beforehighlightcells","highlightcells","beforeeditfieldblur","editfieldblur","beforecoverdblclick","coverdblclick","beforecoverkeypressed","coverkeypressed","beforeeditingenabled","editingenabled","beforeeditingdisabled","editingdisabled","beforecopy","copy","beforepaste","paste");var a=b.callParent(arguments);if(!b.cellCoverEl){b.createCellCoverElement()}b.initPlugins(b.spreadPlugins);b.initRelayEvents();return a},initRelayEvents:function(){this.relayEvents(this.editable,["beforeeditfieldblur","editfieldblur","beforecoverdblclick","coverdblclick","beforecoverkeypressed","coverkeypressed","beforeeditingenabled","editingenabled","beforeeditingdisabled","editingdisabled","editablechange","covercelleditable"]);this.relayEvents(this.copyable,["beforecopy","copy"]);this.relayEvents(this.pasteable,["beforepaste","paste"])},initPlugins:function(a){for(var b=0;b<a.length;b++){this[a[b].alias]=a[b];this[a[b].alias].init(this)}},createCellCoverElement:function(){var a=this;this.on("afterrender",function(){this.getEl().set({tabIndex:0});if(a.autoFocus){setTimeout(function(){try{a.getEl().focus()}catch(b){}},a.autoFocusDelay)}this.cellCoverEl=Ext.DomHelper.append(this.getEl(),{tag:"div",id:"cover-el"+Ext.id(),cls:"spreadsheet-cell-cover"});Ext.get(this.cellCoverEl).on("mousedown",this.bubbleCellMouseDownToSelectionModel,this);this.headerCt.on("columnresize",function(){this.coverCell()},this)},this)},bubbleCellMouseDownToSelectionModel:function(j,b){var a=b.id.split("_"),d,c,h,g,f,e;if(a[1]&&Ext.fly(a[1])&&Ext.fly(a[1]).hasCls("x-grid-cell")){a=Ext.fly(a[1]).dom;d=Ext.fly(a).up("tr").dom;f=this.getRecord(d);c=Ext.fly(d).up("tbody").dom;for(e=0;e<d.childNodes.length;e++){if(d.childNodes[e]===a){g=e;break}}for(e=0;e<c.childNodes.length;e++){if(c.childNodes[e]===d){h=(e-1);break}}this.getSelectionModel().onCellMouseDown("mousedown",this,a,h,g,j,f,d)}},refresh:function(){var b=this,a=b.callParent(arguments);b.spreadPanel=b.ownerCt;if(b.dataChangedRecently){b.dataChangedRecently=false;return a}else{if(b.editable){b.editable.displayCellsEditing(b.editable.editModeStyling&&b.editable.editable)}}return a},coverCell:function(a){var d=this,c=d.getCellCoverEl();if(d.fireEvent("beforecovercell",d,a,c)!==false){if(a){d.highlightCells()}if(!a){a=d.currentCoverPosition}else{d.currentCoverPosition=a}a.validate();var e=Ext.get(a.cellEl),b,f;c.setStyle("display","block");f=e.getXY();f[0]-=d.coverPositionTopSubstract;f[1]-=d.coverPositionLeftSubstract;c.setXY(f);c.setStyle("z-index",d.cellCoverZIndex);b=e.getSize();b.width+=d.coverWidthAddition;b.height+=d.coverHeightAddition;c.setSize(b);c.dom.id="coverOf_"+e.dom.id;setTimeout(function(){d.focusCell(a);try{d.getEl().focus()}catch(g){}},d.cellFocusDelay);d.fireEvent("covercell",d,a,c,e,b,f)}},_highlight:function(b,a){for(var c=0;c<a.length;c++){Ext.fly(a[c].validate().cellEl).down("div")[b]("spreadsheet-cell-selection-cover")}},highlightCells:function(a){var b=this;if(this.fireEvent("beforehighlightcells",this,a)!==false){if(this.currentHighlightPositions.length>0){this.unhighlightCells(this.currentHighlightPositions)}if(a){this.currentHighlightPositions=a;b._highlight("addCls",this.currentHighlightPositions)}this.fireEvent("highlightcells",this,a)}},unhighlightCells:function(a){this._highlight("removeCls",a);if(this.currentHighlightPositions.length>0){this.currentHighlightPositions=Ext.Array.difference(this.currentHighlightPositions,a)}},getCellCoverEl:function(){return Ext.get(this.cellCoverEl)},getSpreadPanel:function(){return this.spreadPanel}});Ext.define("Spread.grid.column.Header",{extend:Ext.grid.RowNumberer,alias:"widget.spreadheadercolumn",resizable:true,editable:false,columnWidth:60,selectable:false,dataIndex:"id",constructor:function(a){a.width=a.columnWidth||this.columnWidth;this.callParent(arguments)},renderer:function(e,b,a,d,g,c){var f=this.rowspan;if(f){b.tdAttr='rowspan="'+f+'"'}b.tdCls=Ext.baseCSSPrefix+"grid-cell-header "+Ext.baseCSSPrefix+"grid-cell-special";return e}});Ext.define("Spread.grid.plugin.AbstractPlugin",{extend:Ext.AbstractComponent,alias:"abstract",view:null,init:function(a){var b=this;b.view=a},getView:function(){return this.view},getSelectionModel:function(){return this.getView().getSelectionModel()},getSpreadPanel:function(){return this.getView().getSpreadPanel()}});Ext.define("Spread.grid.plugin.ClearRange",{extend:Spread.grid.plugin.AbstractPlugin,alias:"clearrange",loadMask:true,nullValue:"",autoCommit:true,init:function(a){var b=this;b.callParent(arguments);b.addEvents("beforeclearrange","clearrange");b.listenToKeyEvents()},listenToKeyEvents:function(){var a=this;a.getView().on("destroy",function(){Ext.EventManager.un(document.body,"keyup",a.onKeyUp)});Ext.EventManager.on(document.body,"keyup",a.onKeyUp,a)},onKeyUp:function(b){var c=this,a=c.getView(),d=Ext.get(b.getTarget());if((a.editable&&!a.editable.editable)||c.getSelectionModel().currentSelectionRange.count()===0){b.stopEvent();return}if(!d.hasCls("spreadsheet-cell-cover-edit-field")&&Spread.util.Key.isDelKey(b)){c.clearCurrentSelectedRange();b.stopEvent()}},clearCurrentSelectedRange:function(){var c=this,a=c.getView(),d=c.getSelectionModel().getCurrentSelectionRange();if(c.loadMask){var b=new Ext.LoadMask(a.getEl());b.show()}setTimeout(function(){d.each(function(f){c.clearPosition(f)},function e(){if(a.editable&&a.editable.editModeStyling&&a.editable.editable){a.editable.displayCellsEditing(true)}if(c.loadMask){b.hide()}})},30)},clearCurrentFocusPosition:function(){this.clearPosition(this.getSelectionModel().getCurrentFocusPosition())},clearPosition:function(a){var c=this,b=c.getView();a.setValue(c.nullValue,c.autoCommit);if(b.editable&&b.editable.editModeStyling&&b.editable.editable){b.editable.displayCellsEditing(true)}}});Ext.define("Spread.util.Clipping",{el:null,refocusDelay:150,initClipping:function(){var a=this;Ext.onReady(function(){if(!a.hasClipboard()){a.createClipboard()}})},prepareForClipboardCopy:function(b,a){var c=this;c.el.dom.style.display="block";c.el.dom.value=b;try{c.el.dom.focus();c.selectClippingText()}catch(d){}c.refocusView(a)},selectClippingText:function(){var b=this,a;if(Ext.isIE){a=b.el.dom.createTextRange();a.collapse(true);a.moveStart("character",0);a.moveEnd("character",b.el.dom.value.length+1);a.select()}else{b.el.dom.select()}},prepareForClipboardPaste:function(d,a){var b=this;b.el.dom.style.display="block";try{b.el.dom.focus();b.selectClippingText()}catch(c){}setTimeout(function(){d(b.el.dom.value);b.el.dom.value=""},150);b.refocusView(a)},createClipboard:function(){this.el=Ext.get(Ext.DomHelper.append(Ext.getBody(),{tag:"textarea",cls:"clipboard-textarea",style:{display:"none",zIndex:-400,position:"absolute",left:"0px",top:"0px",width:"0px",height:"0px"},value:""}))},hasClipboard:function(){var a=Ext.select(".clipboard-textarea").elements[0];if(a){this.el=Ext.get(a);return true}return false},refocusView:function(a){var b=this;setTimeout(function(){try{a.getEl().focus()}catch(c){}b.el.dom.style.display="none"},b.refocusDelay)}});Ext.define("Spread.grid.plugin.Copyable",{extend:Spread.grid.plugin.AbstractPlugin,alias:"copyable",mixins:{clipping:Spread.util.Clipping},init:function(a){var b=this;b.callParent(arguments);b.addEvents("beforecopy","copy");b.initClipping();b.initKeyNav()},initKeyNav:function(a){var b=this,a=b.getView();if(!a.rendered){a.on("render",Ext.Function.bind(b.initKeyNav,b,[a],0),b,{single:true});return}a.getEl().on("keydown",b.detectCopyKeyStroke,b)},detectCopyKeyStroke:function(a){if(a.getKey()===a.C&&a.ctrlKey){this.copyToClipboard()}},copyToClipboard:function(){var c=this,a=c.getView(),b=c.getSelectionModel(),d=b.getSelectedPositionData();if(c.fireEvent("beforecopy",c,b,d)!==false){c.prepareForClipboardCopy(Spread.util.TSVTransformer.transformToTSV(d),c.getView());c.fireEvent("copy",c,b,d)}}});Ext.define("Spread.grid.plugin.Editable",{extend:Spread.grid.plugin.AbstractPlugin,alias:"editable",editableColumns:[],editableColumnIndexes:[],editable:false,isEditing:false,cellClear:false,autoCommit:true,stopEditingFocusDelay:50,retryFieldElFocusDelay:20,chunkRenderDelay:0.1,cellChunkSize:300,activePosition:null,activeCoverEl:null,activeCellTdEl:null,activeCoverElSize:null,activeCoverElPosition:null,cellCoverEditFieldEl:null,editModeStyling:true,editableCellCls:"spreadsheet-cell-editable",editableDirtyCellCls:"spreadsheet-cell-editable-dirty",lastEditFieldValue:null,init:function(a){var b=this;b.callParent(arguments);b.addEvents("beforeeditfieldblur","editfieldblur","beforecoverdblclick","coverdblclick","beforecoverkeypressed","coverkeypressed","beforeeditingenabled","editingenabled","beforeeditingdisabled","editingdisabled","covercelleditable","editablechange");b.initCoverEventing()},initCoverEventing:function(){var a=this;a.getView().on("afterrender",function(){a.initEditingColumns();a.initEventing()})},initEventing:function(){var c=this,a=c.getView(),b=a.getCellCoverEl();if(b){c.initTextField(b);a.getEl().on("dblclick",c.onCoverDblClick,c);a.getEl().on("keydown",c.onCoverKeyPressed,c);a.on("covercell",c.onCellCovered,c);c.getSelectionModel().on("beforecellfocus",c.blurEditFieldIfEditing,c);c.getSelectionModel().on("keynavigate",c.blurEditFieldIfEditing,c)}else{throw"Cover element not found, initializing editing failed! Please check proper view rendering."}},initEditingColumns:function(){var d=this,a=d.getView(),c=a.getHeaderCt().getGridColumns();d.editableColumns=[];d.editableColumnIndexes=[];for(var b=0;b<c.length;b++){if(c[b].editable){d.editableColumns.push(c[b]);c[b].columnIndex=b;d.editableColumnIndexes.push(b)}}},initTextField:function(b){var a=this;if(!a.cellCoverEditFieldEl){a.cellCoverEditFieldEl=Ext.get(Ext.DomHelper.append(b,{id:Ext.id()+"-cover-input",tag:"input",type:"text",cls:"spreadsheet-cell-cover-edit-field",value:""}));a.cellCoverEditFieldEl.on("keypress",a.onEditFieldKeyPressed,a)}},onEditFieldBlur:function(){var a=this;if(a.fireEvent("beforeeditfieldblur",a)!==false){a.view.dataChangedRecently=true;a.setEditing(false);a.activePosition.setValue(a.getEditingValue(),a.autoCommit);a.handleDirtyMarkOnEditModeStyling();a.fireEvent("editfieldblur",a)}},handleDirtyMarkOnEditModeStyling:function(){var a=this;if(a.getView().ownerCt.editModeStyling){a.displayCellsEditing(true)}else{a.displayCellsEditing(false)}},blurEditFieldIfEditing:function(){var a=this;if(a.isEditing){a.onEditFieldBlur()}},onEditFieldKeyPressed:function(b){var c=this,a=c.getView();if(c.isEditing){if(Spread.util.Key.isNavigationKey(b)||Spread.util.Key.isDelKey(b)){return true}if(Spread.util.Key.isCancelEditKey(b)){c.blurEditFieldIfEditing();return true}if(c.activePosition.columnHeader.allowedEditKeys.length){if(Ext.Array.indexOf(c.activePosition.columnHeader.allowedEditKeys,String.fromCharCode(b.getCharCode()))===-1&&b.getKey()!==b.BACKSPACE){b.stopEvent()}}}else{if(b.getKey()===b.ENTER){c.getSelectionModel().onKeyEnter(b)}if(b.getKey()===b.TAB){c.getSelectionModel().onKeyTab(b)}if(b.getKey()===b.LEFT){c.getSelectionModel().onKeyLeft(b)}if(b.getKey()===b.RIGHT){c.getSelectionModel().onKeyRight(b)}if(b.getKey()===b.UP){c.getSelectionModel().onKeyUp(b)}if(b.getKey()===b.DOWN){c.getSelectionModel().onKeyDown(b)}}},isOriginCellClick:function(a){var f=this,d=false,c=a.getTarget().parentNode.parentNode.id,e=a.getTarget().parentNode.id,g=a.getTarget().id,b=f.getSelectionModel().getCurrentFocusPosition().cellEl.id;if(Ext.isIE){if(g.indexOf(b)>-1||e.indexOf(b)>-1||c.indexOf(b)>-1){d=true}}else{if(g.indexOf(b)>-1){d=true}}return d},onCoverDblClick:function(a){var b=this;if(b.fireEvent("beforecoverdblclick",b)!==false){if(!Ext.get(a.getTarget()).hasCls("x-grid-view")&&!b.isEditing&&b.isOriginCellClick(a)&&b.isPositionEditable()){b.setEditing(true);b.setEditingValue(b.activePosition.getValue())}b.fireEvent("coverdblclick",b)}},onCoverKeyPressed:function(b,d){var c=this;if(c.isEditing){return}if(c.fireEvent("beforecoverkeypressed",c)!==false){if(Spread.util.Key.isDelKey(b)&&!c.isEditing){if(c.isPositionEditable()){var a=c.getSpreadPanel().getPlugin("Spread.grid.plugin.ClearRange");if(a){a.clearCurrentFocusPosition()}}}if(Spread.util.Key.isStartEditKey(b)&&!c.isEditing){if(c.isPositionEditable()){c.setEditing(true);c.setEditingValue("")}}c.fireEvent("coverkeypressed",c)}},onCellCovered:function(b,a,e,f,c,g){var d=this;d.activePosition=a;d.activeCellTdEl=f;d.activeCoverEl=e;d.activeCoverElSize=c;d.activeCoverElPosition=g;d.cellCoverEditFieldEl.dom.style.display="none";d.fireEvent("covercelleditable",d,b,a,e)},isPositionEditable:function(){var a=this;if((a.activePosition&&!a.activePosition.columnHeader.editable)||!a.editable||!a.activePosition.isEditable()){return false}return true},setEditing:function(c){var a=this;if(!Ext.isDefined(c)){c=true}if(!a.isPositionEditable()){return false}if(c){if(a.fireEvent("beforeeditingenabled",a)!==false){a.isEditing=true;a.cellCoverEditFieldEl.dom.style.display="inline";try{a.cellCoverEditFieldEl.dom.focus()}catch(b){}setTimeout(function(){try{a.cellCoverEditFieldEl.dom.focus()}catch(d){}},a.retryFieldElFocusDelay);a.fireEvent("editingenabled",a)}}else{if(a.fireEvent("beforeeditingdisabled",a)!==false){a.cellCoverEditFieldEl.dom.style.display="none";setTimeout(function(){try{a.getView().focus()}catch(d){}},a.stopEditingFocusDelay);a.isEditing=false;a.fireEvent("editingdisabled",a)}}},setEditingValue:function(a){this.cellCoverEditFieldEl.dom.value=a},getEditingValue:function(){return this.cellCoverEditFieldEl.dom.value},setDisabled:function(c){var a=this,b=function(d){for(var e=0;e<a.editableColumns.length;e++){a.editableColumns[e].editable=d}};if(!c){a.setEditing(false);a.editable=false;b(false);if(a.editModeStyling){a.displayCellsEditing(false,function(){a.fireEvent("editablechange",a,c)})}else{a.fireEvent("editablechange",a,c)}}else{a.editable=true;b(true);if(a.editModeStyling){a.displayCellsEditing(true,function(){a.fireEvent("editablechange",a,c)})}else{a.fireEvent("editablechange",a,c)}}},displayCellsEditing:function(c,d){var h=this,i=h.getView(),a=i.getEl().query(i.cellSelector),e=i.getHeaderCt().getGridColumns(),g=e.length,b=true,k,j;if(Ext.isIE6||Ext.isIE7||Ext.isIE8){h.chunkRenderDelay=0.3;h.cellChunkSize=200}var f=function(m,n){for(var l=m;l<n;l++){b=true;if(a[l]){k=Math.floor(l/g);j=Spread.util.State.getPositionState({row:k,spreadPanel:h.getSpreadPanel(),column:a[l].cellIndex},"editmodestyling");if(Ext.isDefined(j)){b=j}}if(!a[l]||Ext.Array.indexOf(h.editableColumnIndexes,a[l].cellIndex)<0||(e[a[l].cellIndex]&&e[a[l].cellIndex].editModeStyling===false)){continue}if(c&&b){if(!Ext.fly(a[l]).hasCls(h.editableCellCls)){if(Ext.fly(a[l]).hasCls("x-grid-dirty-cell")){Ext.fly(a[l]).addCls(h.editableDirtyCellCls)}else{Ext.fly(a[l]).addCls(h.editableCellCls)}}}else{Ext.fly(a[l]).removeCls(h.editableCellCls);Ext.fly(a[l]).removeCls(h.editableDirtyCellCls)}}if(n<a.length){m+=h.cellChunkSize;n+=h.cellChunkSize;setTimeout(function(){f(m,n)},h.chunkRenderDelay)}else{if(d&&Ext.isFunction(d)){d()}}};f(0,h.cellChunkSize)}});Ext.define("Spread.grid.plugin.Pasteable",{extend:Spread.grid.plugin.AbstractPlugin,alias:"pasteable",mixins:{clipping:Spread.util.Clipping},autoCommit:false,loadMask:true,useInternalAPIs:false,init:function(a){var b=this;b.callParent(arguments);b.addEvents("beforepaste","paste");b.initClipping();b.initKeyNav()},initKeyNav:function(){var b=this,a=b.getView();if(!a.rendered){a.on("render",Ext.Function.bind(b.initKeyNav,b,[a],0),b,{single:true});return}a.getEl().on("keydown",b.detectPasteKeyStroke,b)},detectPasteKeyStroke:function(a){if(a.getKey()===a.V&&a.ctrlKey){this.pasteFromClipboard()}},pasteFromClipboard:function(){var d=this,a=d.getView(),b=d.getSelectionModel(),e=b.getSelectedPositionData();if(d.loadMask){var c=new Ext.LoadMask(a.getEl());c.show()}if(d.fireEvent("beforepaste",d,b,e)!==false){d.prepareForClipboardPaste(function(g){var f=Spread.util.TSVTransformer.transformToArray(g);d.updateRecordFieldsInStore(f,e,b);d.fireEvent("paste",d,b,e,f);if(d.loadMask){c.hide()}},a)}},updateRecordFieldsInStore:function(d,c,h){var m=this,n=m.getView();function j(p,i){h.currentFocusPosition=i;h.originSelectionPosition=p;h.selectFocusRange(true)}if(c.length===0||d.length===0){return}if(d.length===1&&d[0].length===1){var l=c[0].validate();if(!l.columnHeader.editable){return}l.setValue(d[0][0],m.autoCommit);m.handleDirtyMarkOnEditModeStyling();return}if(c.length===1){var o=c[0].validate(),e=o.column,b=o.row,l=null;b+=(d.length-1);e+=(d[0].length-1);l=new Spread.selection.Position(n,e,b);j(o,l)}c=h.getSelectedPositionData();var o=c[0].validate();var g=0;var k=0;var a=0;for(var f=0;f<c.length;f++){c[f].validate();if(!c[f].columnHeader.editable){continue}k=(c[f].row-o.row);g=(c[f].column-o.column);a=k;c[f].setValue(d[k][g],m.autoCommit,m.useInternalAPIs)}n.refresh();m.handleDirtyMarkOnEditModeStyling();n.highlightCells(c)},handleDirtyMarkOnEditModeStyling:function(){var b=this,a=b.getView();if(a.editable){a.editable.displayCellsEditing(false);if(a.ownerCt.editModeStyling){a.editable.displayCellsEditing(true)}}}});Ext.define("Spread.util.State",{singleton:true,positionStates:{},setPositionState:function(a,d,e){var b,c=this.positionStates;if(a.spreadPanel){b=a.spreadPanel.instanceStateId}else{b="undefined"}if(!c[b]){c[b]={}}if(!c[b][a.row]){c[b][a.row]={}}if(!c[b][a.row][a.column]){c[b][a.row][a.column]={}}c[b][a.row][a.column][d]=e},getPositionState:function(a,d){var b,c=this.positionStates;if(a.spreadPanel){b=a.spreadPanel.instanceStateId}else{b="undefined"}if(!c[b]){return undefined}if(!c[b][a.row]){return undefined}if(!c[b][a.row][a.column]){return undefined}return c[b][a.row][a.column][d]}});Ext.define("Spread.selection.Position",{range:null,spreadPanel:null,view:null,column:-1,row:-1,record:null,model:null,columnHeader:null,rowEl:null,cellEl:null,editable:true,selectable:true,editModeStyling:true,focused:false,editing:false,selected:false,constructor:function(l,i,j,g,d,c){var f=l.getStore().getCount(),k=l.headerCt.getGridColumns(true).length;if(i>=k){i=(k-1)}if(j>=f){j=(f-1)}var d=d||l.getNode(j),g=g||l.getStore().getAt(j),e=null;if(d){c=c||d.childNodes[i]}else{c=c||null}if(g){e=g.self}var b=Spread.util.State.getPositionState(this,"editable");if(Ext.isDefined(b)){this.editable=b}else{Spread.util.State.setPositionState(this,"editable",this.editable)}var a=Spread.util.State.getPositionState(this,"editmodestyling");if(Ext.isDefined(a)){this.editModeStyling=a}else{Spread.util.State.setPositionState(this,"editmodestyling",this.editModeStyling)}var h=Spread.util.State.getPositionState(this,"selectable");if(Ext.isDefined(h)){this.selectable=h}else{Spread.util.State.setPositionState(this,"selectable",this.selectable)}Ext.apply(this,{view:l,spreadPanel:l.getSpreadPanel(),column:i,row:j,record:e,model:g?g.self:undefined,columnHeader:l.getHeaderAtIndex(i),rowEl:d,cellEl:c})},validate:function(){this.spreadPanel=this.view.getSpreadPanel();this.record=this.view.getStore().getAt(this.row);if(this.record){this.model=this.record.self}else{this.model=null}this.columnHeader=this.view.getHeaderAtIndex(this.column);this.rowEl=this.view.getNode(this.row);if(this.rowEl){this.cellEl=this.rowEl.childNodes[this.column]}var b=Spread.util.State.getPositionState(this,"editable");if(Ext.isDefined(b)){this.editable=b}var c=Spread.util.State.getPositionState(this,"editmodestyling");if(Ext.isDefined(c)){this.editModeStyling=c}var a=Spread.util.State.getPositionState(this,"selectable");if(Ext.isDefined(a)){this.selectable=a}return this},getFieldName:function(){var a=this,b=a.view.getHeaderAtIndex(a.column);if(b){return b.dataIndex}else{throw"No column found for column index: "+a.column}},getType:function(){var b=this,a="auto",c=b.getFieldName();if(!b.record["__"+c+"_type"]){b.record.fields.each(function(d){if(d.name===c&&d.type.type!=="auto"){a=d.type.type}});return b.record["__"+c+"_type"]=a}return b.record["__"+c+"_type"]},castNewValue:function(b){var a=this;if(!Ext.isDefined(b)||b===null){return b}switch(a.getType()){case"bool":return(b=="true");case"int":return parseInt(b);case"float":return parseFloat(b);case"auto":case"string":return b.valueOf();case"date":return new Date(b)}},setValue:function(e,b,a){var d=this,f,c;d.validate();if(!b&&!d.columnHeader.autoCommit){}f=d.getFieldName();if(!d.record){throw"No record found for row index: "+d.row}if(d.columnHeader.cellwriter&&Ext.isFunction(d.columnHeader.cellwriter)){e=d.columnHeader.cellwriter(e,d)}else{e=d.castNewValue(e)}if(d.record.get(f)==e){return e}if(a){c=d.record[d.record.persistenceProperty][f]=e;d.record.setDirty()}else{c=d.record.set(f,e)}if(b&&d.columnHeader.autoCommit){d.record.commit()}return c},getValue:function(){var a=this,c,b;a.validate();c=a.getFieldName();if(!a.record){throw"No record found for row index: "+a.row}b=a.record.get(c);if(a.columnHeader.cellreader&&Ext.isFunction(a.columnHeader.cellreader)){b=a.columnHeader.cellreader(b,a)}return b},focus:function(){if(!this.isFocusable()){return this}this.focused=true;this.view.getSelectionModel().setCurrentFocusPosition(this);return this},isFocused:function(){return this.focused},isFocusable:function(){return this.isSelectable()},setEditable:function(a,b){this.editable=a;Spread.util.State.setPositionState(this,"editable",a);return this},isEditable:function(){var a=Spread.util.State.getPositionState(this,"editable");if(Ext.isDefined(a)){this.editable=a}if(this.getColumn().editable&&this.editable){return true}return false},setEditing:function(a){if(!this.isEditable()){return this}this.editing=a;if(a){}else{}return this},isEditing:function(){return this.editing},setSelectable:function(a,b){this.selectable=a;Spread.util.State.setPositionState(this,"selectable",a);return this},isSelectable:function(){var a=Spread.util.State.getPositionState(this,"selectable");if(Ext.isDefined(a)){this.selectable=a}if(this.getColumn().selectable&&this.selectable){return true}return false},setEditModeStyling:function(a,b){this.editModeStyling=a;Spread.util.State.setPositionState(this,"editmodestyling",a);return this},hasEditModeStyling:function(){var a=Spread.util.State.getPositionState(this,"editmodestyling");if(Ext.isDefined(a)){this.editModeStyling=a}return this.editModeStyling},setSelected:function(a){if(!this.isSelectable()){return this}this.selected=a;return this},isSelected:function(){return this.selected},setRange:function(a){this.range=a;return this},getRange:function(){return this.range},getSelectionModel:function(){return this.getSpreadPanel().getSelectionModel()},getView:function(){return this.view},getSpreadPanel:function(){return this.spreadPanel},getRowIndex:function(){return this.row},getColumnIndex:function(){return this.column},getColumn:function(){return this.columnHeader},getRowRecord:function(){return this.record},getModelClass:function(){return this.model}});Ext.define("Spread.selection.Range",{positions:[],spreadPanel:null,constructor:function(b,a){if(!b){throw new Error("Please provide a spreadPanel reference when creating a selection range! Try: new Spread.selection.Range(spreadPanelReference)")}this.spreadPanel=b;this.setPositions(a)},each:function(a,d){var c=this;for(var b=0;b<c.positions.length;b++){if(Ext.isFunction(a)){a(c.positions[b],b,c.positions.length)}}if(Ext.isFunction(d)){d()}return this},removeAll:function(){this.positions=[];return this},add:function(a){this.positions.push(a);return this},hasPosition:function(a){var d=this,c=false;for(var b=0;b<d.positions.length;b++){if(a===d.positions[b]){c=true}}return c},select:function(d){var c=this,a=this.getSelectionModel();for(var b=0;b<c.positions.length;b++){c.positions[b].setSelected(true)}a.currentSelectionRange=c;if(!d){a.view.highlightCells(c.positions)}return c},deselect:function(d){var c=this,a=this.getSelectionModel();for(var b=0;b<c.positions.length;b++){c.positions[b].setSelected(false)}if(!d){a.view.unhighlightCells(c.positions)}return c},count:function(){return this.positions.length},toArray:function(){return this.positions},getFirst:function(){return this.positions[0]},getLast:function(){return this.positions[this.positions.length-1]},setEditable:function(c){var d=this,a=false;for(var b=0;b<d.positions.length;b++){if(b===(d.positions.length-1)){a=true}d.positions[b].setEditable(c,a)}return d},setSelectable:function(b){var d=this,a=false;for(var c=0;c<d.positions.length;c++){if(c===(d.positions.length-1)){a=true}d.positions[c].setSelectable(b,a)}return d},setEditModeStyling:function(b){var d=this,a=false;for(var c=0;c<d.positions.length;c++){if(c===(d.positions.length-1)){a=true}d.positions[c].setEditModeStyling(b,a)}return d},setPositions:function(a){var c=this;if(a&&Ext.isArray(a)){c.positions=a;if(c.positions&&Ext.isArray(c.positions)){for(var b=0;b<c.positions.length;b++){c.positions[b].setRange(c)}}}return c},getSelectionModel:function(){return this.spreadPanel.getSelectionModel()},getSpreadPanel:function(){return this.spreadPanel},statics:{fromSpreadRow:function(a,b){return Spread.selection.Range.fromSpreadRows(a,[b])},fromSpreadRows:function(b,f){var e=Spread.grid.Panel.getPositionCount(b),a=[];for(var d=0;d<e.columnCount;d++){for(var c=0;c<f.length;c++){a.push(new Spread.selection.Position(b.getView(),d,f[c]))}}return new Spread.selection.Range(b,a)},fromSpreadColumn:function(a,b){return Spread.selection.Range.fromSpreadColumns(a,[b])},fromSpreadColumns:function(c,b){var f=Spread.grid.Panel.getPositionCount(c),a=[];for(var e=0;e<f.rowCount;e++){for(var d=0;d<b.length;d++){a.push(new Spread.selection.Position(c.getView(),b[d],e))}}return new Spread.selection.Range(c,a)},fromSpreadPositions:function(b,d){var e=Spread.grid.Panel.getPositionCount(b),a=[];for(var c=0;c<d.length;c++){a.push(new Spread.selection.Position(b.getView(),d[c].column,d[c].row))}return new Spread.selection.Range(b,a)}}});Ext.define("Spread.selection.RangeModel",{extend:Ext.selection.Model,alias:"selection.range",isRangeModel:true,initialViewRefresh:true,dataChangedRecently:false,keyNav:null,keyNavigation:false,mayRangeSelecting:false,rootPosition:null,autoFocusRootPosition:true,enableKeyNav:true,currentSelectionRange:null,originSelectionPosition:null,currentFocusPosition:null,view:null,grid:null,constructor:function(){this.addEvents("deselect","select","beforecellfocus","cellfocus","cellblur","tabselect","enterselect","keynavigate");this.callParent(arguments);this.currentSelectionRange=new Spread.selection.Range(this.getSpreadPanel())},bindComponent:function(a){var b=this;b.view=a;b.grid=b.view.ownerCt;b.callParent(arguments);b.initRootPosition();b.bindUIEvents();if(b.enableKeyNav){b.initKeyNav(a)}},initRootPosition:function(){var b=0,c=false,a=false;while(!c){if(!this.view.getHeaderAtIndex(b)){c=true;a=true}if(this.view.getHeaderAtIndex(b)&&this.view.getHeaderAtIndex(b).selectable){c=true}else{b++}}this.rootPosition=new Spread.selection.Position(this.view,b,0,this.view.getStore().getAt(0))},bindUIEvents:function(){var a=this;a.view.on({uievent:a.onUIEvent,refresh:a.onViewRefresh,scope:a});a.view.ownerCt.on({columnhide:a.reinitialize,columnmove:a.reinitialize,columnshow:a.reinitialize,scope:a});a.view.store.on("datachanged",function(){a.dataChangedRecently=true});a.initEditBlurHandler()},initEditBlurHandler:function(){var a=this;a.grid.on("destroy",function(){Ext.EventManager.un(document.body,"mouseup",a.onCellMouseUp)});Ext.EventManager.on(document.body,"mouseup",a.onCellMouseUp,a)},reinitialize:function(){this.initRootPosition();try{this.setCurrentFocusPosition(this.rootPosition)}catch(a){}this.setOriginSelectionPosition(this.rootPosition)},initKeyNav:function(a){var b=this;if(!a.rendered){a.on("render",Ext.Function.bind(b.initKeyNav,b,[a],0),b,{single:true});return}a.el.set({tabIndex:-1});b.keyNav=new Ext.util.KeyNav({target:a.el,eventName:"keydown",ignoreInputFields:true,right:b.onKeyRight,left:b.onKeyLeft,scope:b});b.keyNav=new Ext.util.KeyNav({target:a.el,eventName:"keydown",ignoreInputFields:false,up:b.onKeyUp,down:b.onKeyDown,tab:b.onKeyTab,enter:b.onKeyEnter,scope:b})},onViewRefresh:function(){if(this.dataChangedRecently){this.reinitialize();this.dataChangedRecently=false}else{this.rootPosition.validate();try{this.view.getEl().focus()}catch(a){}}if(this.autoFocusRootPosition&&this.initialViewRefresh){try{this.setCurrentFocusPosition(this.rootPosition)}catch(a){}this.setOriginSelectionPosition(this.rootPosition);this.initialViewRefresh=false}},onUIEvent:function(d,g,i,f,e,h,a,j){var c=this,b=arguments;switch(d){case"mouseover":c.onCellMouseOver.apply(c,b);break;case"mousedown":c.onCellMouseDown.apply(c,b);break}},onCellMouseDown:function(d,g,i,f,e,h,b,j,c){if(!c){return}var a=new Spread.selection.Position(g,e,f,b,j,i);if(this.setCurrentFocusPosition(a)){if(h.shiftKey&&!Spread.util.Key.isStartEditKey(h)){this.selectFocusRange()}else{this.setOriginSelectionPosition(a);this.mayRangeSelecting=true}}},getNextRowIndex:function(a,b){if((b+1)<a.getCount()){++b}return b},onCellMouseOver:function(f,d,a,h,e,c,b,g){if(this.mayRangeSelecting){if(this.setCurrentFocusPosition(new Spread.selection.Position(d,e,h,b,g,a))){this.selectFocusRange()}}},onCellMouseUp:function(a,b){this.mayRangeSelecting=false;if(!Ext.get(b).hasCls("spreadsheet-cell-cover")&&!Ext.get(b).hasCls("x-grid-cell-inner")&&!Ext.get(b).hasCls("spreadsheet-cell-cover-edit-field")){this.fireEvent("cellblur",this,Ext.get(b))}},onKeyUp:function(a){if(!this.getCurrentFocusPosition()){return}this.keyNavigation=true;this.processKeyNavigation("up",a);this.keyNavigation=false},onKeyDown:function(a){if(!this.getCurrentFocusPosition()){return}this.keyNavigation=true;this.processKeyNavigation("down",a);this.keyNavigation=false},onKeyLeft:function(a){if(Ext.get(a.getTarget()).hasCls("spreadsheet-cell-cover-edit-field")){return}if(!this.getCurrentFocusPosition()){return}this.keyNavigation=true;this.processKeyNavigation("left",a);this.keyNavigation=false},onKeyRight:function(a){if(Ext.get(a.getTarget()).hasCls("spreadsheet-cell-cover-edit-field")){return}if(!this.getCurrentFocusPosition()){return}this.keyNavigation=true;this.processKeyNavigation("right",a);this.keyNavigation=false},onKeyTab:function(a){if(!this.getCurrentFocusPosition()||!a){return}this.fireEvent("tabselect",this,a);this.keyNavigation=true;if(!a.shiftKey){this.processKeyNavigation("right",a)}else{this.processKeyNavigation("left",a)}this.keyNavigation=false},onKeyEnter:function(a){if(!this.getCurrentFocusPosition()){return}this.fireEvent("enterselect",this,a);this.keyNavigation=true;this.processKeyNavigation("down",a);this.keyNavigation=false},setCurrentFocusPosition:function(a){if(!a){this.currentFocusPosition=null;return false}if(!a.isSelectable()){return false}if(this.fireEvent("beforecellfocus",a)!==false){this.currentFocusPosition=a;this.currentSelectionRange=new Spread.selection.Range(this.getSpreadPanel());this.view.coverCell(a);this.fireEvent("cellfocus",a);return true}return false},getCurrentFocusPosition:function(){return this.currentFocusPosition},setOriginSelectionPosition:function(a){this.originSelectionPosition=a},getOriginSelectionPosition:function(){return this.originSelectionPosition},processKeyNavigation:function(b,a){setTimeout(Ext.Function.bind(function(){this.fireEvent("keynavigate",this,b,a);var c=this.tryMoveToPosition(this.getCurrentFocusPosition(),b,a);if(this.setCurrentFocusPosition(c)){if(a.shiftKey&&a.getKey()!==a.TAB){this.selectFocusRange()}else{this.setOriginSelectionPosition(c)}}},this),50)},tryMoveToPosition:function(c,d,a){var b=this.view.walkCells(c,d,a,true);if(!b&&!a.shiftKey&&d==="right"){b=new Spread.selection.Position(c.view,this.rootPosition.column,this.getNextRowIndex(c.view.getStore(),c.row))}else{if(!b){b=c}}return new Spread.selection.Position(this.view,b.column,b.row)},createFocusRange:function(){var i=function(p,o){var n=[];do{n.push(p);p++}while(p<=o);return n};var k=this.view.getStore().getCount(),h=this.view.headerCt.getGridColumns(true).length,b=this.getOriginSelectionPosition().row,c=this.getCurrentFocusPosition().row,d=this.getOriginSelectionPosition().column,f=this.getCurrentFocusPosition().column,l=[],g=[],a=[],e=null;if(c<=b){l=i(c,b)}else{l=i(b,c)}if(f<=d){g=i(f,d)}else{g=i(d,f)}for(var j=0;j<k;j++){for(var m=0;m<h;m++){if(Ext.Array.indexOf(l,j)>-1&&Ext.Array.indexOf(g,m)>-1){e=new Spread.selection.Position(this.view,m,j).validate();if(!e.columnHeader.hidden){a.push(e)}}}}return new Spread.selection.Range(this.getSpreadPanel(),a)},selectFocusRange:function(a){this.currentSelectionRange=this.createFocusRange();this.currentSelectionRange.select(a)},getSelectedPositionData:function(){var a;if(this.currentSelectionRange.count()===0){a=[this.currentFocusPosition]}else{a=this.currentSelectionRange.toArray()}return a},getCurrentSelectionRange:function(){return this.currentSelectionRange},getSpreadPanel:function(){return this.grid}});Ext.define("Spread.util.Key",{singleton:true,specialKeyPressedBefore:null,isCancelEditKey:function(a){var b=a.normalizeKey(a.keyCode);return(b>=33&&b<=40)||b==a.RETURN||b==a.TAB||b==a.ESC||b==91||(!Ext.isIE&&b===224)},isStartEditKey:function(a){var c=this,b=a.normalizeKey(a.keyCode);if(c.specialKeyPressedBefore){c.specialKeyPressedBefore=false;return false}if(a.ctrlKey){return false}if(Ext.isIE&&b===91){c.specialKeyPressedBefore=true}return(b>=48&&b<=57)||(b>=65&&b<=90)||(b>=96&&b<=111)||(b>=173&&b<=222)},isNavigationKey:function(a){var b=a.normalizeKey(a.keyCode);if(b>=37&&b<=40){return true}return false},isDelKey:function(a){var b=a.normalizeKey(a.keyCode);if(b===46){return true}return false}});Ext.define("Spread.util.TSVTransformer",{singleton:true,lineSeparator:"\n",columnSeparator:"\t",transformToTSV:function(d){var a=-1,c="";for(var b=0;b<d.length;b++){d[b].validate();if(a!==d[b].row&&a!==-1){if(c[c.length-1]==this.columnSeparator){c=c.substring(0,c.length-1)}c=this.addLineBreak(c)}a=d[b].row;c=this.addValue(c,d[b]);if(d[b+1]&&d[b+1].column!==d[+1].view.getSelectionModel().rootPosition.column){c=this.addTabulator(c)}}c=this.addLineBreak(c);return c},transformToArray:function(d){var a=[],c=d.split(this.lineSeparator);for(var b=0;b<(c.length-1);b++){a.push(c[b].split(this.columnSeparator))}return a},addLineBreak:function(a){return a+this.lineSeparator},addTabulator:function(a){return a+this.columnSeparator},addValue:function(b,a){return b+=a.getValue()}});