SmartClient Version: v10.1p_2016-02-24/Enterprise Development Only (built 2016-02-24)
Chrome on OSX
please modify the #drawKnobs sample like this (I've just added an ID 'testDrawRect' to the "DrawRect" DrawPane):
then open the 'DrawRect' section, and execute testDrawRect.destroyItems() or testDrawRect.erase() and you'll see that only the resize knobs are destroyed and then there's this error:
Chrome on OSX
please modify the #drawKnobs sample like this (I've just added an ID 'testDrawRect' to the "DrawRect" DrawPane):
Code:
// In this sample, a DrawPane is created to hold each of nine different types
// of DrawItems: DrawLine, DrawRect, DrawOval, DrawTriangle, DrawCurve,
// DrawShape, DrawLinePath, DrawImage, and DrawLabel. For each item a
// DynamicForm is created with checkboxes to toggle the control knobs available
// to the item.
// The nine DrawPanes will all have the same configuration defined in the
// following class:
isc.defineClass("DemoDrawPane", "DrawPane").addProperties({
autoDraw: false,
margin: 2,
width: "100%",
height: "*",
border: "1px solid #f0f0f0",
overflow: "hidden"
});
// The nine forms will be instances of the following DemoForm class. It
// creates a checkbox for each KnobType and handles calling DrawItme.showKnobs()
// and hideKnobs() when the checkboxes are toggled.
isc.defineClass("DemoForm", "DynamicForm").addProperties({
addPropertiesOnCreate: false,
init : function (drawItem, knobTypes) {
var numKnobTypes = knobTypes.length,
items = this.items = new Array(numKnobTypes),
initialValues = this.values = {};
this.numCols = numKnobTypes;
// Create a checkbox for each KnobType that shows/hides that type of
// control knob.
for (var i = 0; i < numKnobTypes; i++) {
var knobType = knobTypes[i];
items[i] = {
editorType: "CheckboxItem",
name: knobType,
title: knobType,
showTitle: false,
changed : function (form, item, value) {
var drawItem = form.drawItem,
// The KnobType controlled by this checkbox was used
// for the name.
knob = item.name;
drawItem[value ? "showKnobs" : "hideKnobs"].call(drawItem, knob);
}
};
// Initially check the checkbox if the DrawItem is showing this
// type of control knob.
initialValues[knobType] = (
drawItem.knobs != null &&
drawItem.knobs.contains(knobType));
}
// Save the DrawItem with this form so that it may be referenced from within
// the changed() method of the checkboxes.
this.drawItem = drawItem;
this.Super("init", arguments);
}
});
// The nine DrawPanes and accompanying DynamicForms will be placed in their own
// section of a SectionStack. This method generates these sections.
var createSection = function (drawItem, expanded, knobTypes) {
var title = drawItem.getClassName(),
drawPane = drawItem.drawPane,
knobsForm = isc.DemoForm.create(drawItem, knobTypes);
// Place a slider at the bottom of each section to control the rotation of
// the DrawItem.
var minValue = 0, maxValue = 360, numValues = 361,
rotationSlider = isc.Slider.create({
vertical: false,
value: 0,
minValue: minValue,
maxValue: maxValue,
numValues: numValues,
showValue: false,
width: 300,
height: 50,
title: "Rotation",
previousValue: 0,
drawItem: drawItem,
valueChanged : function (value) {
this.drawItem.rotateBy(value - this.previousValue);
this.previousValue = value;
}
});
return {
title: title,
expanded: expanded,
controls: [knobsForm],
items: [
isc.VLayout.create({
width: "100%",
height: 250,
members: [drawPane, rotationSlider]
})
]
};
};
// Create the nine DrawItems:
var drawLine = isc.DrawLine.create({
drawPane: isc.DemoDrawPane.create(),
startPoint: [200, 20],
endPoint: [400, 70],
keepInParentRect: true
});
var drawRect = isc.DrawRect.create({
drawPane: isc.DemoDrawPane.create({ID:"testDrawRect"}),
left: 160,
top: 30,
width: 50,
height: 120,
keepInParentRect: true,
knobs: ["resize"]
});
var drawOval = isc.DrawOval.create({
drawPane: isc.DemoDrawPane.create(),
left: 450,
top: 10,
width: 70,
height: 140,
keepInParentRect: true,
knobs: ["resize"]
});
var drawTriangle = isc.DrawTriangle.create({
drawPane: isc.DemoDrawPane.create(),
points: [[75, 50], [100, 100], [50, 100]],
keepInParentRect: true,
knobs: ["resize"]
});
var drawCurve = isc.DrawCurve.create({
drawPane: isc.DemoDrawPane.create(),
startPoint: [60, 140],
endPoint: [200, 10],
controlPoint1: [20, 20],
controlPoint2: [300, 120],
keepInParentRect: true
});
var drawShape = isc.DrawShape.create({
drawPane: isc.DemoDrawPane.create(),
commands: [{
type: "moveto", args: [275, 50]
}, {
type: "lineto",
args: [
[287, 50], [300, 62], [312, 62], [325, 62], [325, 87], [312, 87],
[300, 87], [287, 100], [275, 100]]
}, {
type: "close"
}],
keepInParentRect: true,
knobs: ["resize"]
});
var drawLinePath = isc.DrawLinePath.create({
drawPane: isc.DemoDrawPane.create(),
startPoint: [200, 20],
endPoint: [400, 70],
keepInParentRect: true
});
var drawImage = isc.DrawImage.create({
drawPane: isc.DemoDrawPane.create(),
left: 250,
top: 30,
width: 48,
height: 48,
src: "/isomorphic/system/reference/exampleImages/pieces/48/piece_red.png",
keepInParentRect: true,
knobs: ["resize"],
useMatrixFilter: true
});
var drawLabel = isc.DrawLabel.create({
drawPane: isc.DemoDrawPane.create(),
left: 160,
top: 30,
contents: "DrawLabel",
fontSize: 25,
fontWeight: "normal",
fontStyle: "italic",
fontFamily: "Times New Roman, serif",
keepInParentRect: true
});
// Put everything together in a SectionStack.
isc.SectionStack.create({
width: "100%",
overflow: "visible",
visibilityMode: "multiple",
sections: [
createSection(drawLine, true, ["startPoint", "endPoint"]),
createSection(drawRect, false, ["resize", "move"]),
createSection(drawOval, false, ["resize", "move"]),
createSection(drawTriangle, true, ["resize", "move"]),
createSection(drawCurve, false,
["startPoint", "endPoint", "controlPoint1", "controlPoint2"]),
createSection(drawShape, true, ["resize", "move"]),
createSection(drawLinePath, false,
["startPoint", "endPoint", "controlPoint1", "controlPoint2"]),
createSection(drawImage, false, ["resize", "move"]),
createSection(drawLabel, false, ["move"])
]
});
Code:
15:47:13.850:TMR4:WARN:Log:TypeError: Cannot read property 'destroy' of undefined
Stack from error.stack:
DrawPane.erase(<no args: exited>) on [DemoDrawPane ID:testDrawRect] @ ISC_Drawing.js:201:156
DrawPane.destroyItems(<no args: exited>) on [DemoDrawPane ID:testDrawRect] @ ISC_Drawing.js:202:313
eval(<no args: exited>) @ [no file]:1:14
eval(<no args: exited>) on [Class Log] @ [no file]:3:8
[c]Class.evalWithVars(<no args: exited>) on [Class Class] @ ISC_Core.js:306:62
[c]Log.evaluate(_1=>"testDrawRect.destroyItems()", _2=>Obj) on [Class Log] @ ISC_Core.js:1075:667
LogViewer.evaluate(_1=>"testDrawRect.destroyItems()", _2=>Obj) on [LogViewer ID:undefined] @ ISC_Core.js:1107:350
DebugTarget.evalJSWithDevConsoleVars(_1=>"testDrawRect.destroyItems()", _2=>Obj, _3=>null) on [DebugTarget ID:undefined] @ ISC_Core.js:1879:1563
call(_1=>Obj, _2=>undef, _3=>undef) on [DebugTarget ID:undefined] @ ISC_Core.js:1859:17
handlePacket(_1=>Obj, _2=>[MessagingDMISocket ID:isc_MessagingDMISocket_5], _3=>[object Window]) on [DebugTarget ID:undefined] @ ISC_Core.js:1849:208
packetReceived(_6=>Obj, _7=>[MessagingDMISocket ID:isc_MessagingDMISocket_5], _8=>[object Window]) on [MessagingDMISocket ID:isc_MessagingDMISocket_0] @ ISC_Core.js:1851:164
receive(_1=>Obj, _2=>[MessagingDMISocket ID:isc_MessagingDMISocket_5], _3=>[object Window]) on [MessagingDMISocket ID:isc_MessagingDMISocket_0] @ ISC_Core.js:1839:80
[c]Class.fireCallback(_1=>Obj, _2=>null, _3=>null, _4=>null, _5=>true) on [Class Timer] @ ISC_Core.js:295:104
Timer._fireTimeout(_1=>"$ir394", _2=>426, _3=>undef) on [Class Timer] @ ISC_Core.js:1353:166
<anonymous>() @ ISC_Core.js:1350:40
15:47:13.853:TMR4[E0]:WARN:Log:TypeError: Cannot read property 'quadTree' of null
Stack from error.stack:
DrawItem._setupEventParent(<no args: exited>) on [DrawRect ID:isc_DrawRect_0] @ ISC_Drawing.js:414:51
DrawPane._drawBitmapDrawItems(<no args: exited>) on [DemoDrawPane ID:testDrawRect] @ ISC_Drawing.js:277:23
DrawPane.redrawBitmapNow(<no args: exited>) on [DemoDrawPane ID:testDrawRect] @ ISC_Drawing.js:275:216
<anonymous>(<no args: exited>) @ ISC_Drawing.js:269:177
[c]EventHandler.runTeas(<no args: exited>) on [Class EventHandler] @ ISC_Core.js:1717:106
EventHandler._clearThread(<no args: exited>) on [Class EventHandler] @ ISC_Core.js:1716:103
Timer._fireTimeout(<no args: exited>) on [Class Timer] @ ISC_Core.js:1353:210
<anonymous>(<no args: exited>) @ ISC_Core.js:1350:40
Comment