From b16ff3166c0a23c2bc0ae54f57dc3ecbcd964565 Mon Sep 17 00:00:00 2001 From: Will Johnson Date: Wed, 17 Jan 2024 13:45:57 +0000 Subject: [PATCH 1/2] fix: call model change evt on apply & internal change --- source/class/qxl/datagrid/source/ArrayDataSource.js | 1 + 1 file changed, 1 insertion(+) diff --git a/source/class/qxl/datagrid/source/ArrayDataSource.js b/source/class/qxl/datagrid/source/ArrayDataSource.js index 2e55811..0db5f20 100644 --- a/source/class/qxl/datagrid/source/ArrayDataSource.js +++ b/source/class/qxl/datagrid/source/ArrayDataSource.js @@ -62,6 +62,7 @@ qx.Class.define("qxl.datagrid.source.ArrayDataSource", { } if (value) { value.addListener("change", this.__onModelChange, this); + this.__onModelChange(); } }, From 33a3980db21b394b5f2d4b90b052383e7d947656 Mon Sep 17 00:00:00 2001 From: Will Johnson Date: Thu, 18 Jan 2024 15:15:56 +0000 Subject: [PATCH 2/2] tap handling --- source/class/qxl/datagrid/ui/WidgetPane.js | 13 +++++++------ .../datagrid/ui/factory/SimpleWidgetFactory.js | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/source/class/qxl/datagrid/ui/WidgetPane.js b/source/class/qxl/datagrid/ui/WidgetPane.js index bc8c807..3dc10d3 100644 --- a/source/class/qxl/datagrid/ui/WidgetPane.js +++ b/source/class/qxl/datagrid/ui/WidgetPane.js @@ -45,7 +45,7 @@ qx.Class.define("qxl.datagrid.ui.WidgetPane", { this.setDataSource(dataSource); } this._setLayout(new qxl.datagrid.ui.layout.Fixed()); - this.addListener("tap", this.__onTap, this); + this.addListener("tap", this.__onTap, this, true); }, properties: { @@ -216,13 +216,14 @@ qx.Class.define("qxl.datagrid.ui.WidgetPane", { */ __onTap(evt) { let widget = qx.ui.core.Widget.getWidgetByElement(evt.getOriginalTarget()); - while (widget && widget.isAnonymous()) { + let model = null; + while (widget && widget != this && !model) { + model = this.__widgetFactory.getModelForWidget(widget); + if (model) { + break; + } widget = widget.getLayoutParent(); } - if (!widget) { - return; - } - let model = this.__widgetFactory.getModelForWidget(widget); if (!model) { return; } diff --git a/source/class/qxl/datagrid/ui/factory/SimpleWidgetFactory.js b/source/class/qxl/datagrid/ui/factory/SimpleWidgetFactory.js index 036a666..c0ec5a7 100644 --- a/source/class/qxl/datagrid/ui/factory/SimpleWidgetFactory.js +++ b/source/class/qxl/datagrid/ui/factory/SimpleWidgetFactory.js @@ -26,6 +26,19 @@ qx.Class.define("qxl.datagrid.ui.factory.SimpleWidgetFactory", { extend: qxl.datagrid.ui.factory.AbstractWidgetFactory, + events: { + /** + * @typedef BindWidgetData + * @property {qx.ui.core.Widget} widget the wiget to bind + * @property {qx.core.Object} model the model the widget is bound to + * + * Fired when a widget is bound; data is {BindWidgetData} */ + "bindWidget": "qx.event.type.Data", + + /** Fired when a widget is unbound; data is {BindWidgetData} */ + "unbindWidget": "qx.event.type.Data" + }, + members: { /** * @override @@ -34,6 +47,7 @@ qx.Class.define("qxl.datagrid.ui.factory.SimpleWidgetFactory", { let bindingData = widget.getUserData("qxl.datagrid.factory.AbstractWidgetFactory.bindingData"); bindingData.binding = bindingData.column.bindWidget(widget, model, this); bindingData.model = model; + this.fireDataEvent("bindWidget", { widget, model }); }, /** @@ -44,8 +58,10 @@ qx.Class.define("qxl.datagrid.ui.factory.SimpleWidgetFactory", { if (bindingData.binding) { bindingData.binding.dispose(); } + let model = bindingData.model; bindingData.model = null; bindingData.binding = null; + this.fireDataEvent("unbindWidget", { widget, model }); }, /**