Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ def add_unit(self, *, unit_data=None, create_new=True):
for k in list(unit_data.keys()):
if unit_data[k] is None:
unit_data.pop(k)
print(f"Adding unit with data: {unit_data}")
unit_widget = StratigraphicUnitWidget(**unit_data)
unit_widget.deleteRequested.connect(self.delete_unit) # Connect delete signal
unit_widget.nameChanged.connect(
Expand All @@ -116,8 +117,11 @@ def add_unit(self, *, unit_data=None, create_new=True):
unit_widget.thicknessChanged.connect(
lambda: self.update_element(unit_widget)
) # Connect thickness change signal

unit_widget.set_thickness(unit_data.get('thickness', 0.0)) # Set initial thickness
unit_widget.colourChanged.connect(
lambda: self.update_element(unit_widget)
) # Connect colour change signal
item = QListWidgetItem()
item.setSizeHint(unit_widget.sizeHint())
self.unitList.addItem(item)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import os
from typing import Optional

import numpy as np
from PyQt5 import uic
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QWidget
Expand All @@ -24,12 +25,29 @@ def __init__(
uic.loadUi(os.path.join(os.path.dirname(__file__), "stratigraphic_unit.ui"), self)
self.uuid = uuid
self._name = name if name is not None else ""
self.colour = colour if colour is not None else ""
# Convert colour from RGB tuple or string to Qt-compatible hex string
if colour is not None:
if (
isinstance(colour, tuple)
or isinstance(colour, list)
or isinstance(colour, np.ndarray)
) and len(colour) == 3:
# Convert (r, g, b) to "#RRGGBB"
if all(isinstance(c, float) and 0.0 <= c <= 1.0 for c in colour):
rgb = [int(c * 255) for c in colour]
else:
rgb = [int(c) for c in colour]
self.colour = "#{:02x}{:02x}{:02x}".format(*rgb)
else:
self.colour = str(colour)
else:
self.colour = ""
self.thickness = thickness # Optional thickness attribute
# Add delete button
self.buttonDelete.clicked.connect(self.request_delete)
self.lineEditName.editingFinished.connect(self.onNameChanged)
self.spinBoxThickness.valueChanged.connect(self.onThicknessChanged)
self.setStyleSheet(f"background-color: {self.colour};" if self.colour else "")

@property
def name(self):
Expand Down Expand Up @@ -58,7 +76,8 @@ def onColourSelectClicked(self):
color = QColorDialog.getColor()
if color.isValid():
self.colour = color.name()
self.buttonColor.setStyleSheet(f"background-color: {self.colour};")
self.setStyleSheet(f"background-color: {self.colour};")
self.colourChanged.emit(self.colour)

def onThicknessChanged(self, thickness: float):
"""Handle changes to the thickness spinbox.
Expand All @@ -84,6 +103,10 @@ def request_delete(self):

self.deleteRequested.emit(self)

def mouseDoubleClickEvent(self, event):
"""Handle double-click event to open color selection dialog."""
self.onColourSelectClicked()

def validateFields(self):
"""Validate the widget fields and update UI hints."""
# Reset all styles first
Expand Down Expand Up @@ -111,11 +134,13 @@ def setData(self, data: Optional[dict] = None):
self.name = str(data.get("name", ""))
self.colour = data.get("colour", "")
self.lineEditName.setText(self.name)
self.setStyleSheet(f"background-color: {self.colour};" if self.colour else "")
# self.lineEditColour.setText(self.colour)
else:
self.name = ""
self.colour = ""
self.lineEditName.clear()
self.setStyleSheet("")
# self.lineEditColour.clear()

self.validateFields()
Expand Down
2 changes: 1 addition & 1 deletion loopstructural/gui/visualisation/feature_list_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,5 +144,5 @@ def add_stratigraphic_surfaces(self):
return
stratigraphic_surfaces = self.model_manager.model.get_stratigraphic_surfaces()
for surface in stratigraphic_surfaces:
self.viewer.add_mesh_object(surface.vtk(), name=surface.name)
self.viewer.add_mesh_object(surface.vtk(), name=surface.name,color=surface.colour)
print("Adding stratigraphic surfaces...")