diff --git a/ivette/src/frama-c/help.tsx b/ivette/src/frama-c/help.tsx index a47824c5a4622363575036655260e4f16973c875..603e995d7d6f61059d2f34c69960a638bedf8ca6 100644 --- a/ivette/src/frama-c/help.tsx +++ b/ivette/src/frama-c/help.tsx @@ -26,11 +26,12 @@ import { Hbox } from 'dome/layout/boxes'; import { shell } from 'electron'; import { Button } from 'dome/controls/buttons'; +import * as Server from 'frama-c/server'; +import * as Dialogs from 'dome/dialogs'; +import { getConfig } from 'frama-c/kernel/api/services'; import './style.css'; import framacImage from './frama-c.png'; -import vNumber from '../../../VERSION?raw'; -import vCodename from '../../../VERSION_CODENAME?raw'; /* -------------------------------------------------------------------------- */ /* --- Frama-C infos --- */ @@ -38,7 +39,6 @@ import vCodename from '../../../VERSION_CODENAME?raw'; const synopsis = 'Frama-C is a suite of tools dedicated to the analysis of the\ source code of software written in C.'; -const version = `${vNumber} (${vCodename})`.replace(/[\r\n]/g, ''); const description = '\ Frama-C gathers several analysis techniques in a single collaborative\ framework, based on analyzers (called "plug-ins") that can build upon the\ @@ -136,13 +136,17 @@ function FramaCLogo(): JSX.Element { ); } -export function getAbout(): JSX.Element { +interface AboutProps { + version: string; +} + +function AboutModal(props: AboutProps): JSX.Element { return ( <Modal className='modal-framac-infos' label='About Frama-C'> <> <FramaCLogo /> <Hbox className='modal-framac-about'> - <pre>version: {version}</pre> + <pre>version: {props.version}</pre> <pre>{synopsis}</pre> <Hbox> <Button @@ -167,7 +171,14 @@ export function getAbout(): JSX.Element { ); } -export function getCredits(): JSX.Element { +export async function showAboutModal(): Promise<void> { + const config = await Server.send(getConfig, {}); + const version = config.version_codename; + const modal = <AboutModal version = {version}/>; + Dialogs.showModal(modal); +} + +function CreditsModal(): JSX.Element { return ( <Modal className='modal-framac-infos' label='Credits'> <> @@ -176,9 +187,14 @@ export function getCredits(): JSX.Element { <pre style={{ fontSize: '1.2em' }}>Created by:</pre> </Hbox> <div className='modal-framac-credits'> - {authors.map((author, i) => <div key={i} >{ author }</div>)} + {authors.map((author, i) => <div key={i} >{author}</div>)} </div> </> </Modal> ); } + +export function showCreditsModal(): void { + const modal = <CreditsModal/>; + Dialogs.showModal(modal); +} diff --git a/ivette/src/frama-c/menu.ts b/ivette/src/frama-c/menu.ts index 00e793e00f46e30ee02201deb5c4f65a19c11ec9..60d17e0e9ae0c3780f4731b892abd1096bdf6ce8 100644 --- a/ivette/src/frama-c/menu.ts +++ b/ivette/src/frama-c/menu.ts @@ -160,14 +160,14 @@ export function init(): void { menu: 'Help', label: 'About', id: 'help_about', - onClick: () => Dialogs.showModal(HelpMenu.getAbout()), + onClick: HelpMenu.showAboutModal, kind: 'normal', }); Dome.addMenuItem({ menu: 'Help', label: 'Credits', id: 'help_credits', - onClick: () => Dialogs.showModal(HelpMenu.getCredits()), + onClick: HelpMenu.showCreditsModal, kind: 'normal', }); }