174 lines
No EOL
4.6 KiB
JavaScript
174 lines
No EOL
4.6 KiB
JavaScript
/*
|
|
This file is part of Ext JS 3.4
|
|
|
|
Copyright (c) 2011-2013 Sencha Inc
|
|
|
|
Contact: http://www.sencha.com/contact
|
|
|
|
GNU General Public License Usage
|
|
This file may be used under the terms of the GNU General Public License version 3.0 as
|
|
published by the Free Software Foundation and appearing in the file LICENSE included in the
|
|
packaging of this file.
|
|
|
|
Please review the following information to ensure the GNU General Public License version 3.0
|
|
requirements will be met: http://www.gnu.org/copyleft/gpl.html.
|
|
|
|
If you are unsure which license is appropriate for your use, please contact the sales department
|
|
at http://www.sencha.com/contact.
|
|
|
|
Build date: 2013-04-03 15:07:25
|
|
*/
|
|
/**
|
|
* @class Ext.DataView.LabelEditor
|
|
* @extends Ext.Editor
|
|
*
|
|
*/
|
|
Ext.DataView.LabelEditor = Ext.extend(Ext.Editor, {
|
|
alignment: "tl-tl",
|
|
hideEl : false,
|
|
cls: "x-small-editor",
|
|
shim: false,
|
|
completeOnEnter: true,
|
|
cancelOnEsc: true,
|
|
labelSelector: 'span.x-editable',
|
|
|
|
constructor: function(cfg, field){
|
|
Ext.DataView.LabelEditor.superclass.constructor.call(this,
|
|
field || new Ext.form.TextField({
|
|
allowBlank: false,
|
|
growMin:90,
|
|
growMax:240,
|
|
grow:true,
|
|
selectOnFocus:true
|
|
}), cfg
|
|
);
|
|
},
|
|
|
|
init : function(view){
|
|
this.view = view;
|
|
view.on('render', this.initEditor, this);
|
|
this.on('complete', this.onSave, this);
|
|
},
|
|
|
|
initEditor : function(){
|
|
this.view.on({
|
|
scope: this,
|
|
containerclick: this.doBlur,
|
|
click: this.doBlur
|
|
});
|
|
this.view.getEl().on('mousedown', this.onMouseDown, this, {delegate: this.labelSelector});
|
|
},
|
|
|
|
doBlur: function(){
|
|
if(this.editing){
|
|
this.field.blur();
|
|
}
|
|
},
|
|
|
|
onMouseDown : function(e, target){
|
|
if(!e.ctrlKey && !e.shiftKey){
|
|
var item = this.view.findItemFromChild(target);
|
|
e.stopEvent();
|
|
var record = this.view.store.getAt(this.view.indexOf(item));
|
|
this.startEdit(target, record.data[this.dataIndex]);
|
|
this.activeRecord = record;
|
|
}else{
|
|
e.preventDefault();
|
|
}
|
|
},
|
|
|
|
onSave : function(ed, value){
|
|
this.activeRecord.set(this.dataIndex, value);
|
|
}
|
|
});
|
|
|
|
|
|
Ext.DataView.DragSelector = function(cfg){
|
|
cfg = cfg || {};
|
|
var view, proxy, tracker;
|
|
var rs, bodyRegion, dragRegion = new Ext.lib.Region(0,0,0,0);
|
|
var dragSafe = cfg.dragSafe === true;
|
|
|
|
this.init = function(dataView){
|
|
view = dataView;
|
|
view.on('render', onRender);
|
|
};
|
|
|
|
function fillRegions(){
|
|
rs = [];
|
|
view.all.each(function(el){
|
|
rs[rs.length] = el.getRegion();
|
|
});
|
|
bodyRegion = view.el.getRegion();
|
|
}
|
|
|
|
function cancelClick(){
|
|
return false;
|
|
}
|
|
|
|
function onBeforeStart(e){
|
|
return !dragSafe || e.target == view.el.dom;
|
|
}
|
|
|
|
function onStart(e){
|
|
view.on('containerclick', cancelClick, view, {single:true});
|
|
if(!proxy){
|
|
proxy = view.el.createChild({cls:'x-view-selector'});
|
|
}else{
|
|
if(proxy.dom.parentNode !== view.el.dom){
|
|
view.el.dom.appendChild(proxy.dom);
|
|
}
|
|
proxy.setDisplayed('block');
|
|
}
|
|
fillRegions();
|
|
view.clearSelections();
|
|
}
|
|
|
|
function onDrag(e){
|
|
var startXY = tracker.startXY;
|
|
var xy = tracker.getXY();
|
|
|
|
var x = Math.min(startXY[0], xy[0]);
|
|
var y = Math.min(startXY[1], xy[1]);
|
|
var w = Math.abs(startXY[0] - xy[0]);
|
|
var h = Math.abs(startXY[1] - xy[1]);
|
|
|
|
dragRegion.left = x;
|
|
dragRegion.top = y;
|
|
dragRegion.right = x+w;
|
|
dragRegion.bottom = y+h;
|
|
|
|
dragRegion.constrainTo(bodyRegion);
|
|
proxy.setRegion(dragRegion);
|
|
|
|
for(var i = 0, len = rs.length; i < len; i++){
|
|
var r = rs[i], sel = dragRegion.intersect(r);
|
|
if(sel && !r.selected){
|
|
r.selected = true;
|
|
view.select(i, true);
|
|
}else if(!sel && r.selected){
|
|
r.selected = false;
|
|
view.deselect(i);
|
|
}
|
|
}
|
|
}
|
|
|
|
function onEnd(e){
|
|
if (!Ext.isIE) {
|
|
view.un('containerclick', cancelClick, view);
|
|
}
|
|
if(proxy){
|
|
proxy.setDisplayed(false);
|
|
}
|
|
}
|
|
|
|
function onRender(view){
|
|
tracker = new Ext.dd.DragTracker({
|
|
onBeforeStart: onBeforeStart,
|
|
onStart: onStart,
|
|
onDrag: onDrag,
|
|
onEnd: onEnd
|
|
});
|
|
tracker.initEl(view.el);
|
|
}
|
|
}; |