From 63bedac21a307e4936e8b6af287c9e72fab79f62 Mon Sep 17 00:00:00 2001
From: Vanessa Stehr <vanessa.stehr@ptb.de>
Date: Mon, 17 Jun 2024 14:29:17 +0200
Subject: [PATCH] Style UnitValidator results

---
 main.py | 36 +++++++++++++++++++-----------------
 1 file changed, 19 insertions(+), 17 deletions(-)

diff --git a/main.py b/main.py
index 6028185..defbe3e 100644
--- a/main.py
+++ b/main.py
@@ -21,7 +21,7 @@ import bokehCssPTB
 from urllib.parse import quote
 from dsiUnits import dsiUnit
 from bokeh.plotting import curdoc, figure
-from bokeh.layouts import column, row
+from bokeh.layouts import column, row, GridBox
 from bokeh.models import FileInput, Div, CustomJS, Button, TabPanel, Tabs, TextInput, Label, Arrow, NormalHead, CheckboxGroup
 from bokeh.palettes import Category10
 from bokeh.events import ValueSubmit
@@ -267,13 +267,14 @@ class page():
         tab1 = TabPanel(child=tab1_layout, title="DSI Parser and Comparator")
 
         # Tab 2: XML Unit Validator
+        self.title = Div(text="<h4>Please upload DCC or other XML containing D-SI Unit Strings here</h4>")
         self.upload_widget = FileInput(accept=".xml")
         self.upload_widget.on_change('value', self.process_xml)
         self.valid_units_message = Div(text="Upload an XML file to validate units", css_classes=["msg-neutral"])
-        self.invalid_units_message = Div(text="", css_classes=["msg-neutral"])
-        self.invalid_units_column = column()
+        self.invalid_units_message = Div(text="")
+        self.invalid_units_list = GridBox()
 
-        tab2_layout = column(self.upload_widget, self.valid_units_message, self.invalid_units_message, self.invalid_units_column)
+        tab2_layout = column(self.title, self.upload_widget, self.valid_units_message, self.invalid_units_message, self.invalid_units_list)
         tab2 = TabPanel(child=tab2_layout, title="XML Unit Validator")
 
         tabs = Tabs(tabs=[tab1, tab2])
@@ -299,19 +300,20 @@ class page():
             self.invalid_units_message.css_classes = ["msg-negative"]
         else:
             self.invalid_units_message.text = ""
-            self.invalid_units_message.css_classes = ["msg-neutral"]
-
-        # Update invalid units column
-        self.invalid_units_column.children = []
-        for line_num, details in invalid_units.items():
-            warnings_div = column([Div(text=warning, css_classes=["msg-warning"]) for warning in details.get("warnings", [])])
-            unit_div = row([
-                Div(text=str(line_num), css_classes=["msg-neutral"]),
-                Div(text=f"{dsiUnit(details['unit']).toLatex()}"),
-                Div(text=details["unit"], css_classes=["msg-raw"]),
-                warnings_div
-            ])
-            self.invalid_units_column.children.append(unit_div)
+            self.invalid_units_message.css_classes = [""]
+
+        # Update invalid units content
+        self.invalid_units_list.children = []
+        for row_num, (line_num, details) in enumerate(invalid_units.items()):
+            warnings_div = column([Div(text=warning, css_classes=["msg-negative"]) for warning in details.get("warnings", [])])
+            unit_row = [
+                (Div(text=str(line_num), height_policy="min", css_classes=["msg-neutral"]), 2*row_num, 0),
+                (Div(text=details["unit"], css_classes=["msg-raw"]), 2*row_num, 1),
+                (Div(text=f"{dsiUnit(details['unit']).toLatex()}", width=150), 2*row_num, 2),
+                (warnings_div, 2*row_num, 3),
+                (Div(text="", height=20), 2*row_num+1, 0, 1, 4)
+            ]
+            self.invalid_units_list.children += unit_row
 
     def compare(self):
         self.dsiInput1.parseInput()
-- 
GitLab