From 860c61f425f53ae1a69184fe65c739fec22381eb Mon Sep 17 00:00:00 2001 From: Xu Zhang Date: Mon, 25 Jun 2012 17:40:34 +0800 Subject: [PATCH 1/2] [Property View] Bug fix: only show widget matching ShowInProperty Add a check in function refresh(): in case property of some widget such as design is shown in property view. --- src/js/views/property.js | 3 ++- src/js/widgets.js | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/js/views/property.js b/src/js/views/property.js index e40e2e86..8c3e289c 100644 --- a/src/js/views/property.js +++ b/src/js/views/property.js @@ -62,7 +62,8 @@ var node; widget = widget || this; if (event) { - if (event.node && !(event.name === "modelUpdated" && + if (event.node && BWidget.isShownInProperty(event.node.getType()) + && !(event.name === "modelUpdated" && event.type === "nodeRemoved")) { widget._showProperties(event.node); } else { diff --git a/src/js/widgets.js b/src/js/widgets.js index 87f6ea6c..f6fcf046 100644 --- a/src/js/widgets.js +++ b/src/js/widgets.js @@ -105,6 +105,8 @@ var BCommonProperties = { * a required property name (see #3 above). Existance of * this object implies the textContent node of the * resulting DOM element is editable in-line + * 16) showInProperty: boolean, whether widget is shown in property view ( + * default: true) * * Each zone description in the array should be an object with: * 1) name identifying the zone point @@ -194,6 +196,7 @@ var BWidgetRegistry = { parent: "Base", allowIn: [], showInPalette: false, + showInProperty: false, selectable: false, moveable: false, properties: { @@ -427,6 +430,7 @@ var BWidgetRegistry = { parent: "Base", allowIn: "Page", showInPalette: false, + showInProperty: false, selectable: false, moveable: false, template: '
', @@ -1043,6 +1047,7 @@ var BWidgetRegistry = { parent: "Base", allowIn: "SelectMenu", showInPalette: false, + showInProperty: false, selectable: false, moveable: false, properties: { @@ -1580,6 +1585,7 @@ var BWidgetRegistry = { Block: { parent: "Base", showInPalette: false, + showInProperty: false, selectable: false, outlineLabel: function (node) { var columns, row, col, children, map; @@ -1915,6 +1921,21 @@ var BWidget = { return false; }, + /** + * Tests whether this widget type should be shown in the property view + * + * @param {String} widgetType The type of the widget. + * @return {Boolean} true if this widget is to be shown in the property view, + * false if not or it is undefined. + */ + isShownInProperty: function (widgetType) { + var widget = BWidgetRegistry[widgetType]; + if (typeof widget === "object" && widget.showInProperty !== false) { + return true; + } + return false; + }, + /** * Tests whether this widget type should be shown with a drag header bar. * From f1a1654306efa5075abe66c22716409f7be81659 Mon Sep 17 00:00:00 2001 From: Xu Zhang Date: Mon, 25 Jun 2012 19:15:54 +0800 Subject: [PATCH 2/2] [Outline View] enforce check in _modelUpdatedHandler only update view when widget can be shown in outline. Orignally, we ignore property of design changes. When property of design node changes, outline view doesn't need update --- src/js/views/outline.js | 42 +++++++++++++++++++++-------------------- src/js/widgets.js | 21 +++++++++++++++++++++ 2 files changed, 43 insertions(+), 20 deletions(-) diff --git a/src/js/views/outline.js b/src/js/views/outline.js index 4fea8750..43193cb3 100644 --- a/src/js/views/outline.js +++ b/src/js/views/outline.js @@ -93,25 +93,28 @@ _modelUpdatedHandler: function(event, widget) { widget = widget || this; - switch (event.type) { - case "nodeAdded": - widget.addNode(event.node); - break; - case "nodeRemoved": - widget.removeNode(event.node, event.parent); - break; - case "nodeMoved": - widget.moveNode(event.node, event.oldParent); - break; - case "propertyChanged": - widget.removeNode(event.node); - widget.addNode(event.node); - widget.setSelected(widget._getSelected()); - break; - default: - console.warning('Unknown type of modelUpdated event:' + if (event.node && + BWidget.isShownInOutline(event.node.getType())) { + switch (event.type) { + case "nodeAdded": + widget.addNode(event.node); + break; + case "nodeRemoved": + widget.removeNode(event.node, event.parent); + break; + case "nodeMoved": + widget.moveNode(event.node, event.oldParent); + break; + case "propertyChanged": + widget.removeNode(event.node); + widget.addNode(event.node); + widget.setSelected(widget._getSelected()); + break; + default: + console.warning('Unknown type of modelUpdated event:' + event.type); - break; + break; + } } }, _getParent: function (node) { @@ -136,8 +139,7 @@ } type = admNode.getType(); - showInOutline = BWidget.isPaletteWidget(type) || - (type === "Page"); + showInOutline = BWidget.isShownInOutline(type); label = BWidget.getDisplayLabel(type); if (showInOutline) { treeNode[label] = childNodes; diff --git a/src/js/widgets.js b/src/js/widgets.js index f6fcf046..d8f7ae23 100644 --- a/src/js/widgets.js +++ b/src/js/widgets.js @@ -107,6 +107,8 @@ var BCommonProperties = { * resulting DOM element is editable in-line * 16) showInProperty: boolean, whether widget is shown in property view ( * default: true) + * 17) showInOutline: boolean, whether widget is shown in outline view ( + * default: true) * * Each zone description in the array should be an object with: * 1) name identifying the zone point @@ -197,6 +199,7 @@ var BWidgetRegistry = { allowIn: [], showInPalette: false, showInProperty: false, + showInOutline: false, selectable: false, moveable: false, properties: { @@ -431,6 +434,7 @@ var BWidgetRegistry = { allowIn: "Page", showInPalette: false, showInProperty: false, + showInOutline: false, selectable: false, moveable: false, template: '
', @@ -1048,6 +1052,7 @@ var BWidgetRegistry = { allowIn: "SelectMenu", showInPalette: false, showInProperty: false, + showInOutline: false, selectable: false, moveable: false, properties: { @@ -1586,6 +1591,7 @@ var BWidgetRegistry = { parent: "Base", showInPalette: false, showInProperty: false, + showInOutline: false, selectable: false, outlineLabel: function (node) { var columns, row, col, children, map; @@ -1936,6 +1942,21 @@ var BWidget = { return false; }, + /** + * Tests whether this widget type should be shown in the outline view + * + * @param {String} widgetType The type of the widget. + * @return {Boolean} true if this widget is to be shown in the outline view, + * false if not or it is undefined. + */ + isShownInOutline: function (widgetType) { + var widget = BWidgetRegistry[widgetType]; + if (typeof widget === "object" && widget.showInOutline !== false) { + return true; + } + return false; + }, + /** * Tests whether this widget type should be shown with a drag header bar. *