From 18092bd28a13b72be41ffcb7bbcaecf4ca3eda27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr> Date: Mon, 30 Nov 2020 17:16:49 +0100 Subject: [PATCH] [ivette] fix function filters settings --- .../src/dome/src/renderer/frame/sidebars.tsx | 2 +- ivette/src/renderer/Globals.tsx | 104 +++++++++--------- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/ivette/src/dome/src/renderer/frame/sidebars.tsx b/ivette/src/dome/src/renderer/frame/sidebars.tsx index f39e670b1e8..9a4adecb49e 100644 --- a/ivette/src/dome/src/renderer/frame/sidebars.tsx +++ b/ivette/src/dome/src/renderer/frame/sidebars.tsx @@ -134,7 +134,7 @@ export function Section(props: SectionProps) { <div className="dome-xSideBarSection"> <div className="dome-xSideBarSection-title dome-color-frame" - title={props.label} + title={props.title} onContextMenu={props.onContextMenu} > <Label label={props.label} /> diff --git a/ivette/src/renderer/Globals.tsx b/ivette/src/renderer/Globals.tsx index aa3951e2ef0..44f4747d962 100644 --- a/ivette/src/renderer/Globals.tsx +++ b/ivette/src/renderer/Globals.tsx @@ -6,25 +6,13 @@ import React from 'react'; import { Section, Item } from 'dome/frame/sidebars'; import type { Hint } from 'dome/frame/toolbars'; import * as States from 'frama-c/states'; +import { useFlipSettings } from 'dome'; import { alpha } from 'dome/data/compare'; import { functions, functionsData } from 'frama-c/api/kernel/ast'; import { isComputed } from 'frama-c/api/plugins/eva/general'; import * as Dome from 'dome'; -// -------------------------------------------------------------------------- -// --- Filters -// -------------------------------------------------------------------------- - -const defaultFilter = - { - stdlib: false, // Show functions from the Frama-C stdlib - builtin: false, // Show Frama-C builtins - undef: true, // Show undefined functions - eva_only: false, // Only show functions analyzed by Eva - selected_only: false, // Only show functions from a multiple selection - }; - // -------------------------------------------------------------------------- // --- Global Search Hints // -------------------------------------------------------------------------- @@ -64,7 +52,11 @@ export default () => { const fcts = States.useSyncArray(functions).getArray().sort( (f, g) => alpha(f.name, g.name), ); - const [filter, setFilter] = React.useState(defaultFilter); + const [stdlib, flipStdlib] = useFlipSettings('ivette.globals.stdlib', false); + const [builtin, flipBuiltin] = useFlipSettings('ivette.globals.builtin', false); + const [undef, flipUndef] = useFlipSettings('ivette.globals.undef', true); + const [selected, flipSelected] = useFlipSettings('ivette.globals.selected', false); + const [evaOnly, flipEvaOnly] = useFlipSettings('ivette.globals.evaonly', false); const multipleSelection = selection?.multiple; const multipleSelectionActive = multipleSelection?.allSelections.length > 0; const evaComputed = States.useRequest(isComputed, null); @@ -77,46 +69,45 @@ export default () => { function showFunction(fct: functionsData) { const visible = - (filter.stdlib || !fct.stdlib) - && (filter.builtin || !fct.builtin) - && (filter.undef || fct.defined) - && (!filter.eva_only || !evaComputed || (fct.eva_analyzed === true)) - && (!filter.selected_only || !multipleSelectionActive || isSelected(fct)); + (stdlib || !fct.stdlib) + && (builtin || !fct.builtin) + && (undef || fct.defined) + && (!evaOnly || !evaComputed || (fct.eva_analyzed === true)) + && (!selected || !multipleSelectionActive || isSelected(fct)); return visible; } async function onContextMenu() { - const items: Dome.PopupMenuItem[] = []; - items.push({ - label: 'Show Frama-C builtins', - checked: filter.builtin, - onClick: () => setFilter({ ...filter, builtin: !filter.builtin }), - }); - items.push({ - label: 'Show stdlib functions', - checked: filter.stdlib, - onClick: () => setFilter({ ...filter, stdlib: !filter.stdlib }), - }); - items.push({ - label: 'Show undefined functions', - checked: filter.undef, - onClick: () => setFilter({ ...filter, undef: !filter.undef }), - }); - items.push('separator'); - items.push({ - label: 'Selected only', - enabled: multipleSelectionActive, - checked: filter.selected_only, - onClick: () => { - setFilter({ ...filter, selected_only: !filter.selected_only }); + const items: Dome.PopupMenuItem[] = [ + { + label: 'Show Frama-C builtins', + checked: builtin, + onClick: flipBuiltin, }, - }); - items.push({ - label: 'Analyzed by Eva only', - enabled: evaComputed, - checked: filter.eva_only, - onClick: () => setFilter({ ...filter, eva_only: !filter.eva_only }), - }); + { + label: 'Show stdlib functions', + checked: stdlib, + onClick: flipStdlib, + }, + { + label: 'Show undefined functions', + checked: undef, + onClick: flipUndef, + }, + 'separator', + { + label: 'Selected only', + enabled: multipleSelectionActive, + checked: selected, + onClick: flipSelected, + }, + { + label: 'Analyzed by Eva only', + enabled: evaComputed, + checked: evaOnly, + onClick: flipEvaOnly, + } + ]; Dome.popupMenu(items); } @@ -135,12 +126,21 @@ export default () => { ); }; + // Filtered + + const filtered = fcts.filter(showFunction); + const nTotal = fcts.length; + const nFilter = filtered.length; + const title = `Filtered ${nFilter} / ${nTotal}`; return ( - <Section label="Functions" onContextMenu={onContextMenu} defaultUnfold> - {fcts.filter(showFunction).map(makeFctItem)} + <Section + label="Functions" + title={title} + onContextMenu={onContextMenu} defaultUnfold> + {filtered.map(makeFctItem)} </Section> ); -}; +} // -------------------------------------------------------------------------- -- GitLab