diff --git a/QgisModelBaker/gui/panel/layer_tids_panel.py b/QgisModelBaker/gui/panel/layer_tids_panel.py
index 4fc11aa3..97bf27a6 100644
--- a/QgisModelBaker/gui/panel/layer_tids_panel.py
+++ b/QgisModelBaker/gui/panel/layer_tids_panel.py
@@ -49,7 +49,9 @@ class TIDModel(QAbstractTableModel):
"oid_domain": "STANDARDOID",
"interlis_topic" : "OIDMadness_V1",
"default_value_expression": "uuid()",
- "in_form": True
+ "in_form": True,
+ "not_null": True,
+ "unique": True,
}
[...]
}
@@ -66,6 +68,8 @@ class Columns(IntEnum):
OID_DOMAIN = 1
DEFAULT_VALUE = 2
IN_FORM = 3
+ NOTNULL = 4
+ UNIQUE = 5
def __init__(self):
super().__init__()
@@ -78,7 +82,13 @@ def rowCount(self, parent):
return len(self.oid_settings.keys())
def flags(self, index):
- if index.column() == TIDModel.Columns.IN_FORM:
+ if index.column() == any(
+ [
+ TIDModel.Columns.IN_FORM,
+ TIDModel.Columns.NOTNULL,
+ TIDModel.Columns.UNIQUE,
+ ]
+ ):
return Qt.ItemIsEnabled
if index.column() == TIDModel.Columns.DEFAULT_VALUE:
return Qt.ItemIsEditable | Qt.ItemIsEnabled
@@ -106,6 +116,10 @@ def headerData(self, section, orientation, role):
return self.tr("Default Value Expression")
if section == TIDModel.Columns.IN_FORM:
return self.tr("Show")
+ if section == TIDModel.Columns.NOTNULL:
+ return self.tr("Not Null")
+ if section == TIDModel.Columns.UNIQUE:
+ return self.tr("Unique")
def data(self, index, role):
if role == int(Qt.DisplayRole) or role == int(Qt.EditRole):
@@ -118,6 +132,10 @@ def data(self, index, role):
return self.oid_settings[key]["default_value_expression"]
if index.column() == TIDModel.Columns.IN_FORM:
return self.oid_settings[key]["in_form"]
+ if index.column() == TIDModel.Columns.NOTNULL:
+ return self.oid_settings[key]["not_null"]
+ if index.column() == TIDModel.Columns.UNIQUE:
+ return self.oid_settings[key]["unique"]
elif role == int(Qt.ToolTipRole):
key = list(self.oid_settings.keys())[index.row()]
if index.column() == TIDModel.Columns.NAME:
@@ -159,6 +177,27 @@ def data(self, index, role):
return self.oid_settings[key]["default_value_expression"]
if index.column() == TIDModel.Columns.IN_FORM:
return self.tr("Show t_ili_tid field (OID) in attribute form.")
+ if index.column() == TIDModel.Columns.NOTNULL:
+ oid_domain = self.oid_settings[key].get("oid_domain", None)
+ if oid_domain:
+ return self.tr(
+ "t_ili_tid fields based on defined OIDs usually have a not-null-constraint set."
+ )
+ else:
+ return self.tr(
+ "t_ili_tid fields based on undefined OIDs usually have no constraints set. But feel free to change it."
+ )
+ if index.column() == TIDModel.Columns.UNIQUE:
+ oid_domain = self.oid_settings[key].get("oid_domain", None)
+ if oid_domain:
+ return self.tr(
+ "t_ili_tid fields based on defined OIDs usually have a unique-constraint set."
+ )
+ else:
+ return self.tr(
+ "t_ili_tid fields based on undefined OIDs usually have no constraints set. But feel free to change it."
+ )
+ return self.tr("Show t_ili_tid field (OID) in attribute form.")
elif role == int(TIDModel.Roles.LAYER):
key = list(self.oid_settings.keys())[index.row()]
return self.oid_settings[key]["layer"]
@@ -174,6 +213,14 @@ def setData(self, index, data, role):
key = list(self.oid_settings.keys())[index.row()]
self.oid_settings[key]["in_form"] = data
self.dataChanged.emit(index, index)
+ if index.column() == TIDModel.Columns.NOTNULL:
+ key = list(self.oid_settings.keys())[index.row()]
+ self.oid_settings[key]["not_null"] = data
+ self.dataChanged.emit(index, index)
+ if index.column() == TIDModel.Columns.UNIQUE:
+ key = list(self.oid_settings.keys())[index.row()]
+ self.oid_settings[key]["unique"] = data
+ self.dataChanged.emit(index, index)
return True
def load_tid_config(self, qgis_project=None):
@@ -204,7 +251,6 @@ def setEditorData(self, editor, index):
def setModelData(self, editor, model, index):
value = editor.expression()
- print(f"new exp{value}")
model.setData(index, value, int(Qt.EditRole))
def updateEditorGeometry(self, editor, option, index):
@@ -242,14 +288,28 @@ def __init__(self, parent=None):
self.layer_tids_view.horizontalHeader().setSectionResizeMode(
TIDModel.Columns.IN_FORM, QHeaderView.ResizeToContents
)
+ self.layer_tids_view.horizontalHeader().setSectionResizeMode(
+ TIDModel.Columns.NOTNULL, QHeaderView.ResizeToContents
+ )
+ self.layer_tids_view.horizontalHeader().setSectionResizeMode(
+ TIDModel.Columns.UNIQUE, QHeaderView.ResizeToContents
+ )
+ self.layer_tids_view.setItemDelegateForColumn(
+ TIDModel.Columns.DEFAULT_VALUE,
+ FieldExpressionDelegate(self),
+ )
self.layer_tids_view.setItemDelegateForColumn(
TIDModel.Columns.IN_FORM,
CheckDelegate(self, Qt.EditRole),
)
self.layer_tids_view.setItemDelegateForColumn(
- TIDModel.Columns.DEFAULT_VALUE,
- FieldExpressionDelegate(self),
+ TIDModel.Columns.NOTNULL,
+ CheckDelegate(self, Qt.EditRole),
+ )
+ self.layer_tids_view.setItemDelegateForColumn(
+ TIDModel.Columns.UNIQUE,
+ CheckDelegate(self, Qt.EditRole),
)
self.layer_tids_view.setEditTriggers(QAbstractItemView.AllEditTriggers)
diff --git a/QgisModelBaker/ui/basket_panel.ui b/QgisModelBaker/ui/basket_panel.ui
index 0de50143..61a2c0ca 100644
--- a/QgisModelBaker/ui/basket_panel.ui
+++ b/QgisModelBaker/ui/basket_panel.ui
@@ -27,7 +27,11 @@
0
-
-
+
+
+ QAbstractItemView::NoSelection
+
+
diff --git a/QgisModelBaker/ui/layer_tids_panel.ui b/QgisModelBaker/ui/layer_tids_panel.ui
index 20e79211..03b81852 100644
--- a/QgisModelBaker/ui/layer_tids_panel.ui
+++ b/QgisModelBaker/ui/layer_tids_panel.ui
@@ -6,7 +6,7 @@
0
0
- 800
+ 1127
600
@@ -28,9 +28,15 @@
-
+
+ QAbstractItemView::NoSelection
+
- true
+ false
+
+ false
+