{
Roo.log('img onclick');
this.fireEvent('click', this, e);
+ },
+ /**
+ * Sets the url of the image - used to update it
+ * @param {String} url the url of the image
+ */
+
+ setSrc : function(url)
+ {
+ this.src = url;
+ this.el.select('img', true).first().dom.src = url;
}
+
+
});
* @cfg {String} buttonPosition (left|right|center) default right
* @cfg {Boolean} animate default true
* @cfg {Boolean} allow_close default true
- * @cfg {Boolean} fitwindow default true
+ * @cfg {Boolean} fitwindow default false
* @cfg {String} size (sm|lg) default empty
*
*
this.maskEl.setSize(Roo.lib.Dom.getViewWidth(true), Roo.lib.Dom.getViewHeight(true));
if (this.fitwindow) {
var w = this.width || Roo.lib.Dom.getViewportWidth(true) - 30;
- var h = this.height || Roo.lib.Dom.getViewportHeight(true) - 30;
- this.setSize(w,h)
+ var h = this.height || Roo.lib.Dom.getViewportHeight(true) - 60;
+ this.setSize(w,h);
}
},
this.el.setStyle('zIndex', '10001');
this.fireEvent('show', this);
- this.items.forEach(function(e) {
- e.layout ? e.layout() : false;
-
- });
- this.resize();
+ this.resize();
+ (function () {
+ this.items.forEach( function(e) {
+ e.layout ? e.layout() : false;
+
+ });
+ }).defer(100,this);
},
hide : function()
// BC...
- this.rowSelection = (typeof(config.RowSelection) != 'undefined') ? config.RowSelection : this.rowSelection;
- this.cellSelection = (typeof(config.CellSelection) != 'undefined') ? config.CellSelection : this.cellSelection;
+ this.rowSelection = (typeof(config.rowSelection) != 'undefined') ? config.rowSelection : this.rowSelection;
+ this.cellSelection = (typeof(config.cellSelection) != 'undefined') ? config.cellSelection : this.cellSelection;
this.headerShow = (typeof(config.thead) != 'undefined') ? config.thead : this.headerShow;
this.footerShow = (typeof(config.tfoot) != 'undefined') ? config.tfoot : this.footerShow;
-
+ this.sm = this.sm || {xtype: 'RowSelectionModel'};
if (this.sm) {
+ this.sm.grid = this;
this.selModel = Roo.factory(this.sm, Roo.bootstrap.Table);
this.sm = this.selModel;
this.sm.xmodule = this.xmodule || false;
}
+
if (this.cm && typeof(this.cm.config) == 'undefined') {
this.colModel = new Roo.grid.ColumnModel(this.cm);
this.cm = this.colModel;
if(!this.store || !this.cm){
return;
}
+ if (this.selModel) {
+ this.selModel.initEvents();
+ }
+
//Roo.log('initEvents with ds!!!!');
+
var _this = this;
Roo.each(this.el.select('thead th.sortable', true).elements, function(e){
if (this.footer) {
this.footer.parentId = this.id;
this.footer.onRender(this.el.select('tfoot tr td').first(), null);
- }
+ }
this.maskEl = new Roo.LoadMask(this.el, { store : this.ds, msgCls: 'roo-el-mask-msg' });
},
-
+
onDblClick : function(e,el)
{
var cell = Roo.get(el);
- if(!cell || (!this.CellSelection && !this.RowSelection)){
+ if(!cell || (!this.cellSelection && !this.rowSelection)){
return;
}
var cellIndex = cell.dom.cellIndex;
var rowIndex = this.getRowIndex(row);
- if(this.CellSelection){
+ if(this.cellSelection){
this.fireEvent('celldblclick', this, cell, rowIndex, cellIndex, e);
}
- if(this.RowSelection){
+ if(this.rowSelection){
this.fireEvent('rowdblclick', this, row, rowIndex, e);
}
},
onUpdate : function(ds,record)
{
this.refreshRow(record);
+ this.autoSize();
},
onRemove : function(ds, record, index, isUpdate){
index = ds.indexOf(record);
}
this.insertRow(ds, index, true);
+ this.autoSize();
this.onRemove(ds, record, index+1, true);
+ this.autoSize();
//this.syncRowHeights(index, index);
//this.layout();
this.fireEvent("rowupdated", this, index, record);
getSelectionModel : function(){
if(!this.selModel){
- this.selModel = new Roo.bootstrap.Table.RowSelectionModel();
+ this.selModel = new Roo.bootstrap.Table.RowSelectionModel({grid: this});
}
return this.selModel;
},
var thd = this.getGridEl().select('thead',true).first();
var tbd = this.getGridEl().select('tbody', true).first();
-
+ var tfd = this.getGridEl().select('tfoot', true).first();
var cw = ctr.getWidth();
if (tbd) {
- tbd.setSize(ctr.getWidth(), ctr.getHeight() - thd.getHeight());
+ tbd.setSize(ctr.getWidth(),
+ ctr.getHeight() - (thd.getHeight() + (tfd ? tfd.getHeight() : 0))
+ );
var barsize = (tbd.dom.offsetWidth - tbd.dom.clientWidth);
cw -= barsize;
}
* @cfg {String} labelAlign (top|left)
* @cfg {Boolean} readOnly Specifies that the field should be read-only
* @cfg {String} autocomplete - default is new-password see: https://developers.google.com/web/fundamentals/input/form/label-and-name-inputs?hl=en
+ * @cfg {String} indicatorpos (left|right) default left
* @cfg {String} align (left|center|right) Default left
* @cfg {Boolean} forceFeedback (true|false) Default false
formatedValue : false,
forceFeedback : false,
+ indicatorpos : 'left',
+
parentLabelAlign : function()
{
var parent = this;
},
- getAutoCreate : function(){
-
+ getAutoCreate : function()
+ {
var align = (!this.labelAlign) ? this.parentLabelAlign() : this.labelAlign;
var id = Roo.id();
var cfg = {};
-
-
if(this.inputType != 'hidden'){
cfg.cls = 'form-group' //input-group
}
autocomplete : this.autocomplete || 'new-password'
};
-
if(this.align){
input.style = (typeof(input.style) == 'undefined') ? ('text-align:' + this.align) : (input.style + 'text-align:' + this.align);
}
if (this.name) {
input.name = this.name;
}
+
if (this.size) {
input.cls += ' input-' + this.size;
}
+
var settings=this;
['xs','sm','md','lg'].map(function(size){
if (settings[size]) {
};
if (align ==='left' && this.fieldLabel.length) {
-
+
+ cfg.cn = [
+ {
+ tag : 'i',
+ cls : 'roo-required-indicator left-indicator text-danger fa fa-lg fa-star',
+ tooltip : 'This field is required'
+ },
+ {
+ tag: 'label',
+ 'for' : id,
+ cls : 'control-label col-sm-' + this.labelWidth,
+ html : this.fieldLabel
+
+ },
+ {
+ cls : "col-sm-" + (12 - this.labelWidth),
+ cn: [
+ inputblock
+ ]
+ }
+
+ ];
+
+ if(this.indicatorpos == 'right'){
cfg.cn = [
-
{
tag: 'label',
'for' : id,
cls : 'control-label col-sm-' + this.labelWidth,
html : this.fieldLabel
-
+
+ },
+ {
+ tag : 'i',
+ cls : 'roo-required-indicator right-indicator text-danger fa fa-lg fa-star',
+ tooltip : 'This field is required'
},
{
cls : "col-sm-" + (12 - this.labelWidth),
inputblock
]
}
-
+
];
+ }
+
} else if ( this.fieldLabel.length) {
- cfg.cn = [
-
+ cfg.cn = [
+ {
+ tag : 'i',
+ cls : 'roo-required-indicator left-indicator text-danger fa fa-lg fa-star',
+ tooltip : 'This field is required'
+ },
+ {
+ tag: 'label',
+ //cls : 'input-group-addon',
+ html : this.fieldLabel
+
+ },
+
+ inputblock
+
+ ];
+
+ if(this.indicatorpos == 'right'){
+
+ cfg.cn = [
{
tag: 'label',
- //cls : 'input-group-addon',
+ //cls : 'input-group-addon',
html : this.fieldLabel
-
+
},
-
- inputblock
-
- ];
+ {
+ tag : 'i',
+ cls : 'roo-required-indicator right-indicator text-danger fa fa-lg fa-star',
+ tooltip : 'This field is required'
+ },
+
+ inputblock
+
+ ];
+
+ }
} else {
- cfg.cn = [
-
- inputblock
-
- ];
+ cfg.cn = [
+
+ inputblock
+
+ ];
};
if (this.parentType === 'Navbar' && this.parent().bar) {
cfg.cls += ' navbar-form';
}
+
if (this.parentType === 'NavGroup') {
cfg.cls += ' navbar-form';
cfg.tag = 'li';
}
+
return cfg;
},
return this.inputEl();
},
+ indicatorEl : function()
+ {
+ var indicator = this.el.select('i.roo-required-indicator',true).first();
+
+ if(!indicator){
+ return false;
+ }
+
+ return indicator;
+
+ },
+
setDisabled : function(v)
{
var i = this.inputEl().dom;
this.inputEl().on("blur", this.onBlur, this);
this.inputEl().relayEvent('keyup', this);
+
+ this.indicator = this.indicatorEl();
+
+ if(this.indicator){
+ this.indicator.setVisibilityMode(Roo.Element.DISPLAY);
+ this.indicator.hide();
+ }
// reference to original value for reset
this.originalValue = this.getValue();
}
if(this.maskRe || (this.vtype && this.disableKeyFilter !== true && (this.maskRe = Roo.form.VTypes[this.vtype+'Mask']))){
this.inputEl().on("keypress", this.filterKeys, this);
+ } else {
+ this.inputEl().relayEvent('keypress', this);
}
/* if(this.grow){
this.el.on("keyup", this.onKeyUp, this, {buffer:50});
return;
}
- var label = this.el.select('label', true).first();
- var icon = this.el.select('i.fa-star', true).first();
-
- if(label && icon){
- icon.remove();
+ if(this.indicator){
+ this.indicator.hide();
}
this.el.removeClass(this.invalidClass);
return;
}
- var formGroup = this.el.findParent('.form-group', false, true);
-
- if(formGroup){
-
- var label = formGroup.select('label', true).first();
- var icon = formGroup.select('i.fa-star', true).first();
-
- if(label && icon){
- icon.remove();
- }
+ if(this.indicator){
+ this.indicator.hide();
}
this.el.addClass(this.validClass);
return;
}
- var formGroup = this.el.findParent('.form-group', false, true);
-
- if(formGroup){
- var label = formGroup.select('label', true).first();
- var icon = formGroup.select('i.fa-star', true).first();
-
- if(!this.getValue().length && label && !icon){
- this.el.findParent('.form-group', false, true).createChild({
- tag : 'i',
- cls : 'text-danger fa fa-lg fa-star',
- tooltip : 'This field is required',
- style : 'margin-right:5px;'
- }, label, true);
- }
+ if(this.indicator){
+ this.indicator.show();
}
-
this.el.addClass(this.invalidClass);
if(this.hasFeedback && this.inputType != 'hidden' && !this.allowBlank){
if (align ==='left' && this.fieldLabel.length && this.labelWidth) {
// Roo.log("left and has label");
+ cfg.cn = [
+ {
+ tag : 'i',
+ cls : 'roo-required-indicator left-indicator text-danger fa fa-lg fa-star',
+ tooltip : 'This field is required'
+ },
+ {
+ tag: 'label',
+ 'for' : id,
+ cls : 'control-label col-sm-' + this.labelWidth,
+ html : this.fieldLabel
+
+ },
+ {
+ cls : "col-sm-" + (12 - this.labelWidth),
+ cn: [
+ combobox
+ ]
+ }
+
+ ];
+
+ if(this.indicatorpos == 'right'){
cfg.cn = [
-
{
tag: 'label',
'for' : id,
cls : 'control-label col-sm-' + this.labelWidth,
html : this.fieldLabel
-
+
+ },
+ {
+ tag : 'i',
+ cls : 'roo-required-indicator right-indicator text-danger fa fa-lg fa-star',
+ tooltip : 'This field is required'
},
{
cls : "col-sm-" + (12 - this.labelWidth),
combobox
]
}
-
+
];
+ }
+
} else if ( this.fieldLabel.length) {
// Roo.log(" label");
- cfg.cn = [
-
+ cfg.cn = [
+ {
+ tag : 'i',
+ cls : 'roo-required-indicator left-indicator text-danger fa fa-lg fa-star',
+ tooltip : 'This field is required'
+ },
+ {
+ tag: 'label',
+ //cls : 'input-group-addon',
+ html : this.fieldLabel
+
+ },
+
+ combobox
+
+ ];
+
+ if(this.indicatorpos == 'right'){
+
+ cfg.cn = [
{
- tag: 'label',
- //cls : 'input-group-addon',
- html : this.fieldLabel
-
+ tag: 'label',
+ //cls : 'input-group-addon',
+ html : this.fieldLabel
+
+ },
+ {
+ tag : 'i',
+ cls : 'roo-required-indicator right-indicator text-danger fa fa-lg fa-star',
+ tooltip : 'This field is required'
},
combobox
-
+
];
+ }
+
} else {
// Roo.log(" no label && no align");
if (align ==='left' && this.fieldLabel.length && this.labelWidth) {
// Roo.log("left and has label");
+ cfg.cn = [
+ {
+ tag : 'i',
+ cls : 'roo-required-indicator left-indicator text-danger fa fa-lg fa-star',
+ tooltip : 'This field is required'
+ },
+ {
+ tag: 'label',
+ 'for' : id,
+ cls : 'control-label col-sm-' + this.labelWidth,
+ html : this.fieldLabel
+
+ },
+ {
+ cls : "col-sm-" + (12 - this.labelWidth),
+ cn: [
+ combobox
+ ]
+ }
+
+ ];
+
+ if(this.indicatorpos == 'right'){
+
cfg.cn = [
-
{
tag: 'label',
'for' : id,
cls : 'control-label col-sm-' + this.labelWidth,
html : this.fieldLabel
-
+
+ },
+ {
+ tag : 'i',
+ cls : 'roo-required-indicator right-indicator text-danger fa fa-lg fa-star',
+ tooltip : 'This field is required'
},
{
cls : "col-sm-" + (12 - this.labelWidth),
combobox
]
}
-
+
];
+
+ }
+
+
} else if ( this.fieldLabel.length) {
// Roo.log(" label");
cfg.cn = [
-
+ {
+ tag : 'i',
+ cls : 'roo-required-indicator left-indicator text-danger fa fa-lg fa-star',
+ tooltip : 'This field is required'
+ },
{
tag: 'label',
//cls : 'input-group-addon',
combobox
];
+
+ if(this.indicatorpos == 'right'){
+
+ cfg.cn = [
+ {
+ tag: 'label',
+ //cls : 'input-group-addon',
+ html : this.fieldLabel
+
+ },
+
+ {
+ tag : 'i',
+ cls : 'roo-required-indicator right-indicator text-danger fa fa-lg fa-star',
+ tooltip : 'This field is required'
+ },
+
+ combobox
+
+ ];
+
+ }
} else {
close.hide();
}
+ this.validate();
+
},
/**
if(close){
(v && (v.length || v * 1 > 0)) ? close.show() : close.hide();
}
+
+ this.validate();
},
/**
* @property {Object} the last set data for the element
}
this.setValue(this.originalValue);
- this.clearInvalid();
+ //this.clearInvalid();
this.lastData = false;
if (this.view) {
this.view.clearSelections();
}
+
+ this.validate();
},
// private
findRecord : function(prop, value){
Roo.get(document).un('keydown', this.listKeyPress, this);
}
this.fireEvent('collapse', this);
+
+ this.validate();
},
// private
}
this.store.fireEvent("datachanged", this.store);
+
+ this.validate();
},
clearItem : function()
var cw = align === 'left' ? ('col-sm' + (12 - this.labelWidth)) : '';
cfg.cn = [
+ {
+ tag : 'i',
+ cls : 'roo-required-indicator left-indicator text-danger fa fa-lg fa-star',
+ tooltip : 'This field is required'
+ },
{
tag: 'label',
cls : 'control-label ' + lw,
]
}
];
+
+ if(this.indicatorpos == 'right'){
+ cfg.cn = [
+ {
+ tag: 'label',
+ cls : 'control-label ' + lw,
+ html : this.fieldLabel
+
+ },
+ {
+ tag : 'i',
+ cls : 'roo-required-indicator right-indicator text-danger fa fa-lg fa-star',
+ tooltip : 'This field is required'
+ },
+ {
+ cls : cw,
+ cn: [
+ combobox
+ ]
+ }
+ ];
+ }
}
var settings = this;
this.isInput = true;
this.component = this.el.select('.add-on', true).first() || false;
this.component = (this.component && this.component.length === 0) ? false : this.component;
- this.hasInput = this.component && this.inputEL().length;
+ this.hasInput = this.component && this.inputEl().length;
if (typeof(this.minViewMode === 'string')) {
switch (this.minViewMode) {
remove: function()
{
this.picker().remove();
+ },
+
+ validateValue : function(value)
+ {
+ if(value.length < 1) {
+ if(this.allowBlank){
+ return true;
+ }
+ return false;
+ }
+
+ if(value.length < this.minLength){
+ return false;
+ }
+ if(value.length > this.maxLength){
+ return false;
+ }
+ if(this.vtype){
+ var vt = Roo.form.VTypes;
+ if(!vt[this.vtype](value, this)){
+ return false;
+ }
+ }
+ if(typeof this.validator == "function"){
+ var msg = this.validator(value);
+ if(msg !== true){
+ return false;
+ }
+ }
+
+ if(this.regex && !this.regex.test(value)){
+ return false;
+ }
+
+ if(typeof(this.parseDate(value)) == 'undefined'){
+ return false;
+ }
+
+ if (this.endDate !== Infinity && this.parseDate(value).getTime() > this.endDate.getTime()) {
+ return false;
+ }
+
+ if (this.startDate !== -Infinity && this.parseDate(value).getTime() < this.startDate.getTime()) {
+ return false;
+ }
+
+
+ return true;
}
});
tag: 'input',
id : id,
type : this.inputType,
- value : this.inputType == 'radio' ? this.inputValue : ((!this.checked) ? this.valueOff : this.inputValue),
+ value : this.inputValue,
cls : 'roo-' + this.inputType, //'form-box',
placeholder : this.placeholder || ''
};
+
+ var hidden = {
+ tag: 'input',
+ type : 'hidden',
+ cls : 'roo-hidden-value',
+ value : this.checked ? this.valueOff : this.inputValue
+ };
+
if (this.weight) { // Validity check?
cfg.cls += " " + this.inputType + "-" + this.weight;
}
if(this.checked){
input.checked = this.checked;
+
}
+
if (this.name) {
- input.name = this.name;
+ hidden.name = this.name;
+ input.name = '_hidden_' + this.name;
}
if (this.size) {
}
});
- var inputblock = input;
+ var inputblock = {
+ tag: 'span',
+ cn : [
+ input,
+ hidden
+ ]
+ };
if (this.before || this.after) {
}
inputblock.cn.push(input);
+ inputblock.cn.push(hidden);
if (this.after) {
inputblock.cn.push({
{
return this.el.select('input.roo-' + this.inputType,true).first();
},
+ hiddenEl: function ()
+ {
+ return this.el.select('input.hidden-value',true).first();
+ },
labelEl: function()
{
this.inputEl().dom.checked = state;
- this.inputEl().dom.value = state ? this.inputValue : this.valueOff;
+
+ this.hiddenEl().dom.value = state ? this.inputValue : this.valueOff;
if(suppressEvent !== true){
this.fireEvent('check', this, state);
return this.getGroupValue();
}
- return this.inputEl().getValue();
+ return this.hiddenEl() ? this.hiddenEl().dom.value : this.value;
},
validateRadio : function()
{
+ if(this.allowBlank){
+ return true;
+ }
+
var valid = false;
Roo.each(this.el.up('form').select('input[name='+this.name+']', true).elements, function(e){
group[i].el.findParent('.form-group', false, true).addClass(this.invalidClass);
}
+ },
+
+ disable : function()
+ {
+ if(this.inputType != 'radio'){
+ Roo.bootstrap.CheckBox.superclass.disable.call(this);
+ return;
+ }
+
+ var _this = this;
+
+ if(this.rendered){
+ Roo.each(this.el.up('form').select('input[name='+this.name+']', true).elements, function(e){
+ _this.getActionEl().addClass(this.disabledClass);
+ e.dom.disabled = true;
+ });
+ }
+
+ this.disabled = true;
+ this.fireEvent("disable", this);
+ return this;
+ },
+
+ enable : function()
+ {
+ if(this.inputType != 'radio'){
+ Roo.bootstrap.CheckBox.superclass.enable.call(this);
+ return;
+ }
+
+ var _this = this;
+
+ if(this.rendered){
+ Roo.each(this.el.up('form').select('input[name='+this.name+']', true).elements, function(e){
+ _this.getActionEl().removeClass(this.disabledClass);
+ e.dom.disabled = false;
+ });
+ }
+
+ this.disabled = false;
+ this.fireEvent("enable", this);
+ return this;
}
+
});
Roo.apply(Roo.bootstrap.CheckBox, {
});
Roo.bootstrap.Table.RowSelectionModel.superclass.constructor.call(this);
this.locked = false;
-};
+ };
Roo.extend(Roo.bootstrap.Table.RowSelectionModel, Roo.bootstrap.Table.AbstractSelectionModel, {
/**
singleSelect : false,
// private
- initEvents : function(){
-
- if(!this.grid.enableDragDrop && !this.grid.enableDrag){
- this.grid.on("mousedown", this.handleMouseDown, this);
- }else{ // allow click to work like normal
- this.grid.on("rowclick", this.handleDragableRowClick, this);
- }
+ initEvents : function()
+ {
+ //if(!this.grid.enableDragDrop && !this.grid.enableDrag){
+ // this.growclickrid.on("mousedown", this.handleMouseDown, this);
+ //}else{ // allow click to work like normal
+ // this.grid.on("rowclick", this.handleDragableRowClick, this);
+ //}
+ //this.grid.on("rowdblclick", this.handleMouseDBClick, this);
+ this.grid.on("rowclick", this.handleMouseDown, this);
+
this.rowNav = new Roo.KeyNav(this.grid.getGridEl(), {
"up" : function(e){
if(!e.shiftKey){
},
scope: this
});
-
+ this.grid.store.on('load', function(){
+ this.selections.clear();
+ },this);
+ /*
var view = this.grid.view;
view.on("refresh", this.onRefresh, this);
view.on("rowupdated", this.onRowUpdated, this);
view.on("rowremoved", this.onRemove, this);
+ */
},
// private
- onRefresh : function(){
- var ds = this.grid.dataSource, i, v = this.grid.view;
+ onRefresh : function()
+ {
+ var ds = this.grid.store, i, v = this.grid.view;
var s = this.selections;
s.each(function(r){
if((i = ds.indexOfId(r.id)) != -1){
* @param {Array} records The records to select
* @param {Boolean} keepExisting (optional) True to keep existing selections
*/
- selectRecords : function(records, keepExisting){
+ selectRecords : function(records, keepExisting)
+ {
if(!keepExisting){
this.clearSelections();
}
- var ds = this.grid.dataSource;
+ var ds = this.grid.store;
for(var i = 0, len = records.length; i < len; i++){
this.selectRow(ds.indexOf(records[i]), true);
}
* @param {Boolean} keepExisting (optional) True to keep existing selections
*/
selectLastRow : function(keepExisting){
- this.selectRow(this.grid.dataSource.getCount() - 1, keepExisting);
+ //this.selectRow(this.grid.dataSource.getCount() - 1, keepExisting);
+ this.selectRow(this.grid.store.getCount() - 1, keepExisting);
},
/**
* Selects the row immediately following the last selected row.
* @param {Boolean} keepExisting (optional) True to keep existing selections
*/
- selectNext : function(keepExisting){
- if(this.last !== false && (this.last+1) < this.grid.dataSource.getCount()){
+ selectNext : function(keepExisting)
+ {
+ if(this.last !== false && (this.last+1) < this.grid.store.getCount()){
this.selectRow(this.last+1, keepExisting);
this.grid.getView().focusRow(this.last);
}
/**
* Clears all selections.
*/
- clearSelections : function(fast){
+ clearSelections : function(fast)
+ {
if(this.locked) {
return;
}
if(fast !== true){
- var ds = this.grid.dataSource;
+ var ds = this.grid.store;
var s = this.selections;
s.each(function(r){
this.deselectRow(ds.indexOfId(r.id));
return;
}
this.selections.clear();
- for(var i = 0, len = this.grid.dataSource.getCount(); i < len; i++){
+ for(var i = 0, len = this.grid.store.getCount(); i < len; i++){
this.selectRow(i, true);
}
},
* @return {Boolean}
*/
isSelected : function(index){
- var r = typeof index == "number" ? this.grid.dataSource.getAt(index) : index;
+ var r = typeof index == "number" ? this.grid.store.getAt(index) : index;
return (r && this.selections.key(r.id) ? true : false);
},
return (this.selections.key(id) ? true : false);
},
+
// private
- handleMouseDown : function(e, t){
- var view = this.grid.getView(), rowIndex;
- if(this.isLocked() || (rowIndex = view.findRowIndex(t)) === false){
+ handleMouseDBClick : function(e, t){
+
+ },
+ // private
+ handleMouseDown : function(e, t)
+ {
+ var rowIndex = this.grid.headerShow ? t.dom.rowIndex - 1 : t.dom.rowIndex ; // first row is header???
+ if(this.isLocked() || rowIndex < 0 ){
return;
};
if(e.shiftKey && this.last !== false){
var last = this.last;
this.selectRange(last, rowIndex, e.ctrlKey);
this.last = last; // reset the last
- view.focusRow(rowIndex);
+ t.focus();
+
}else{
var isSelected = this.isSelected(rowIndex);
- if(e.button !== 0 && isSelected){
- view.focusRow(rowIndex);
- }else if(e.ctrlKey && isSelected){
+ //Roo.log("select row:" + rowIndex);
+ if(isSelected){
this.deselectRow(rowIndex);
- }else if(!isSelected){
- this.selectRow(rowIndex, e.button === 0 && (e.ctrlKey || e.shiftKey));
- view.focusRow(rowIndex);
+ } else {
+ this.selectRow(rowIndex, true);
}
+
+ /*
+ if(e.button !== 0 && isSelected){
+ alert('rowIndex 2: ' + rowIndex);
+ view.focusRow(rowIndex);
+ }else if(e.ctrlKey && isSelected){
+ this.deselectRow(rowIndex);
+ }else if(!isSelected){
+ this.selectRow(rowIndex, e.button === 0 && (e.ctrlKey || e.shiftKey));
+ view.focusRow(rowIndex);
+ }
+ */
}
this.fireEvent("afterselectionchange", this);
},
* @param {Number} row The index of the row to select
* @param {Boolean} keepExisting (optional) True to keep existing selections
*/
- selectRow : function(index, keepExisting, preventViewNotify){
- if(this.locked || (index < 0 || index >= this.grid.dataSource.getCount())) {
+ selectRow : function(index, keepExisting, preventViewNotify)
+ {
+ if(this.locked || (index < 0 || index > this.grid.store.getCount())) {
return;
}
if(this.fireEvent("beforerowselect", this, index, keepExisting) !== false){
if(!keepExisting || this.singleSelect){
this.clearSelections();
}
- var r = this.grid.dataSource.getAt(index);
+
+ var r = this.grid.store.getAt(index);
+ //console.log('selectRow - record id :' + r.id);
+
this.selections.add(r);
this.last = this.lastActive = index;
if(!preventViewNotify){
- this.grid.getView().onRowSelect(index);
+ var proxy = new Roo.Element(
+ this.grid.getRowDom(index)
+ );
+ proxy.addClass('bg-info info');
}
this.fireEvent("rowselect", this, index, r);
this.fireEvent("selectionchange", this);
* Deselects a row.
* @param {Number} row The index of the row to deselect
*/
- deselectRow : function(index, preventViewNotify){
+ deselectRow : function(index, preventViewNotify)
+ {
if(this.locked) {
return;
}
if(this.lastActive == index){
this.lastActive = false;
}
- var r = this.grid.dataSource.getAt(index);
+
+ var r = this.grid.store.getAt(index);
+ if (!r) {
+ return;
+ }
+
this.selections.remove(r);
+ //.console.log('deselectRow - record id :' + r.id);
if(!preventViewNotify){
- this.grid.getView().onRowDeselect(index);
+
+ var proxy = new Roo.Element(
+ this.grid.getRowDom(index)
+ );
+ proxy.removeClass('bg-info info');
}
this.fireEvent("rowdeselect", this, index);
this.fireEvent("selectionchange", this);
g.startEditing(newCell[0], newCell[1]);
}
}
-});/*
+});
+/*
* Based on:
* Ext JS Library 1.1.1
* Copyright(c) 2006-2007, Ext JS, LLC.
if(this.updating) {
return;
}
+
+ // render all the rebions if they have not been done alreayd?
+ Roo.each(Roo.bootstrap.layout.Border.regions, function(region) {
+ if(this.regions[region] && !this.regions[region].bodyEl){
+ this.regions[region].onRender(this.el)
+ }
+ },this);
+
var size = this.getViewSize();
var w = size.width;
var h = size.height;
this.visible = true;
this.collapsed = false;
+ this.unrendered_panels = [];
};
Roo.extend(Roo.bootstrap.layout.Region, Roo.bootstrap.layout.Basic, {
position: '', // set by wrapper (eg. north/south etc..)
-
+ unrendered_panels : null, // unrendered panels.
createBody : function(){
/** This region's body element
* @type Roo.Element */
if(this.config.hidden){
this.hide();
}
+
+ if (this.unrendered_panels && this.unrendered_panels.length) {
+ for (var i =0;i< this.unrendered_panels.length; i++) {
+ this.add(this.unrendered_panels[i]);
+ }
+ this.unrendered_panels = null;
+
+ }
+
},
applyConfig : function(c)
*/
updateBox : function(box)
{
+ if (!this.bodyEl) {
+ return; // not rendered yet..
+ }
+
this.box = box;
if(!this.collapsed){
this.el.dom.style.left = box.x + "px";
w += this.config.adjustments[0];
}
}
- if(h !== null){
+ if(h !== null && h > 0){
this.el.setHeight(h);
h = this.titleEl && this.titleEl.isDisplayed() ? h - (this.titleEl.getHeight()||0) : h;
h -= this.el.getBorderWidth("tb");
initTabs : function()
{
- this.bodyEl.setStyle("overflow", "hidden");
+ //this.bodyEl.setStyle("overflow", "hidden"); -- this is set in render?
+
var ts = new Roo.bootstrap.panel.Tabs({
el: this.bodyEl.dom,
tabPosition: this.bottomTabs ? 'bottom' : 'top',
ts.maxTabWidth = this.config.maxTabWidth || 250;
ts.preferredTabWidth = this.config.preferredTabWidth || 150;
ts.monitorResize = false;
- ts.bodyEl.setStyle("overflow", this.config.autoScroll ? "auto" : "hidden");
+ //ts.bodyEl.setStyle("overflow", this.config.autoScroll ? "auto" : "hidden"); // this is set in render?
ts.bodyEl.addClass('roo-layout-tabs-body');
this.panels.each(this.initPanelAsTab, this);
},
initPanelAsTab : function(panel){
var ti = this.tabs.addTab(
panel.getEl().id,
- panel.getTitle(), null,
+ panel.getTitle(),
+ null,
this.config.closeOnTab && panel.isClosable()
);
if(panel.tabTip !== undefined){
* @param {ContentPanel...} panel The ContentPanel(s) to add (you can pass more than one)
* @return {Roo.ContentPanel} The panel added (if only one was added; null otherwise)
*/
- add : function(panel){
+ add : function(panel)
+ {
if(arguments.length > 1){
for(var i = 0, len = arguments.length; i < len; i++) {
this.add(arguments[i]);
}
return null;
}
+
+ // if we have not been rendered yet, then we can not really do much of this..
+ if (!this.bodyEl) {
+ this.unrendered_panels.push(panel);
+ return panel;
+ }
+
+
+
+
if(this.hasPanel(panel)){
this.showPanel(panel);
return panel;
}
panel.setRegion(this);
this.panels.add(panel);
- if(this.panels.getCount() == 1 && !this.config.alwaysShowTabs){
+ /* if(this.panels.getCount() == 1 && !this.config.alwaysShowTabs){
+ // sinle panel - no tab...?? would it not be better to render it with the tabs,
+ // and hide them... ???
this.bodyEl.dom.appendChild(panel.getEl().dom);
if(panel.background !== true){
this.setActivePanel(panel);
this.fireEvent("paneladded", this, panel);
return panel;
}
+ */
if(!this.tabs){
this.initTabs();
}else{
if(!this.ignoreResize(width, height)){
var size = this.adjustForComponents(width, height);
var el = this.layout.getEl();
- el.setSize(size.width, size.height);
+ if (size.height < 1) {
+ el.setWidth(size.width);
+ } else {
+ el.setSize(size.width, size.height);
+ }
var touch = el.dom.offsetWidth;
this.layout.layout();
// ie requires a double layout on the first pass
createStripElements : function(stripEl, text, closable)
{
var td = document.createElement("li"); // was td..
- stripEl.insertBefore(td, stripEl.childNodes[stripEl.childNodes.length-1]);
- //stripEl.appendChild(td);
+
+
+ //stripEl.insertBefore(td, stripEl.childNodes[stripEl.childNodes.length-1]);
+
+
+ stripEl.appendChild(td);
/*if(closable){
td.className = "x-tabs-closable";
if(!this.closeTpl){