items have item_type

This commit is contained in:
iLLiCiTiT 2021-05-12 15:46:28 +02:00
parent 1d4dd107d3
commit 30bc0c8fab
2 changed files with 31 additions and 14 deletions

View file

@ -6,6 +6,7 @@ IDENTIFIER_ROLE = QtCore.Qt.UserRole + 1
DUPLICATED_ROLE = QtCore.Qt.UserRole + 2 DUPLICATED_ROLE = QtCore.Qt.UserRole + 2
HIERARCHY_CHANGE_ABLE_ROLE = QtCore.Qt.UserRole + 3 HIERARCHY_CHANGE_ABLE_ROLE = QtCore.Qt.UserRole + 3
REMOVED_ROLE = QtCore.Qt.UserRole + 4 REMOVED_ROLE = QtCore.Qt.UserRole + 4
ITEM_TYPE_ROLE = QtCore.Qt.UserRole + 5
NAME_ALLOWED_SYMBOLS = "a-zA-Z0-9_" NAME_ALLOWED_SYMBOLS = "a-zA-Z0-9_"
NAME_REGEX = re.compile("^[" + NAME_ALLOWED_SYMBOLS + "]*$") NAME_REGEX = re.compile("^[" + NAME_ALLOWED_SYMBOLS + "]*$")

View file

@ -5,6 +5,7 @@ from uuid import uuid4
from .constants import ( from .constants import (
IDENTIFIER_ROLE, IDENTIFIER_ROLE,
ITEM_TYPE_ROLE,
DUPLICATED_ROLE, DUPLICATED_ROLE,
HIERARCHY_CHANGE_ABLE_ROLE, HIERARCHY_CHANGE_ABLE_ROLE,
REMOVED_ROLE REMOVED_ROLE
@ -1015,6 +1016,7 @@ class BaseItem:
_name_icon = None _name_icon = None
_is_duplicated = False _is_duplicated = False
item_type = "base"
_None = object() _None = object()
@ -1027,6 +1029,7 @@ class BaseItem:
key: None key: None
for key in self.columns for key in self.columns
} }
self._global_data = {}
self._source_data = data self._source_data = data
if data: if data:
for key, value in data.items(): for key, value in data.items():
@ -1052,7 +1055,10 @@ class BaseItem:
self._children.pop(idx) self._children.pop(idx)
self._children.insert(row, item) self._children.insert(row, item)
def _global_data(self, role): def _get_global_data(self, role):
if role == ITEM_TYPE_ROLE:
return self.item_type
if role == IDENTIFIER_ROLE: if role == IDENTIFIER_ROLE:
return self._id return self._id
@ -1062,10 +1068,14 @@ class BaseItem:
if role == REMOVED_ROLE: if role == REMOVED_ROLE:
return False return False
return self._None return self._global_data.get(role, self._None)
def _set_global_data(self, value, role):
self._global_data[role] = value
return True
def data(self, key, role): def data(self, key, role):
value = self._global_data(role) value = self._get_global_data(role)
if value is not self._None: if value is not self._None:
return value return value
@ -1096,14 +1106,12 @@ class BaseItem:
return True return True
if role == QtCore.Qt.EditRole: if role == QtCore.Qt.EditRole:
if key not in self.editable_columns: if key in self.editable_columns:
return False self._data[key] = value
# must return true if successful
return True
self._data[key] = value return self._set_global_data(value, role)
# must return true if successful
return True
return False
@property @property
def id(self): def id(self):
@ -1175,6 +1183,8 @@ class BaseItem:
class RootItem(BaseItem): class RootItem(BaseItem):
item_type = "root"
def __init__(self, model): def __init__(self, model):
super(RootItem, self).__init__() super(RootItem, self).__init__()
self._model = model self._model = model
@ -1187,6 +1197,8 @@ class RootItem(BaseItem):
class ProjectItem(BaseItem): class ProjectItem(BaseItem):
item_type = "project"
columns = { columns = {
"name", "name",
"type", "type",
@ -1261,6 +1273,8 @@ class ProjectItem(BaseItem):
class AssetItem(BaseItem): class AssetItem(BaseItem):
item_type = "asset"
columns = { columns = {
"name", "name",
"type", "type",
@ -1452,7 +1466,7 @@ class AssetItem(BaseItem):
cls._name_icon = qtawesome.icon("fa.folder", color="#333333") cls._name_icon = qtawesome.icon("fa.folder", color="#333333")
return cls._name_icon return cls._name_icon
def _global_data(self, role): def _get_global_data(self, role):
if role == HIERARCHY_CHANGE_ABLE_ROLE: if role == HIERARCHY_CHANGE_ABLE_ROLE:
return self._hierarchy_changes_enabled return self._hierarchy_changes_enabled
@ -1463,7 +1477,7 @@ class AssetItem(BaseItem):
return "Asset with name \"{}\" already exists.".format( return "Asset with name \"{}\" already exists.".format(
self._data["name"] self._data["name"]
) )
return super(AssetItem, self)._global_data(role) return super(AssetItem, self)._get_global_data(role)
def data(self, key, role): def data(self, key, role):
if role == QtCore.Qt.BackgroundRole: if role == QtCore.Qt.BackgroundRole:
@ -1577,6 +1591,8 @@ class AssetItem(BaseItem):
class TaskItem(BaseItem): class TaskItem(BaseItem):
item_type = "task"
columns = { columns = {
"name", "name",
"type" "type"
@ -1608,7 +1624,7 @@ class TaskItem(BaseItem):
def add_child(self, item, row=None): def add_child(self, item, row=None):
raise AssertionError("BUG: Can't add children to Task") raise AssertionError("BUG: Can't add children to Task")
def _global_data(self, role): def _get_global_data(self, role):
if role == REMOVED_ROLE: if role == REMOVED_ROLE:
return self._removed return self._removed
@ -1616,7 +1632,7 @@ class TaskItem(BaseItem):
return "Duplicated Task name \"{}\".".format( return "Duplicated Task name \"{}\".".format(
self._data["name"] self._data["name"]
) )
return super(TaskItem, self)._global_data(role) return super(TaskItem, self)._get_global_data(role)
def to_doc_data(self): def to_doc_data(self):
if self._removed: if self._removed: