add warning to web ui on changes and is_dirty in web module data

This commit is contained in:
Ziad-I
2024-07-18 22:50:37 +03:00
committed by Dion Moult
parent 4912e86e6e
commit f50bbf9704
7 changed files with 65 additions and 4 deletions
@@ -85,7 +85,7 @@ class BlenderNamespace(socketio.AsyncNamespace):
async def on_data(self, sid, data): async def on_data(self, sid, data):
print(f"Data from Blender client {sid}") print(f"Data from Blender client {sid}")
# blender_messages[sid]["default_data"] = data # 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): async def on_csv_data(self, sid, data):
print(f"CSV data from Blender client {sid}") print(f"CSV data from Blender client {sid}")
@@ -59,6 +59,13 @@ nav ul li a.active {
color: #3fb449; color: #3fb449;
} }
.warning {
color: #ff4c4c;
margin-bottom: 10px;
padding: 2px;
display: none;
/* Initially hidden */
}
.table-description { .table-description {
margin-bottom: 1rem; margin-bottom: 1rem;
@@ -65,4 +65,12 @@ nav ul li a {
nav ul li a:hover, nav ul li a:hover,
nav ul li a.active { nav ul li a.active {
color: #3fb449; color: #3fb449;
}
.warning {
color: #ff4c4c;
margin-bottom: 10px;
padding: 2px;
display: none;
/* Initially hidden */
} }
@@ -32,6 +32,7 @@ function connectSocket() {
socket.on("blender_connect", handleBlenderConnect); socket.on("blender_connect", handleBlenderConnect);
socket.on("blender_disconnect", handleBlenderDisconnect); socket.on("blender_disconnect", handleBlenderDisconnect);
socket.on("gantt_data", handleGanttData); socket.on("gantt_data", handleGanttData);
socket.on("default_data", handleDefaultData);
} }
// Function to handle 'blender_connect' event // 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 to add a new gantt with data and filename
function addGanttElement(blenderId, tasks, workSched, filename) { function addGanttElement(blenderId, tasks, workSched, filename) {
const ganttContainer = $("<div></div>") const ganttContainer = $("<div></div>")
@@ -101,6 +109,13 @@ function addGanttElement(blenderId, tasks, workSched, filename) {
.addClass("no-print") .addClass("no-print")
.css("margin-bottom", "10px"); .css("margin-bottom", "10px");
const warning = $("<div></div>")
.attr("id", "warning-" + blenderId)
.html(
"&#9888; Warning: This Gantt Chart may contain outdated data due to recent changes in Blender."
)
.addClass("warning no-print");
const workSchedDiv = $("<div></div>").attr("id", "workSched" + blenderId); const workSchedDiv = $("<div></div>").attr("id", "workSched" + blenderId);
const scheduleTable = $("<table></table>") const scheduleTable = $("<table></table>")
@@ -148,6 +163,7 @@ function addGanttElement(blenderId, tasks, workSched, filename) {
workSchedDiv.append(scheduleTable); workSchedDiv.append(scheduleTable);
ganttContainer.append(ganttTitle); ganttContainer.append(ganttTitle);
ganttContainer.append(warning);
ganttContainer.append(workSchedDiv); ganttContainer.append(workSchedDiv);
ganttContainer.append(ganttInfoDiv); ganttContainer.append(ganttInfoDiv);
ganttContainer.append(ganttDiv); ganttContainer.append(ganttDiv);
@@ -279,6 +295,7 @@ function updateGanttElement(blenderId, tasks, workSched, filename) {
g.Draw(); g.Draw();
$("#title-" + blenderId).text(filename); $("#title-" + blenderId).text(filename);
$("#warning-" + blenderId).css("display", "none");
} }
// Function to remove gantt element // Function to remove gantt element
@@ -286,6 +303,10 @@ function removeGanttElement(blenderId) {
$("#container-" + blenderId).remove(); $("#container-" + blenderId).remove();
} }
function showWarning(blenderId, isDirty) {
$("#warning-" + blenderId).css("display", "block");
}
// Utility function to create a tooltip for the gantt chars // Utility function to create a tooltip for the gantt chars
function generateTooltip(task) { function generateTooltip(task) {
var dataObject = task.getDataObject(); var dataObject = task.getDataObject();
@@ -18,6 +18,7 @@ function connectSocket() {
socket.on("blender_connect", handleBlenderConnect); socket.on("blender_connect", handleBlenderConnect);
socket.on("blender_disconnect", handleBlenderDisconnect); socket.on("blender_disconnect", handleBlenderDisconnect);
socket.on("csv_data", handleCsvData); socket.on("csv_data", handleCsvData);
socket.on("default_data", handleDefaultData);
} }
// Function to handle 'blender_connect' event // 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 to add a new table with data and filename
function addTableElement(blenderId, csvData, filename) { function addTableElement(blenderId, csvData, filename) {
// store headers of the csv data // store headers of the csv data
@@ -82,11 +90,19 @@ function addTableElement(blenderId, csvData, filename) {
.text(filename) .text(filename)
.css("margin-bottom", "10px"); .css("margin-bottom", "10px");
const warning = $("<div></div>")
.attr("id", "warning-" + blenderId)
.html(
"&#9888; Warning: This table may contain outdated data due to recent changes in Blender."
)
.addClass("warning");
const tableDiv = $("<div></div>") const tableDiv = $("<div></div>")
.addClass("csv-table") .addClass("csv-table")
.attr("id", "table-" + blenderId); .attr("id", "table-" + blenderId);
tableContainer.append(tableTitle); tableContainer.append(tableTitle);
tableContainer.append(warning);
tableContainer.append(tableDiv); tableContainer.append(tableDiv);
$("#container").append(tableContainer); $("#container").append(tableContainer);
@@ -199,6 +215,7 @@ function updateTableElement(blenderId, csvData, filename) {
connectedClients[blenderId].headers = newHeaders; connectedClients[blenderId].headers = newHeaders;
} }
$("#title-" + blenderId).text(filename); $("#title-" + blenderId).text(filename);
$("#warning-" + blenderId).css("display", "none");
} }
} }
@@ -207,6 +224,10 @@ function removeTableElement(blenderId) {
$("#container-" + blenderId).remove(); $("#container-" + blenderId).remove();
} }
function showWarning(blenderId, isDirty) {
$("#warning-" + blenderId).css("display", "block");
}
// Utility function to compare two csv header // Utility function to compare two csv header
function compareHeaders(headers1, headers2) { function compareHeaders(headers1, headers2) {
if (headers1.length !== headers2.length) { if (headers1.length !== headers2.length) {
@@ -32,11 +32,16 @@ class WebData:
@classmethod @classmethod
def load(cls): def load(cls):
cls.data = { 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 cls.is_loaded = True
@classmethod @classmethod
def ifc_file_name(cls): def get_ifc_file_name(cls):
filename = os.path.basename(bpy.context.scene.BIMProperties.ifc_file) filename = os.path.basename(bpy.context.scene.BIMProperties.ifc_file)
return filename return filename
@classmethod
def get_is_dirty(cls):
return bpy.context.scene.BIMProperties.is_dirty
-1
View File
@@ -105,7 +105,6 @@ class Web(blenderbim.core.tool.Web):
ws_thread.run_coro(cls.sio_connect(ws_url)) ws_thread.run_coro(cls.sio_connect(ws_url))
cls.set_is_connected(True) cls.set_is_connected(True)
bpy.app.timers.register(cls.check_operator_queue) bpy.app.timers.register(cls.check_operator_queue)
cls.send_webui_data()
@classmethod @classmethod
def disconnect_websocket_server(cls): def disconnect_websocket_server(cls):