tree view - reacts on mouse - expand / select items

This commit is contained in:
Vadim Lopatin 2014-12-04 09:25:54 +03:00
parent 8a64035050
commit 819bbdabdd
1 changed files with 17 additions and 0 deletions

View File

@ -219,15 +219,23 @@ class TreeItems : TreeItem {
} }
const int DOUBLE_CLICK_TIME_MS = 250;
class TreeItemWidget : HorizontalLayout { class TreeItemWidget : HorizontalLayout {
TreeItem _item; TreeItem _item;
TextWidget _tab; TextWidget _tab;
ImageWidget _expander; ImageWidget _expander;
ImageWidget _icon; ImageWidget _icon;
TextWidget _label; TextWidget _label;
long lastClickTime;
this(TreeItem item) { this(TreeItem item) {
super(item.id); super(item.id);
styleId = "TREE_ITEM"; styleId = "TREE_ITEM";
clickable = true;
focusable = true;
trackHover = true;
_item = item; _item = item;
_tab = new TextWidget("tab"); _tab = new TextWidget("tab");
dchar[] tabText; dchar[] tabText;
@ -238,14 +246,23 @@ class TreeItemWidget : HorizontalLayout {
if (_item.hasChildren) { if (_item.hasChildren) {
_expander = new ImageWidget("expander", _item.hasChildren && _item.expanded ? "arrow_right_down_black" : "arrow_right_hollow"); _expander = new ImageWidget("expander", _item.hasChildren && _item.expanded ? "arrow_right_down_black" : "arrow_right_hollow");
_expander.styleId = "TREE_ITEM_EXPANDER_ICON"; _expander.styleId = "TREE_ITEM_EXPANDER_ICON";
_expander.clickable = true;
_expander.trackHover = true;
//_expander.setState(State.Parent); //_expander.setState(State.Parent);
_expander.onClickListener.connect(delegate(Widget source) { _expander.onClickListener.connect(delegate(Widget source) {
_item.selectItem(_item);
_item.toggleExpand(_item); _item.toggleExpand(_item);
return true; return true;
}); });
} }
onClickListener.connect(delegate(Widget source) { onClickListener.connect(delegate(Widget source) {
long ts = currentTimeMillis();
_item.selectItem(_item); _item.selectItem(_item);
if (_item.hasChildren && ts - lastClickTime < DOUBLE_CLICK_TIME_MS) {
_item.toggleExpand(_item);
}
lastClickTime = ts;
return true; return true;
}); });
if (_item.iconRes.length > 0) { if (_item.iconRes.length > 0) {