From 0c39c5455cbe1d5176b728410758e3b719d98292 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr>
Date: Fri, 24 Jul 2020 16:38:08 +0200
Subject: [PATCH] [ivette] Values panel: orders table rows according to the
 full callstacks.

---
 ivette/src/renderer/Values.tsx          | 17 ++++++++++++-----
 src/plugins/value/api/values_request.ml |  2 +-
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/ivette/src/renderer/Values.tsx b/ivette/src/renderer/Values.tsx
index c38895a4801..75e4134a472 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 ad48c3b495d..85d2df413cd 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
-- 
GitLab