diff --git a/loopstructural/gui/modelling/stratigraphic_column/stratigraphic_column.py b/loopstructural/gui/modelling/stratigraphic_column/stratigraphic_column.py index 2fc81d6..4e1607e 100644 --- a/loopstructural/gui/modelling/stratigraphic_column/stratigraphic_column.py +++ b/loopstructural/gui/modelling/stratigraphic_column/stratigraphic_column.py @@ -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( @@ -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) diff --git a/loopstructural/gui/modelling/stratigraphic_column/stratigraphic_unit.py b/loopstructural/gui/modelling/stratigraphic_column/stratigraphic_unit.py index 7585b96..c3125bd 100644 --- a/loopstructural/gui/modelling/stratigraphic_column/stratigraphic_unit.py +++ b/loopstructural/gui/modelling/stratigraphic_column/stratigraphic_unit.py @@ -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 @@ -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): @@ -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. @@ -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 @@ -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() diff --git a/loopstructural/gui/visualisation/feature_list_widget.py b/loopstructural/gui/visualisation/feature_list_widget.py index d24ca37..1159eed 100644 --- a/loopstructural/gui/visualisation/feature_list_widget.py +++ b/loopstructural/gui/visualisation/feature_list_widget.py @@ -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...")