From b55746a53e6c65f9e8e47a6ef48434e123a0bbc5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr>
Date: Mon, 8 Jun 2020 10:17:18 +0200
Subject: [PATCH] [ivette] Adds new columns to the property table. Hide some
 columns by default.

---
 ivette/src/renderer/Properties.tsx | 41 ++++++++++++++++++++++++++----
 1 file changed, 36 insertions(+), 5 deletions(-)

diff --git a/ivette/src/renderer/Properties.tsx b/ivette/src/renderer/Properties.tsx
index 3061204a39b..80d42e5d81d 100644
--- a/ivette/src/renderer/Properties.tsx
+++ b/ivette/src/renderer/Properties.tsx
@@ -15,7 +15,7 @@ import { Component } from 'frama-c/LabViews';
 // --- Property Columns
 // --------------------------------------------------------------------------
 
-export const renderCode: Renderer<string> =
+const renderCode: Renderer<string> =
   (text?: string) => (text ? <Code>{text}</Code> : null);
 
 function ColumnCode<Row>(props: ColumnProps<Row, string>) {
@@ -24,18 +24,30 @@ function ColumnCode<Row>(props: ColumnProps<Row, string>) {
 
 interface Tag { name: string; label: string; descr: string }
 
-export const renderTag: Renderer<Tag> =
+const renderTag: Renderer<Tag> =
   (d?: Tag) => (d ? <Label label={d.label} title={d.descr} /> : null);
 
 function ColumnTag<Row>(props: ColumnProps<Row, Tag>) {
   return <Column render={renderTag} {...props} />;
 }
 
+const renderNames: Renderer<string[]> =
+  (names?: string[]) => {
+    const label = names?.join(': ');
+    return (label ? <Label label={label} /> : null);
+  }
+
+const renderFile: Renderer<SourceLoc> =
+  (loc?: SourceLoc) =>
+    (loc ? <Label label={loc.base} title={loc.file} /> : null);
+
 // --------------------------------------------------------------------------
 // --- Properties Table
 // -------------------------------------------------------------------------
 
 interface SourceLoc {
+  dir: string;
+  base: string;
   file: string;
   line: number;
 }
@@ -44,6 +56,10 @@ interface Property {
   key: string;
   descr: string;
   kind: string;
+  alarm?: string;
+  alarm_descr?: string;
+  names: string[];
+  predicate: string;
   status: string;
   function?: string;
   kinstr: string;
@@ -73,6 +89,9 @@ const byProperty: Compare.ByFields<Property> = {
   function: Compare.defined(Compare.alpha),
   source: bySource,
   kind: Compare.primitive,
+  alarm: Compare.defined(Compare.alpha),
+  names: Compare.array(Compare.alpha),
+  predicate: Compare.alpha,
   key: Compare.primitive,
   kinstr: Compare.primitive,
 };
@@ -122,13 +141,25 @@ const RenderTable = () => {
       onSelection={onSelection}
       settings="ivette.properties.table"
     >
+      <Column
+        id="path"
+        label="Directory"
+        width={240}
+        visible={false}
+        getter={(prop: Property) => prop.source.dir}
+      />
+      <Column id="source" label="File" width={120} render={renderFile} />
       <ColumnCode id="function" label="Function" width={120} />
-      <ColumnCode id="descr" label="Description" fill />
+      <ColumnCode id="kind" label="Property kind" width={120} />
+      <ColumnCode id="alarm" label="Alarms" width={160} />
+      <Column id="names" label="Names" width={240} visible={false}
+        render={renderNames} />
+      <ColumnCode id="predicate" label="Predicate" fill />
+      <ColumnCode id="descr" label="Property" fill visible={false} />
       <ColumnTag
         id="status"
         label="Status"
-        fixed
-        width={80}
+        width={100}
         align="center"
         getter={getStatus}
       />
-- 
GitLab