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):