diff --git a/ivette/src/frama-c/kernel/ASTview.tsx b/ivette/src/frama-c/kernel/ASTview.tsx index d6f34fe68bf521440268addf91848f0cece1405d..ff9a0cf6f093df79ac645025ffb177ffde0dac8e 100644 --- a/ivette/src/frama-c/kernel/ASTview.tsx +++ b/ivette/src/frama-c/kernel/ASTview.tsx @@ -701,6 +701,12 @@ export default function ASTview(): JSX.Element { const hovered = States.useHovered() ?? Ast.markerDefault; React.useEffect(() => Hovered.set(view, hovered), [view, hovered]); + // State unFoldButton + const [isFoldText, setIsFoldText] = React.useState(false); + const icon = 'CHEVRON.' + (isFoldText ? 'EXPAND' : 'CONTRACT'); + const title = isFoldText ? 'Expand' : 'Collapse'; + const unFoldButtonClicked = (): void => { setIsFoldText(!isFoldText); }; + // Multiple selection const { markers } = Locations.useSelection(); React.useEffect(() => Multiple.set(view, markers), [view, markers]); @@ -716,6 +722,9 @@ export default function ASTview(): JSX.Element { // Printed AST const text = useAST(scope); React.useEffect(() => Text.set(view, text), [view, text]); + React.useEffect(() => { + isFoldText ? Editor.foldAll(view) : Editor.unfoldAll(view); + }, [view, isFoldText, text]); // EVA Callbacks const dead = useDead(scope); @@ -732,17 +741,9 @@ export default function ASTview(): JSX.Element { <TitleBar> <Filler /> <IconButton - icon='CHEVRON.CONTRACT' - visible={true} - onClick={() => Editor.foldAll(view)} - title='Collapse all multi-line ACSL properties' - className="titlebar-thin-icon" - /> - <IconButton - icon='CHEVRON.EXPAND' - visible={true} - onClick={() => Editor.unfoldAll(view)} - title='Expand all multi-line ACSL properties' + icon={icon} + onClick= {unFoldButtonClicked} + title={title + ' all multi-line ACSL properties'} className="titlebar-thin-icon" /> <Inset />