Prevent unfolding of nodes without children
This commit is contained in:
parent
909d587c53
commit
573a835022
4 changed files with 20 additions and 8 deletions
|
|
@ -34,7 +34,7 @@ narrowDrawState nodeId ds = ds
|
|||
nodeToWidget :: Bool -> Node -> Widget ResourceName
|
||||
nodeToWidget focused node =
|
||||
let nodeWidget = txt $ nodeText node
|
||||
expandStyle = if null (nodeChildren node) then "noexpand" else "expand"
|
||||
expandStyle = if hasChildren node then "expand" else "noexpand"
|
||||
focusStyle = if focused then "focus" else "nofocus"
|
||||
in withDefAttr focusStyle $ withDefAttr expandStyle nodeWidget
|
||||
|
||||
|
|
|
|||
|
|
@ -57,7 +57,12 @@ newTree node focused unfolded = Tree
|
|||
, treeUnfolded = safeUnfolded
|
||||
}
|
||||
where
|
||||
safeUnfolded = Set.filter (isValidPath node) unfolded
|
||||
isValidFold :: Node -> Path -> Bool
|
||||
isValidFold n p = case applyPath p n of
|
||||
Nothing -> False
|
||||
Just childNode -> hasChildren childNode
|
||||
|
||||
safeUnfolded = Set.filter (isValidFold node) unfolded
|
||||
safeFocused = findNearestFocus (applyFolds safeUnfolded node) focused
|
||||
|
||||
-- | Switch out a tree's node, keeping as much of the focus and folding
|
||||
|
|
@ -137,14 +142,13 @@ isCurrentFolded tree = not $ treeFocused tree `Set.member` treeUnfolded tree
|
|||
|
||||
-- | Fold the currently focused node. Does nothing if it is already folded.
|
||||
foldCurrent :: Tree -> Tree
|
||||
foldCurrent tree@Tree {treeFocused = f, treeUnfolded = u} =
|
||||
let foldedTree = withFolds tree {treeUnfolded = Set.delete f u}
|
||||
in foldedTree {treeNode = treeNode tree}
|
||||
foldCurrent Tree{treeNode=n, treeFocused=f, treeUnfolded=u} =
|
||||
newTree n f $ Set.delete f u
|
||||
|
||||
-- | Unfold the currently focused node. Does nothing if it is already unfolded.
|
||||
unfoldCurrent :: Tree -> Tree
|
||||
unfoldCurrent tree@Tree {treeFocused = f, treeUnfolded = u} =
|
||||
tree {treeUnfolded = Set.insert f u}
|
||||
unfoldCurrent Tree{treeNode=n, treeFocused=f, treeUnfolded=u} =
|
||||
newTree n f $ Set.insert f u
|
||||
|
||||
-- | Toggle whether the currently focused node is folded.
|
||||
toggleFold :: Tree -> Tree
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue