From 3bd735773fae6e352c24f9f8c3e0e7714d1f38a2 Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Fri, 5 Feb 2016 10:23:57 +0300 Subject: [PATCH] fix buggin/dlangide#138 --- src/dlangui/core/collections.d | 10 ++++++++++ src/dlangui/widgets/combobox.d | 10 ++++++++++ src/dlangui/widgets/lists.d | 29 +++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+) diff --git a/src/dlangui/core/collections.d b/src/dlangui/core/collections.d index 616affa9..6e7899d5 100644 --- a/src/dlangui/core/collections.d +++ b/src/dlangui/core/collections.d @@ -333,6 +333,16 @@ struct ObjectList(T) { } _count = 0; } + /// Support foreach + int opApply(int delegate(ref T) callback) { + int res = 0; + for(int i = 0; i < _count; i++) { + res = callback(_list[i]); + if (res) + break; + } + return res; + } ~this() { clear(); } diff --git a/src/dlangui/widgets/combobox.d b/src/dlangui/widgets/combobox.d index a13f95a0..dff9d729 100644 --- a/src/dlangui/widgets/combobox.d +++ b/src/dlangui/widgets/combobox.d @@ -162,6 +162,16 @@ class ComboBoxBase : HorizontalLayout, OnClickHandler { initialize(); } + override void onThemeChanged() { + super.onThemeChanged(); + if (_body) + _body.onThemeChanged(); + if (_adapter) + _adapter.onThemeChanged(); + if (_button) + _button.onThemeChanged(); + } + protected void initialize() { _body = createSelectedItemWidget(); _body.click = this; diff --git a/src/dlangui/widgets/lists.d b/src/dlangui/widgets/lists.d index 737c161d..a983e797 100644 --- a/src/dlangui/widgets/lists.d +++ b/src/dlangui/widgets/lists.d @@ -53,6 +53,9 @@ interface ListAdapter { ListAdapter connect(OnAdapterChangeHandler handler); /// disconnect adapter change handler ListAdapter disconnect(OnAdapterChangeHandler handler); + + /// called when theme is changed + void onThemeChanged(); } /// List adapter for simple list of widget instances @@ -114,6 +117,10 @@ class ListAdapterBase : ListAdapter { if (adapterChanged.assigned) adapterChanged.emit(this); } + + /// called when theme is changed + void onThemeChanged() { + } } /// List adapter for simple list of widget instances @@ -159,6 +166,12 @@ class WidgetListAdapter : ListAdapterBase { _widgets.clear(); updateViews(); } + /// called when theme is changed + override void onThemeChanged() { + super.onThemeChanged(); + foreach(w; _widgets) + w.onThemeChanged(); + } ~this() { //Log.d("Destroying WidgetListAdapter"); } @@ -422,6 +435,13 @@ class StringListAdapter : StringListAdapterBase { return _widget; } + /// called when theme is changed + override void onThemeChanged() { + super.onThemeChanged(); + if (_widget) + _widget.onThemeChanged(); + } + /// set one or more list item's state flags, returns updated state override uint setItemState(int index, uint flags) { uint res = super.setItemState(index, flags); @@ -489,6 +509,13 @@ class IconStringListAdapter : StringListAdapterBase { return _widget; } + /// called when theme is changed + override void onThemeChanged() { + super.onThemeChanged(); + if (_widget) + _widget.onThemeChanged(); + } + /// set one or more list item's state flags, returns updated state override uint setItemState(int index, uint flags) { uint res = super.setItemState(index, flags); @@ -894,6 +921,8 @@ class ListWidget : WidgetGroup, OnScrollHandler, OnAdapterChangeHandler { Widget w = itemWidget(i); w.onThemeChanged(); } + if (_adapter) + _adapter.onThemeChanged(); } /// Measure widget according to desired width and height constraints. (Step 1 of two phase layout).