diff --git a/examples/d3d/src/d3d.d b/examples/d3d/src/d3d.d index ccbd78ac..6f2297ec 100644 --- a/examples/d3d/src/d3d.d +++ b/examples/d3d/src/d3d.d @@ -22,6 +22,17 @@ extern (C) int UIAppMain(string[] args) { backgroundColor: "#C0E0E070" // semitransparent yellow background // red bold text with size = 150% of base style size and font face Arial TextWidget { text: "Hello World example for DlangUI"; textColor: "red"; fontSize: 150%; fontWeight: 800; fontFace: "Arial" } + HorizontalLayout { + layoutWidth: fill + TextWidget { text: "Text 20%"; backgroundColor:"#80FF0000"; layoutWidth: 20% } + VerticalLayout { + layoutWidth: 30% + TextWidget { text: "Text 30%"; backgroundColor:"#80FF00FF" } + TextWidget { text: "Text 30%"; backgroundColor:"#8000FFFF" } + TextWidget { text: "Text 30%"; backgroundColor:"#8000FFFF" } + } + TextWidget { text: "Text 50%"; backgroundColor:"#80FFFF00"; layoutWidth: 50% } + } // arrange controls as form - table with two columns TableLayout { colCount: 2 diff --git a/src/dlangui/widgets/styles.d b/src/dlangui/widgets/styles.d index 129a8b52..17975529 100644 --- a/src/dlangui/widgets/styles.d +++ b/src/dlangui/widgets/styles.d @@ -1217,6 +1217,16 @@ FontFamily decodeFontFamily(string s) { return FontFamily.SansSerif; } +/// decode FontWeight item name to value +FontWeight decodeFontWeight(string s) { + if (s.equal("bold")) + return FontWeight.Bold; + if (s.equal("normal")) + return FontWeight.Normal; + Log.e("unknown font weight ", s); + return FontWeight.Normal; +} + /// decode layout dimension (FILL_PARENT, WRAP_CONTENT, or just size) int decodeLayoutDimension(string s) { if (s.equal("FILL_PARENT") || s.equal("fill")) @@ -1262,6 +1272,8 @@ bool loadStyleAttributes(Style style, Element elem, bool allowStates) { style.fontFamily = decodeFontFamily(elem.tag.attr["fontFamily"]); if ("fontSize" in elem.tag.attr) style.fontSize = cast(int)decodeDimension(elem.tag.attr["fontSize"]); + if ("fontWeight" in elem.tag.attr) + style.fontWeight = cast(ushort)decodeFontWeight(elem.tag.attr["fontWeight"]); if ("layoutWidth" in elem.tag.attr) style.layoutWidth = decodeLayoutDimension(elem.tag.attr["layoutWidth"]); if ("layoutHeight" in elem.tag.attr) diff --git a/src/dlangui/widgets/tree.d b/src/dlangui/widgets/tree.d index 950f92e4..1b0eb0e1 100644 --- a/src/dlangui/widgets/tree.d +++ b/src/dlangui/widgets/tree.d @@ -184,10 +184,18 @@ class TreeItem { return root.selectedItem(); } - bool isSelected() { + @property TreeItem defaultItem() { + return root.defaultItem(); + } + + @property bool isSelected() { return (selectedItem is this); } + @property bool isDefault() { + return (defaultItem is this); + } + /// get widget text @property dstring text() { return _text; } /// set text to show @@ -344,6 +352,7 @@ class TreeItems : TreeItem { @property TreeItems noCollapseForSingleTopLevelItem(bool flg) { _noCollapseForSingleTopLevelItem = flg; return this; } protected TreeItem _selectedItem; + protected TreeItem _defaultItem; this() { super("tree"); @@ -400,6 +409,12 @@ class TreeItems : TreeItem { selectionListener(this, _selectedItem, false); } + void setDefaultItem(TreeItem item) { + _defaultItem = item; + if (stateListener.assigned) + stateListener(this); + } + override void activateItem(TreeItem item) { if (!(_selectedItem is item)) { _selectedItem = item; @@ -414,6 +429,10 @@ class TreeItems : TreeItem { return _selectedItem; } + @property override TreeItem defaultItem() { + return _defaultItem; + } + void selectNext() { if (!hasChildren) return; @@ -647,6 +666,10 @@ class TreeItemWidget : HorizontalLayout { setState(State.Selected); else resetState(State.Selected); + if (_item.isDefault) + setState(State.Default); + else + resetState(State.Default); } } diff --git a/views/res/theme_default.xml b/views/res/theme_default.xml index a07ad124..c03c1fce 100644 --- a/views/res/theme_default.xml +++ b/views/res/theme_default.xml @@ -422,8 +422,9 @@ layoutWidth="FILL_PARENT" layoutHeight="WRAP_CONTENT" align="Left|VCenter" - textFlags="Parent" - /> + textFlags="Parent"> + +