From f50bbf9704ee27328bd9b2140fd0e5063e47ca8e Mon Sep 17 00:00:00 2001
From: Ziad-I <68874104+Ziad-I@users.noreply.github.com>
Date: Thu, 18 Jul 2024 22:50:37 +0300
Subject: [PATCH] add warning to web ui on changes and is_dirty in web module
data
---
.../blenderbim/bim/data/webui/sioserver.py | 2 +-
.../bim/data/webui/static/css/gantt.css | 7 +++++++
.../bim/data/webui/static/css/index.css | 8 +++++++
.../bim/data/webui/static/js/gantt.js | 21 +++++++++++++++++++
.../bim/data/webui/static/js/index.js | 21 +++++++++++++++++++
.../blenderbim/bim/module/web/data.py | 9 ++++++--
src/blenderbim/blenderbim/tool/web.py | 1 -
7 files changed, 65 insertions(+), 4 deletions(-)
diff --git a/src/blenderbim/blenderbim/bim/data/webui/sioserver.py b/src/blenderbim/blenderbim/bim/data/webui/sioserver.py
index c7003576ff..a109fe5260 100644
--- a/src/blenderbim/blenderbim/bim/data/webui/sioserver.py
+++ b/src/blenderbim/blenderbim/bim/data/webui/sioserver.py
@@ -85,7 +85,7 @@ class BlenderNamespace(socketio.AsyncNamespace):
async def on_data(self, sid, data):
print(f"Data from Blender client {sid}")
# blender_messages[sid]["default_data"] = data
- # await sio.emit("default_data", {"blenderId": sid, "data": data}, namespace="/web")
+ await sio.emit("default_data", {"blenderId": sid, "data": data}, namespace="/web")
async def on_csv_data(self, sid, data):
print(f"CSV data from Blender client {sid}")
diff --git a/src/blenderbim/blenderbim/bim/data/webui/static/css/gantt.css b/src/blenderbim/blenderbim/bim/data/webui/static/css/gantt.css
index c7bf7c5bb0..d7336b8fbb 100644
--- a/src/blenderbim/blenderbim/bim/data/webui/static/css/gantt.css
+++ b/src/blenderbim/blenderbim/bim/data/webui/static/css/gantt.css
@@ -59,6 +59,13 @@ nav ul li a.active {
color: #3fb449;
}
+.warning {
+ color: #ff4c4c;
+ margin-bottom: 10px;
+ padding: 2px;
+ display: none;
+ /* Initially hidden */
+}
.table-description {
margin-bottom: 1rem;
diff --git a/src/blenderbim/blenderbim/bim/data/webui/static/css/index.css b/src/blenderbim/blenderbim/bim/data/webui/static/css/index.css
index 290f42b430..bb14f4e8e4 100644
--- a/src/blenderbim/blenderbim/bim/data/webui/static/css/index.css
+++ b/src/blenderbim/blenderbim/bim/data/webui/static/css/index.css
@@ -65,4 +65,12 @@ nav ul li a {
nav ul li a:hover,
nav ul li a.active {
color: #3fb449;
+}
+
+.warning {
+ color: #ff4c4c;
+ margin-bottom: 10px;
+ padding: 2px;
+ display: none;
+ /* Initially hidden */
}
\ No newline at end of file
diff --git a/src/blenderbim/blenderbim/bim/data/webui/static/js/gantt.js b/src/blenderbim/blenderbim/bim/data/webui/static/js/gantt.js
index b15396bf9f..007e595517 100644
--- a/src/blenderbim/blenderbim/bim/data/webui/static/js/gantt.js
+++ b/src/blenderbim/blenderbim/bim/data/webui/static/js/gantt.js
@@ -32,6 +32,7 @@ function connectSocket() {
socket.on("blender_connect", handleBlenderConnect);
socket.on("blender_disconnect", handleBlenderDisconnect);
socket.on("gantt_data", handleGanttData);
+ socket.on("default_data", handleDefaultData);
}
// Function to handle 'blender_connect' event
@@ -89,6 +90,13 @@ function handleGanttData(data) {
}
}
+function handleDefaultData(data) {
+ const blenderId = data["blenderId"];
+ const isDirty = data["data"]["is_dirty"];
+ showWarning(blenderId, isDirty);
+ console.log(data);
+}
+
// Function to add a new gantt with data and filename
function addGanttElement(blenderId, tasks, workSched, filename) {
const ganttContainer = $("
")
@@ -101,6 +109,13 @@ function addGanttElement(blenderId, tasks, workSched, filename) {
.addClass("no-print")
.css("margin-bottom", "10px");
+ const warning = $("")
+ .attr("id", "warning-" + blenderId)
+ .html(
+ "⚠ Warning: This Gantt Chart may contain outdated data due to recent changes in Blender."
+ )
+ .addClass("warning no-print");
+
const workSchedDiv = $("").attr("id", "workSched" + blenderId);
const scheduleTable = $("")
@@ -148,6 +163,7 @@ function addGanttElement(blenderId, tasks, workSched, filename) {
workSchedDiv.append(scheduleTable);
ganttContainer.append(ganttTitle);
+ ganttContainer.append(warning);
ganttContainer.append(workSchedDiv);
ganttContainer.append(ganttInfoDiv);
ganttContainer.append(ganttDiv);
@@ -279,6 +295,7 @@ function updateGanttElement(blenderId, tasks, workSched, filename) {
g.Draw();
$("#title-" + blenderId).text(filename);
+ $("#warning-" + blenderId).css("display", "none");
}
// Function to remove gantt element
@@ -286,6 +303,10 @@ function removeGanttElement(blenderId) {
$("#container-" + blenderId).remove();
}
+function showWarning(blenderId, isDirty) {
+ $("#warning-" + blenderId).css("display", "block");
+}
+
// Utility function to create a tooltip for the gantt chars
function generateTooltip(task) {
var dataObject = task.getDataObject();
diff --git a/src/blenderbim/blenderbim/bim/data/webui/static/js/index.js b/src/blenderbim/blenderbim/bim/data/webui/static/js/index.js
index 907c5a3d08..2cc94b2f80 100644
--- a/src/blenderbim/blenderbim/bim/data/webui/static/js/index.js
+++ b/src/blenderbim/blenderbim/bim/data/webui/static/js/index.js
@@ -18,6 +18,7 @@ function connectSocket() {
socket.on("blender_connect", handleBlenderConnect);
socket.on("blender_disconnect", handleBlenderDisconnect);
socket.on("csv_data", handleCsvData);
+ socket.on("default_data", handleDefaultData);
}
// Function to handle 'blender_connect' event
@@ -65,6 +66,13 @@ function handleCsvData(data) {
}
}
+function handleDefaultData(data) {
+ const blenderId = data["blenderId"];
+ const isDirty = data["data"]["is_dirty"];
+ showWarning(blenderId, isDirty);
+ console.log(data);
+}
+
// Function to add a new table with data and filename
function addTableElement(blenderId, csvData, filename) {
// store headers of the csv data
@@ -82,11 +90,19 @@ function addTableElement(blenderId, csvData, filename) {
.text(filename)
.css("margin-bottom", "10px");
+ const warning = $("")
+ .attr("id", "warning-" + blenderId)
+ .html(
+ "⚠ Warning: This table may contain outdated data due to recent changes in Blender."
+ )
+ .addClass("warning");
+
const tableDiv = $("")
.addClass("csv-table")
.attr("id", "table-" + blenderId);
tableContainer.append(tableTitle);
+ tableContainer.append(warning);
tableContainer.append(tableDiv);
$("#container").append(tableContainer);
@@ -199,6 +215,7 @@ function updateTableElement(blenderId, csvData, filename) {
connectedClients[blenderId].headers = newHeaders;
}
$("#title-" + blenderId).text(filename);
+ $("#warning-" + blenderId).css("display", "none");
}
}
@@ -207,6 +224,10 @@ function removeTableElement(blenderId) {
$("#container-" + blenderId).remove();
}
+function showWarning(blenderId, isDirty) {
+ $("#warning-" + blenderId).css("display", "block");
+}
+
// Utility function to compare two csv header
function compareHeaders(headers1, headers2) {
if (headers1.length !== headers2.length) {
diff --git a/src/blenderbim/blenderbim/bim/module/web/data.py b/src/blenderbim/blenderbim/bim/module/web/data.py
index b6966d07bd..298256d8bb 100644
--- a/src/blenderbim/blenderbim/bim/module/web/data.py
+++ b/src/blenderbim/blenderbim/bim/module/web/data.py
@@ -32,11 +32,16 @@ class WebData:
@classmethod
def load(cls):
cls.data = {
- "ifc_file": cls.ifc_file_name(),
+ "ifc_file": cls.get_ifc_file_name(),
+ "is_dirty": cls.get_is_dirty(),
}
cls.is_loaded = True
@classmethod
- def ifc_file_name(cls):
+ def get_ifc_file_name(cls):
filename = os.path.basename(bpy.context.scene.BIMProperties.ifc_file)
return filename
+
+ @classmethod
+ def get_is_dirty(cls):
+ return bpy.context.scene.BIMProperties.is_dirty
diff --git a/src/blenderbim/blenderbim/tool/web.py b/src/blenderbim/blenderbim/tool/web.py
index 1d62be294b..2b53516ec2 100644
--- a/src/blenderbim/blenderbim/tool/web.py
+++ b/src/blenderbim/blenderbim/tool/web.py
@@ -105,7 +105,6 @@ class Web(blenderbim.core.tool.Web):
ws_thread.run_coro(cls.sio_connect(ws_url))
cls.set_is_connected(True)
bpy.app.timers.register(cls.check_operator_queue)
- cls.send_webui_data()
@classmethod
def disconnect_websocket_server(cls):