mirror of https://github.com/buggins/dlangui.git
TreeWidget expand/collapse notification for items - implmement #432
This commit is contained in:
parent
54356dbca1
commit
f0ab7f1b45
|
@ -112,7 +112,7 @@ class StatusLine : HorizontalLayout {
|
|||
void initialize() {
|
||||
_defStatus = new TextWidget("STATUS_LINE_TEXT");
|
||||
_defStatus.layoutWidth(FILL_PARENT);
|
||||
_defStatus.text = "DLANGUI"d;
|
||||
_defStatus.text = " "d;
|
||||
addChild(_defStatus);
|
||||
_backgroundOperationPanel = new StatusLineBackgroundOperationPanel("BACKGROUND_OP_STATUS");
|
||||
addChild(_backgroundOperationPanel);
|
||||
|
|
|
@ -355,6 +355,10 @@ interface OnTreeStateChangeListener {
|
|||
void onTreeStateChange(TreeItems source);
|
||||
}
|
||||
|
||||
interface OnTreeExpandedStateListener {
|
||||
void onTreeExpandedStateChange(TreeItems source, TreeItem item);
|
||||
}
|
||||
|
||||
interface OnTreeSelectionChangeListener {
|
||||
void onTreeItemSelected(TreeItems source, TreeItem selectedItem, bool activated);
|
||||
}
|
||||
|
@ -364,6 +368,7 @@ class TreeItems : TreeItem {
|
|||
Listener!OnTreeContentChangeListener contentListener;
|
||||
Listener!OnTreeStateChangeListener stateListener;
|
||||
Listener!OnTreeSelectionChangeListener selectionListener;
|
||||
Listener!OnTreeExpandedStateListener expandListener;
|
||||
|
||||
protected bool _noCollapseForSingleTopLevelItem;
|
||||
@property bool noCollapseForSingleTopLevelItem() { return _noCollapseForSingleTopLevelItem; }
|
||||
|
@ -408,13 +413,20 @@ class TreeItems : TreeItem {
|
|||
}
|
||||
|
||||
override void toggleExpand(TreeItem item) {
|
||||
bool expandChanged = false;
|
||||
if (item.expanded) {
|
||||
if (item.canCollapse())
|
||||
if (item.canCollapse()) {
|
||||
item.collapse();
|
||||
} else
|
||||
expandChanged = true;
|
||||
}
|
||||
} else {
|
||||
item.expand();
|
||||
expandChanged = true;
|
||||
}
|
||||
if (stateListener.assigned)
|
||||
stateListener(this);
|
||||
if (expandChanged && expandListener.assigned)
|
||||
expandListener(this, item);
|
||||
}
|
||||
|
||||
override void selectItem(TreeItem item) {
|
||||
|
@ -695,13 +707,14 @@ class TreeItemWidget : HorizontalLayout {
|
|||
|
||||
|
||||
/// Abstract tree widget
|
||||
class TreeWidgetBase : ScrollWidget, OnTreeContentChangeListener, OnTreeStateChangeListener, OnTreeSelectionChangeListener, OnKeyHandler {
|
||||
class TreeWidgetBase : ScrollWidget, OnTreeContentChangeListener, OnTreeStateChangeListener, OnTreeSelectionChangeListener, OnTreeExpandedStateListener, OnKeyHandler {
|
||||
|
||||
protected TreeItems _tree;
|
||||
|
||||
@property ref TreeItems items() { return _tree; }
|
||||
|
||||
Signal!OnTreeSelectionChangeListener selectionChange;
|
||||
Signal!OnTreeExpandedStateListener expandedChange;
|
||||
/// allows to provide individual popup menu for items
|
||||
Listener!OnTreePopupMenuListener popupMenu;
|
||||
|
||||
|
@ -737,6 +750,8 @@ class TreeWidgetBase : ScrollWidget, OnTreeContentChangeListener, OnTreeStateCh
|
|||
_tree.contentListener = this;
|
||||
_tree.stateListener = this;
|
||||
_tree.selectionListener = this;
|
||||
_tree.expandListener = this;
|
||||
|
||||
_needUpdateWidgets = true;
|
||||
_needUpdateWidgetStates = true;
|
||||
acceleratorMap.add( [
|
||||
|
@ -858,6 +873,11 @@ class TreeWidgetBase : ScrollWidget, OnTreeContentChangeListener, OnTreeStateCh
|
|||
requestLayout();
|
||||
}
|
||||
|
||||
override void onTreeExpandedStateChange(TreeItems source, TreeItem item) {
|
||||
if (expandedChange.assigned)
|
||||
expandedChange(source, item);
|
||||
}
|
||||
|
||||
TreeItemWidget findItemWidget(TreeItem item) {
|
||||
for (int i = 0; i < _contentWidget.childCount; i++) {
|
||||
TreeItemWidget child = cast(TreeItemWidget) _contentWidget.child(i);
|
||||
|
|
Loading…
Reference in New Issue