Skip to content
Snippets Groups Projects
Commit 270a9e49 authored by Remi Lazarini's avatar Remi Lazarini Committed by David Bühler
Browse files

[Ivette] transform FctItem component to function + added infos on file section

parent 43a17649
No related branches found
No related tags found
No related merge requests found
......@@ -193,7 +193,7 @@
"FUNCTION": {
"section": "Signs",
"viewBox": "0 0 512 512",
"path": "M258.317 237.971h-50.626c3.055-17.94 5.876-34.786 8.06-47.875c7.479-44.859 18.362-89.92 28.792-105.361 c11.671-17.281 34.734-8.966 43.627 14.908c4.946 13.278 19.766 21.026 34.801 20.102c20.039-1.239 35.284-18.485 34.048-38.524 c-0.616-10.03-8.273-23.399-20.487-29.936c-17.264-9.456-37.299-13.859-58.424-13.005c-53.37 2.142-93.577 47.609-108.941 97.773 c-5.796 18.933-14.324 60.825-22.212 101.918h-57.92l-9.092 35.228h60.341c-4.836 25.821-8.952 48.184-11.332 59.977 c-6.975 34.576-16.809 96.653-49.552 100.944c-12.823-4.9-17.614-10.366-22.437-15.678c-6.442-7.104-15.941-11.318-26.254-10.682 c-18.037 1.113-31.759 16.63-30.646 34.668c1.112 18.037 17.257 27.962 34.675 30.65c99.4 8.889 137.624-63.47 152.176-122.985 c3.338-13.655 8.99-44.32 14.702-76.894h47.612L258.317 237.971zM504.553 363.021c-6.206 0-12.41 4.542-11.171 11.36c4.101 22.524-24.638 34.794-47.158 32.953 c-34.776-2.849-45.268-38.504-56.929-74.424c-0.598-1.834-1.186-3.696-1.771-5.564c7.052-12.004 14.146-24.176 19.056-32.778 c11.399-19.977 24.456-39.462 32.106-44.964c-0.479 0.35 18.02-10.128 18.097 14.713c0.022 7.167 5.701 13.439 12.998 15.636 c9.729 2.918 19.98-2.597 22.909-12.326c1.459-4.864 0.168-12.55-4.487-17.793c-6.537-7.51-18.688-15.153-28.861-18.45 c-25.709-8.322-52.747 6.216-68.818 27.333c-4.452 5.851-10.398 15.056-16.589 25.086c-8.85-25.625-19.738-47.385-38.156-53.706 c-42.294-14.523-65.772 19.067-65.772 29.537c0 12.494 34.748-5.676 53.366 39.764c6.134 14.993 10.954 27.619 15.937 41.198 c-8.616 14.838-18.24 31.546-24.392 42.493c-11.269 20.054-24.193 39.624-31.805 45.181c-8.533 6.215-18.069-1.701-18.199-14.594 c-0.066-7.16-5.788-13.396-13.099-15.545c-9.75-2.856-19.966 2.73-22.825 12.473c-1.428 4.886-0.08 12.557 4.61 17.771 c6.586 7.461 18.772 15.048 28.97 18.275c25.757 8.147 52.705-6.565 68.628-27.801c5.112-6.803 14.016-21.166 23.213-36.494 c1.19 3.275 2.408 6.642 3.706 10.212c14.891 40.897 48.061 60.698 85.63 55.665c50.882-6.817 67.012-56.806 68.254-77.258 C512 370.972 510.758 363.021 504.553 363.021z"
"path": "M258.317 237.971h-50.626c3.055-17.94 5.876-34.786 8.06-47.875c7.479-44.859 18.362-89.92 28.792-105.361 c11.671-17.281 34.734-8.966 43.627 14.908c4.946 13.278 19.766 21.026 34.801 20.102c20.039-1.239 35.284-18.485 34.048-38.524 c-0.616-10.03-8.273-23.399-20.487-29.936c-17.264-9.456-37.299-13.859-58.424-13.005c-53.37 2.142-93.577 47.609-108.941 97.773 c-5.796 18.933-14.324 60.825-22.212 101.918h-57.92l-9.092 35.228h60.341c-4.836 25.821-8.952 48.184-11.332 59.977 c-6.975 34.576-16.809 96.653-49.552 100.944c-12.823-4.9-17.614-10.366-22.437-15.678c-6.442-7.104-15.941-11.318-26.254-10.682 c-18.037 1.113-31.759 16.63-30.646 34.668c1.112 18.037 17.257 27.962 34.675 30.65c99.4 8.889 137.624-63.47 152.176-122.985 c3.338-13.655 8.99-44.32 14.702-76.894h47.612L258.317 237.971z"
},
"SPINNER": {
"section": "Signs",
......
......@@ -192,14 +192,12 @@ function List(props: ListProps): JSX.Element {
// --- Function items
// --------------------------------------------------------------------------
interface FctItemProps {
fct: functionsData;
current: string | undefined;
icon?: string;
}
function FctItem(props: FctItemProps): JSX.Element {
const { name, signature, main, stdlib, builtin, defined, decl } = props.fct;
function makeFctItem(
fct: functionsData,
scope: States.Scope,
icon?: string
): JSX.Element {
const { name, signature, main, stdlib, builtin, defined, decl } = fct;
const className = classes(
main && 'globals-main',
(stdlib || builtin) && 'globals-stdlib',
......@@ -210,11 +208,12 @@ function FctItem(props: FctItemProps): JSX.Element {
);
return (
<Item
icon={props.icon}
key={decl}
icon={icon}
className={className}
label={name}
title={signature}
selected={name === props.current}
selected={decl === scope}
onSelection={() => States.setCurrentScope(decl)}
>
{attributes && <span className="globals-attr">{attributes}</span>}
......@@ -339,22 +338,18 @@ export function useFunctionFilter(): FunctionFilterRet {
export function Functions(props: ScrollableParent): JSX.Element {
// Hooks
const scope = States.useCurrentScope();
const { kind, name } = States.useDeclaration(scope);
const ker = States.useSyncArrayProxy(Ast.functions);
const eva = States.useSyncArrayProxy(Eva.functions);
const fcts = React.useMemo(() => computeFcts(ker, eva), [ker, eva]);
const { showFunction, contextFctMenuItems } = useFunctionFilter();
// Currently selected function.
const current = (scope && kind === 'FUNCTION') ? name : undefined;
// Filtered
const items =
fcts
.filter(showFunction)
.sort((f, g) => alpha(f.name, g.name))
.map((fct) => <FctItem key={fct.key} fct={fct} current={current} />);
.map((fct) => makeFctItem(fct, scope));
return (
<List
......@@ -589,7 +584,6 @@ export function Files(props: ScrollableParent): JSX.Element {
const { scrollableParent } = props;
// Hooks
const scope = States.useCurrentScope();
const { kind, name } = States.useDeclaration(scope);
// functions
const ker = States.useSyncArrayProxy(Ast.functions);
......@@ -605,9 +599,6 @@ export function Files(props: ScrollableParent): JSX.Element {
const [showVars, flipShowVars]
= Dome.useFlipSettings('ivette.files.show.globals', true);
// Currently selected function.
const current = (scope && kind === 'FUNCTION') ? name : undefined;
interface InfosFile {
label: string,
fcts: functionsData[],
......@@ -640,17 +631,22 @@ export function Files(props: ScrollableParent): JSX.Element {
return newFiles;
}, [fcts, showFunction, variables, showVariable]);
const currentSection = React.useMemo(() => {
for( const path of Object.keys(files)) {
if(files[path].fcts.find(e => e.decl === scope) ||
files[path].vars.find(e => e.decl === scope)
) return path;
}
return undefined;
}, [files, scope]);
function getList([path, infos]: [string, InfosFile]): JSX.Element | null {
const { label, fcts, vars } = infos;
const fctsComp: JSX.Element[] = showFcts ?
fcts.map(elt => <FctItem
key={elt.key}
icon="FUNCTION"
fct={elt}
current={current} />)
fcts.map(fct => makeFctItem(fct, scope, 'FUNCTION'))
: [];
const varsComp: JSX.Element[] = showVars ?
vars.map((v) => makeVarItem(scope, v, "VARIABLE"))
vars.map((v) => makeVarItem(scope, v, 'VARIABLE'))
: [];
const items = fctsComp.concat(varsComp);
if(items.length === 0) return null;
......@@ -660,7 +656,7 @@ export function Files(props: ScrollableParent): JSX.Element {
key={path}
label={label}
title={path}
settings={`frama-c.sidebar.files.${path}`}
infos={currentSection === path ? '(active)' : undefined}
className='globals-section'
>
<InfiniteScrollList scrollableParent={scrollableParent} >
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment