Hi,
I've a problem with inline ListGrid editing, if one of field is custom CanvasItem then it breaks focus navigation with "tab" button. It just focus on a first widget on screen.
My custom CanvasItem contains DynamicForm with two more fields (but with one field it doesn't work either).
Tested latest version: v10.0p_2015-11-29/LGPL Deployment but doesn't work on 2015-07-xx build too.
Debug information: Then I press "tab" while I have focus in my second field of "CustomCanvasItem", then system reacts as follows:
1) isc.EventHandler.addClassMethods.handleKeyPress(), ISC_Core.js:33582
find that button "Tab" pressed, and ckickMaskUp() exists with topHardMask, and has focusCanvas, then call focusInNExtTabElement() on that canvas.
2) isc.CanvasItem.addProperties._canvas_focusInNextTabElement(), ISC_Forms.js:35094
Check is our canvas is instance of DynamicForm and delegate to DynamicForm.focusInNextTabElement();
3) isc.DynamicForm.addMethods._focusInNextTabElement(), ISC_Forms.js:13228 (it's our CanvasItem's form)
We've reached the end of all our items and try to focus on next widget instead of item
4) isc.Canvas.addMethods._focusInNextTabElement(), ISC_Core.js:65293
just forward to DynamicForm
5) isc.DynamicForm.addMethods._focusInNextTabElement(), ISC_Forms.js:13168 (it's ListGrid's edit form)
Here is on first lines there is check condition if target is masked then skip logic, and go to next widget instead.
Because we have a hardmask this logic will be triggered and no more default "focus to next item" behaviour.
If I am removing that checking mask condition then all steping to next field behaviour starts work correctly.
I know that it's not correct way to fix, but I hope this would be enough information to quickly find a problem.
PS. If I do not use Window isModal:true, then there is no hard mask all and logic will be skipped on 1) step.
Here is a small demo what I'm talking about: just focus on first inline item and then press Tab multiple times.
If you need any additional info just ask :)
I've a problem with inline ListGrid editing, if one of field is custom CanvasItem then it breaks focus navigation with "tab" button. It just focus on a first widget on screen.
My custom CanvasItem contains DynamicForm with two more fields (but with one field it doesn't work either).
Tested latest version: v10.0p_2015-11-29/LGPL Deployment but doesn't work on 2015-07-xx build too.
Debug information: Then I press "tab" while I have focus in my second field of "CustomCanvasItem", then system reacts as follows:
1) isc.EventHandler.addClassMethods.handleKeyPress(), ISC_Core.js:33582
find that button "Tab" pressed, and ckickMaskUp() exists with topHardMask, and has focusCanvas, then call focusInNExtTabElement() on that canvas.
2) isc.CanvasItem.addProperties._canvas_focusInNextTabElement(), ISC_Forms.js:35094
Check is our canvas is instance of DynamicForm and delegate to DynamicForm.focusInNextTabElement();
3) isc.DynamicForm.addMethods._focusInNextTabElement(), ISC_Forms.js:13228 (it's our CanvasItem's form)
We've reached the end of all our items and try to focus on next widget instead of item
4) isc.Canvas.addMethods._focusInNextTabElement(), ISC_Core.js:65293
just forward to DynamicForm
5) isc.DynamicForm.addMethods._focusInNextTabElement(), ISC_Forms.js:13168 (it's ListGrid's edit form)
Here is on first lines there is check condition if target is masked then skip logic, and go to next widget instead.
Because we have a hardmask this logic will be triggered and no more default "focus to next item" behaviour.
If I am removing that checking mask condition then all steping to next field behaviour starts work correctly.
I know that it's not correct way to fix, but I hope this would be enough information to quickly find a problem.
PS. If I do not use Window isModal:true, then there is no hard mask all and logic will be skipped on 1) step.
Here is a small demo what I'm talking about: just focus on first inline item and then press Tab multiple times.
Code:
isc.ClassFactory.defineClass("CustomCanvasItem", "CanvasItem");
isc.CustomCanvasItem.addMethods({
createCanvas: function () {
var inputBoxProperties = isc.addProperties({ID: this.ID + "_doubleItem"}, {
name: "amount",
autoDraw: false, ceator: this, _autoAssignedName: true, showTitle: false,
textAlign: "right", width: "*", showHint: false, validateOnChange: true
});
var currencySelectItemProperties = isc.addProperties({ID: this.ID + "_comboBox"}, {
name: "currency",
autoDraw: false, creator: this, _autoAssignedName: true, showTitle: false, width: "*"
});
return this.createAutoChild("inputForm", {
_constructor: "DynamicForm",
autoDraw: false,
writeFormTag: false,
width: "*",
colWidths: ['*', '*'],
autoParent: "none",
numCols: 2,
minColWidth: 0,
flattenItems: true,
overflow: "hidden",
cellPadding: 0,
items: [inputBoxProperties, currencySelectItemProperties]
});
}
});
isc.Window.create({
width: 1200, height: 910, autoCenter: true,
// this option set will affect handleKeyPress(): line: "if (this.clickMaskUp() && lastEvent.keyName == this._$Tab) {"
// and at that line will be triggered "_canvas_focusInNextTabElement".
isModal: true,
//------ without these arguments no any handlers will be triggered on "tab" at all.
items: [
isc.ListGrid.create({
autoDraw: false,
canEdit: true,
alwaysShowEditors: true,
width: "100%",
fields: [{name: 'a'}, {name: 'b'},{name: 'c', editorType: "CustomCanvasItem"},{name: 'd'}],
data: [{}]
})
]
});
Comment