Skip to content
Draft
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
20 changes: 20 additions & 0 deletions loopstructural/gui/compatibility.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# compat.py
from qgis.PyQt.QtCore import QVariant

try:
from qgis.PyQt.QtCore import QMetaType

# We create a proxy class to mimic the old QVariant.Type behavior
class QVariantProxy:
Type = QMetaType.Type
# Add common types here if needed
Int = QMetaType.Type.Int
Double = QMetaType.Type.Double
String = QMetaType.Type.QString
Bool = QMetaType.Type.Bool

# In QGIS 4, we use our proxy
QVariantCompat = QVariantProxy
except (ImportError, AttributeError):
# In QGIS 3, QVariant already has .Type
QVariantCompat = QVariant
8 changes: 4 additions & 4 deletions loopstructural/gui/data_conversion/data_conversion_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@
from typing import Any, Dict, Iterable, List, Mapping, Optional, Tuple

from LoopDataConverter import Datatype, InputData, LoopConverter, SurveyName
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtWidgets import (
from qgis.core import QgsMapLayerProxyModel, QgsProject, QgsVectorLayer
from qgis.gui import QgsMapLayerComboBox
from qgis.PyQt.QtCore import Qt, QTimer
from qgis.PyQt.QtWidgets import (
QComboBox,
QDialog,
QDialogButtonBox,
Expand All @@ -21,8 +23,6 @@
QVBoxLayout,
QWidget,
)
from qgis.core import QgsMapLayerProxyModel, QgsProject, QgsVectorLayer
from qgis.gui import QgsMapLayerComboBox

from ...main.helpers import ColumnMatcher
from ...main.vectorLayerWrapper import QgsLayerFromDataFrame, QgsLayerFromGeoDataFrame
Expand Down
2 changes: 1 addition & 1 deletion loopstructural/gui/dlg_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from qgis.core import Qgis, QgsApplication
from qgis.gui import QgsOptionsPageWidget, QgsOptionsWidgetFactory
from qgis.PyQt import uic
from qgis.PyQt.Qt import QUrl
from qgis.PyQt.QtCore import QUrl
from qgis.PyQt.QtGui import QDesktopServices, QIcon

# project
Expand Down
2 changes: 1 addition & 1 deletion loopstructural/gui/loop_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
interface for interacting with LoopStructural features inside QGIS.
"""

from PyQt5.QtWidgets import QTabWidget, QVBoxLayout, QWidget
from qgis.PyQt.QtWidgets import QTabWidget, QVBoxLayout, QWidget

from .modelling.modelling_widget import ModellingWidget
from .visualisation.visualisation_widget import VisualisationWidget
Expand Down
2 changes: 1 addition & 1 deletion loopstructural/gui/map2loop_tools/basal_contacts_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import os

from PyQt5.QtWidgets import QMessageBox, QWidget
from qgis.core import QgsProject, QgsVectorFileWriter
from qgis.PyQt import uic
from qgis.PyQt.QtWidgets import QMessageBox, QWidget

from ...main.helpers import ColumnMatcher, get_layer_names
from ...main.m2l_api import extract_basal_contacts
Expand Down
6 changes: 4 additions & 2 deletions loopstructural/gui/map2loop_tools/dialogs.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
instead of QGIS processing algorithms.
"""

from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout
from qgis.PyQt.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout


class SamplerDialog(QDialog):
Expand All @@ -23,7 +23,9 @@ def setup_ui(self):
from .sampler_widget import SamplerWidget

layout = QVBoxLayout(self)
self.widget = SamplerWidget(self, data_manager=self.data_manager, debug_manager=self.debug_manager)
self.widget = SamplerWidget(
self, data_manager=self.data_manager, debug_manager=self.debug_manager
)
layout.addWidget(self.widget)

# Replace the run button with dialog buttons
Expand Down
2 changes: 1 addition & 1 deletion loopstructural/gui/map2loop_tools/fault_topology_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
import os

import geopandas as gpd
from PyQt5.QtWidgets import QDialog, QMessageBox
from qgis.core import QgsMapLayerProxyModel
from qgis.PyQt import uic
from qgis.PyQt.QtWidgets import QDialog, QMessageBox


class FaultTopologyWidget(QDialog):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@

import os

from PyQt5.QtWidgets import QMessageBox, QWidget
from qgis.core import QgsMapLayerProxyModel
from qgis.PyQt import uic

from qgis.PyQt.QtWidgets import QMessageBox, QWidget

from ...main.m2l_api import paint_stratigraphic_order

Expand Down Expand Up @@ -185,7 +184,6 @@ def _run_painter(self):

# Step 1: create a memory copy of the geology layer and copy attributes/geometry
try:
from PyQt5.QtCore import QVariant
from qgis.core import (
QgsFeature,
QgsField,
Expand All @@ -198,6 +196,8 @@ def _run_painter(self):
QgsWkbTypes,
)

from loopstructural.gui.compatibility import QVariantCompat

geom_type = QgsWkbTypes.displayString(geology_layer.wkbType())
crs_auth = (
geology_layer.crs().authid() if hasattr(geology_layer, 'crs') else None
Expand Down Expand Up @@ -240,7 +240,7 @@ def _run_painter(self):
try:
if field_name not in [f.name() for f in mem_layer.fields()]:
mem_layer.startEditing()
mem_dp.addAttributes([QgsField(field_name, QVariant.Int)])
mem_dp.addAttributes([QgsField(field_name, QVariantCompat.Int)])
mem_layer.updateFields()
mem_layer.commitChanges()

Expand Down
11 changes: 6 additions & 5 deletions loopstructural/gui/map2loop_tools/sampler_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import os

from PyQt5.QtWidgets import QMessageBox, QWidget
from qgis.core import QgsProject, QgsWkbTypes
from qgis.PyQt import uic
from qgis.PyQt.QtWidgets import QMessageBox, QWidget

from loopstructural.toolbelt.preferences import PlgOptionsManager

Expand Down Expand Up @@ -226,7 +226,8 @@ def _run_sampler(self):
QgsPointXY,
QgsVectorLayer,
)
from qgis.PyQt.QtCore import QVariant

from loopstructural.gui.compatibility import QVariantCompat

from ...main.m2l_api import sample_contacts

Expand Down Expand Up @@ -293,11 +294,11 @@ def _run_sampler(self):
dtype_str = str(dtype)

if dtype_str in ['float16', 'float32', 'float64']:
field_type = QVariant.Double
field_type = QVariantCompat.Double
elif dtype_str in ['int8', 'int16', 'int32', 'int64']:
field_type = QVariant.Int
field_type = QVariantCompat.Int
else:
field_type = QVariant.String
field_type = QVariantCompat.String

fields.append(QgsField(column_name, field_type))

Expand Down
6 changes: 2 additions & 4 deletions loopstructural/gui/map2loop_tools/sorter_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@

import os

from PyQt5.QtWidgets import QMessageBox, QWidget
from qgis.core import QgsRasterLayer
from qgis.core import QgsMapLayerProxyModel

from qgis.core import QgsMapLayerProxyModel, QgsRasterLayer
from qgis.PyQt import uic
from qgis.PyQt.QtWidgets import QMessageBox, QWidget

from loopstructural.main.helpers import get_layer_names
from loopstructural.main.m2l_api import PARAMETERS_DICTIONARY, SORTER_LIST
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
import os

import pandas as pd
from PyQt5.QtWidgets import QMessageBox, QWidget
from qgis.core import QgsMapLayerProxyModel
from qgis.PyQt import uic
from qgis.PyQt.QtWidgets import QMessageBox, QWidget

from loopstructural.toolbelt.preferences import PlgOptionsManager

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from typing import Any

from PyQt5.QtWidgets import QVBoxLayout, QWidget
from qgis.PyQt.QtWidgets import QVBoxLayout, QWidget

from loopstructural.gui.modelling.stratigraphic_column import StratColumnWidget

Expand Down
4 changes: 2 additions & 2 deletions loopstructural/gui/modelling/base_tab.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QScrollArea, QSizePolicy, QVBoxLayout, QWidget
from qgis.gui import QgsCollapsibleGroupBox
from qgis.PyQt.QtCore import Qt
from qgis.PyQt.QtWidgets import QScrollArea, QSizePolicy, QVBoxLayout, QWidget


class BaseTab(QWidget):
Expand Down
7 changes: 3 additions & 4 deletions loopstructural/gui/modelling/fault_adjacency_tab.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (
from LoopStructural.modelling.core.fault_topology import FaultRelationshipType
from qgis.PyQt.QtCore import Qt
from qgis.PyQt.QtWidgets import (
QGroupBox,
QLabel,
QPushButton,
Expand All @@ -9,8 +10,6 @@
QWidget,
)

from LoopStructural.modelling.core.fault_topology import FaultRelationshipType


class FaultAdjacencyTab(QWidget):
def __init__(self, parent=None, data_manager=None):
Expand Down
4 changes: 2 additions & 2 deletions loopstructural/gui/modelling/fault_graph/fault_graph.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import os

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtSvg import QGraphicsSvgItem
from qgis.PyQt import QtCore, QtGui, QtWidgets
from qgis.PyQt.QtSvg import QGraphicsSvgItem


class TopologyNode(QtWidgets.QGraphicsItem):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import os

from PyQt5.QtWidgets import QDialog
from PyQt5.uic import loadUi
from qgis.PyQt.QtWidgets import QDialog
from qgis.PyQt.uic import loadUi


class AddFaultDialog(QDialog):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import os

from PyQt5.QtWidgets import QDialog, QDialogButtonBox
from PyQt5.uic import loadUi
from qgis.PyQt.QtWidgets import QDialog, QDialogButtonBox
from qgis.PyQt.uic import loadUi

from .layer_selection_table import LayerSelectionTable

Expand All @@ -19,7 +19,7 @@ def __init__(self, parent=None, *, data_manager=None, model_manager=None):
self.layer_table = LayerSelectionTable(
data_manager=self.data_manager,
feature_name_provider=lambda: self.name,
name_validator=lambda: (self.name_valid, self.name_error)
name_validator=lambda: (self.name_valid, self.name_error),
)

# Replace or integrate with existing UI
Expand All @@ -28,7 +28,6 @@ def __init__(self, parent=None, *, data_manager=None, model_manager=None):
self.buttonBox.accepted.connect(self.add_foliation)
self.buttonBox.rejected.connect(self.cancel)


self.name_valid = False
self.name_error = ""

Expand Down Expand Up @@ -93,7 +92,6 @@ def add_foliation(self):

folded_feature_name = None


self.data_manager.add_foliation_to_model(self.name, folded_feature_name=folded_feature_name)
self.accept() # Close the dialog

Expand Down Expand Up @@ -135,7 +133,8 @@ def _integrate_layer_table(self):
else:
# Fallback: add to parent widget directly
if hasattr(table_parent, 'layout') and not table_parent.layout():
from PyQt5.QtWidgets import QVBoxLayout
from qgis.PyQt.QtWidgets import QVBoxLayout

layout = QVBoxLayout(table_parent)
table_parent.setLayout(layout)
layout.addWidget(self.layer_table)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
from PyQt5.QtWidgets import (
from LoopStructural.modelling.features import FeatureType
from qgis.PyQt.QtWidgets import (
QComboBox,
QDialog,
QDialogButtonBox,
QDoubleSpinBox,
QFormLayout,
QVBoxLayout,

)
from LoopStructural.modelling.features import FeatureType


class AddUnconformityDialog(QDialog):
def __init__(self, parent=None, data_manager=None, model_manager=None):
super().__init__(parent)
Expand Down Expand Up @@ -61,8 +62,9 @@ def accept(self):
self.model_manager.add_unconformity(foliation_name, value, feature_type)
super().accept()
except ValueError as e:
from PyQt5.QtWidgets import QMessageBox
from qgis.PyQt.QtWidgets import QMessageBox

QMessageBox.critical(self, "Error", str(e))

def reject(self):
super().reject()
Loading
Loading