diff --git a/dlanguilib.visualdproj b/dlanguilib.visualdproj index c53bae16..94f5d5d5 100644 --- a/dlanguilib.visualdproj +++ b/dlanguilib.visualdproj @@ -328,6 +328,7 @@ + diff --git a/examples/example1/main.d b/examples/example1/main.d index 8f2901d6..a0924eb3 100644 --- a/examples/example1/main.d +++ b/examples/example1/main.d @@ -48,6 +48,18 @@ extern (C) int UIAppMain(string[] args) { static if (true) { LinearLayout layout = new LinearLayout(); + + TabWidget tabs = new TabWidget("TABS"); + tabs.addTab("id1", "Tab 1"d); + tabs.addTab("id2", "Tab 2 label"d); + tabs.addTab("id3", "Tab 3 label"d); + tabs.addTab("id4", "Tab 4 label"d); + tabs.addTab("id5", "Tab 5 label"d); + tabs.addTab("id6", "Tab 6 label"d); + tabs.addTab("id7", "Tab 7 label"d); + tabs.addTab("id8", "Tab 8 label"d); + layout.addChild(tabs); + layout.addChild((new TextWidget()).textColor(0x00802000).text("Text widget 0")); layout.addChild((new TextWidget()).textColor(0x40FF4000).text("Text widget")); layout.addChild((new Button("BTN1")).textResource("EXIT")); //.textColor(0x40FF4000) diff --git a/examples/example1/res/close.png b/examples/example1/res/close.png new file mode 100644 index 00000000..1aca4b79 Binary files /dev/null and b/examples/example1/res/close.png differ diff --git a/examples/example1/res/tab_more.png b/examples/example1/res/tab_more.png new file mode 100644 index 00000000..badc2a6a Binary files /dev/null and b/examples/example1/res/tab_more.png differ diff --git a/src/dlangui/all.d b/src/dlangui/all.d index aed7e822..5d271c0b 100644 --- a/src/dlangui/all.d +++ b/src/dlangui/all.d @@ -8,5 +8,6 @@ public import dlangui.widgets.widget; public import dlangui.widgets.controls; public import dlangui.widgets.layouts; public import dlangui.widgets.lists; +public import dlangui.widgets.tabs; public import dlangui.graphics.fonts; public import dlangui.core.i18n; diff --git a/src/dlangui/core/i18n.d b/src/dlangui/core/i18n.d index fa9b2e01..ee90466d 100644 --- a/src/dlangui/core/i18n.d +++ b/src/dlangui/core/i18n.d @@ -6,9 +6,21 @@ import std.utf; /// container for UI string - either raw value or string resource ID struct UIString { /// if not null, use it, otherwise lookup by id - dstring _value; + private dstring _value; /// id to find value in translator - string _id; + private string _id; + + /// create string with i18n resource id + this(string id) { + _id = id; + } + /// create string with raw value + this(dstring value) { + _value = value; + } + + + @property string id() const { return _id; } @property void id(string ID) { _id = ID; @@ -145,13 +157,14 @@ class UIStringList { } return count > 0; } + /// load strings from file (utf8, id=value lines) bool load(string filename) { import std.stream; import std.file; try { Log.d("Loading string resources from file ", filename); - if (!exists(filename) && isFile(filename)) { + if (!exists(filename) || !isFile(filename)) { Log.e("File does not exist: ", filename); return false; } diff --git a/src/dlangui/widgets/controls.d b/src/dlangui/widgets/controls.d index 51ee98b6..0891a03e 100644 --- a/src/dlangui/widgets/controls.d +++ b/src/dlangui/widgets/controls.d @@ -19,6 +19,12 @@ class TextWidget : Widget { requestLayout(); return this; } + /// set text to show + @property Widget text(ref UIString s) { + _text = s; + requestLayout(); + return this; + } /// set text resource ID to show @property Widget textResource(string s) { _text = s; @@ -575,9 +581,3 @@ class ScrollBar : AbstractSlider, OnClickHandler { } } -class TabItem { -} - -class TabWidget { - -} diff --git a/src/dlangui/widgets/layouts.d b/src/dlangui/widgets/layouts.d index 7b1cf9ca..9c716918 100644 --- a/src/dlangui/widgets/layouts.d +++ b/src/dlangui/widgets/layouts.d @@ -1,6 +1,6 @@ module dlangui.widgets.layouts; -import dlangui.widgets.widget; +public import dlangui.widgets.widget; /// helper for layouts struct LayoutItem { diff --git a/src/dlangui/widgets/widget.d b/src/dlangui/widgets/widget.d index df8f679b..ea389697 100644 --- a/src/dlangui/widgets/widget.d +++ b/src/dlangui/widgets/widget.d @@ -536,7 +536,7 @@ struct WidgetList { protected Widget[] _list; protected int _count; /// returns count of items - @property int count() { return _count; } + @property int count() const { return _count; } /// get item by index Widget get(int index) { assert(index >= 0 && index < _count, "child index out of range"); @@ -549,6 +549,18 @@ struct WidgetList { _list[_count++] = item; return item; } + /// add item to list + Widget insert(Widget item, int index = -1) { + if (index > _count || index < 0) + index = _count; + if (_list.length <= _count) // resize + _list.length = _list.length < 4 ? 4 : _list.length * 2; + for (int i = _count; i > index; i--) + _list[i] = _list[i - 1]; + _list[index] = item; + _count++; + return item; + } /// find child index for item, return -1 if not found int indexOf(Widget item) { for (int i = 0; i < _count; i++)