diff --git a/ivette/src/renderer/Values.tsx b/ivette/src/renderer/Values.tsx index c38895a48012addc1e3230d031208d0374a5fe70..75e4134a4725f675b94fe90ffc8fe3a3114e6812 100644 --- a/ivette/src/renderer/Values.tsx +++ b/ivette/src/renderer/Values.tsx @@ -7,6 +7,7 @@ import * as States from 'frama-c/states'; import * as Json from 'dome/data/json'; import * as Eva from 'api/plugins/eva/values'; import * as Ast from 'api/kernel/ast'; +import * as Compare from 'dome/data/compare'; import { Table, Column } from 'dome/table/views'; import { ArrayModel } from 'dome/table/arrays'; @@ -47,17 +48,23 @@ const ColumnAlarm = (props: { visible: boolean }) => Column({ render: AlarmRenderer, }); +const byValues: Compare.ByFields<Eva.valuesData> = + { callstack: Compare.defined(Compare.byFields({ full: Compare.string })) }; + +class ValuesModel extends ArrayModel<Json.key<'#values'>, Eva.valuesData> { + constructor() { + super(); + this.setOrderingByFields(byValues); + } +} + // -------------------------------------------------------------------------- // --- Values Panel // -------------------------------------------------------------------------- const Values = () => { - const model = React.useMemo( - () => new ArrayModel<Json.key<'#values'>, Eva.valuesData>(), - [], - ); - + const model = React.useMemo(() => new ValuesModel(), []); const evaValues = States.useSyncArray(Eva.values).getArray(); const selectMarker = States.useSelection()[0]?.current?.marker; const markerInfo = States.useSyncArray(Ast.markerInfo).getArray(); diff --git a/src/plugins/value/api/values_request.ml b/src/plugins/value/api/values_request.ml index ad48c3b495d991fbc3b52e08b39b39b39544cc2b..85d2df413cded868f8088cdb2d72602a095ca4ac 100644 --- a/src/plugins/value/api/values_request.ml +++ b/src/plugins/value/api/values_request.ml @@ -135,7 +135,7 @@ module CallStack = struct let jtype = R.jtype let pp_callstack ~short = function - | None -> "all" + | None -> if short then "all" else "" | Some callstack -> let pp_text = if short