mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-10 16:02:33 +12:00
Change ID assignment method for Outline
This commit is contained in:
parent
917f1a2f73
commit
bee24d45b0
|
@ -934,9 +934,11 @@ def outlineFromMMD(text, parent):
|
|||
@return: outlineItem
|
||||
"""
|
||||
|
||||
item = outlineItem(parent=parent)
|
||||
md, body = parseMMDFile(text, asDict=True)
|
||||
|
||||
# Assign ID on creation, to avoid generating a new ID for this object
|
||||
item = outlineItem(parent=parent, ID=md.pop('ID'))
|
||||
|
||||
# Store metadata
|
||||
for k in md:
|
||||
if k in Outline.__members__:
|
||||
|
|
|
@ -42,11 +42,19 @@ class abstractItem():
|
|||
if xml is not None:
|
||||
self.setFromXML(xml)
|
||||
|
||||
if parent:
|
||||
# add this as a child to the parent, and link to the outlineModel of the parent
|
||||
parent.appendChild(self)
|
||||
elif not model:
|
||||
print("Warning: floating outline item (has no parent or associated Outline model).")
|
||||
|
||||
if ID:
|
||||
self._data[self.enum.ID] = ID
|
||||
self._model.updateAvailableIDs(ID) # Informs the ID distributor that this ID number has been used
|
||||
else:
|
||||
self._data[self.enum.ID] = self._model.requestNewID()
|
||||
|
||||
|
||||
if parent:
|
||||
parent.appendChild(self)
|
||||
|
||||
#######################################################################
|
||||
# Model
|
||||
|
@ -135,8 +143,6 @@ class abstractItem():
|
|||
self.childItems.insert(row, child)
|
||||
child._parent = self
|
||||
child.setModel(self._model)
|
||||
if not child.ID():
|
||||
child.getUniqueID()
|
||||
|
||||
def removeChild(self, row):
|
||||
"""
|
||||
|
@ -195,7 +201,7 @@ class abstractItem():
|
|||
###############################################################################
|
||||
|
||||
def getUniqueID(self, recursive=False):
|
||||
self.setData(self.enum.ID, self._model.rootItem.findUniqueID())
|
||||
self.setData(self.enum.ID, self._model.requestNewID())
|
||||
|
||||
if recursive:
|
||||
for c in self.children():
|
||||
|
@ -226,14 +232,6 @@ class abstractItem():
|
|||
IDs.extend(c.listAllIDs())
|
||||
return IDs
|
||||
|
||||
def findUniqueID(self):
|
||||
IDs = [int(i) for i in self.IDs]
|
||||
k = 1
|
||||
while k in IDs:
|
||||
k += 1
|
||||
self.IDs.append(str(k))
|
||||
return str(k)
|
||||
|
||||
#######################################################################
|
||||
# Data
|
||||
#######################################################################
|
||||
|
@ -250,6 +248,9 @@ class abstractItem():
|
|||
# Setting data
|
||||
self._data[column] = data
|
||||
|
||||
if column == self.enum.ID:
|
||||
self._model.updateAvailableIDs(data)
|
||||
|
||||
# Emit signal
|
||||
self.emitDataChanged(cols=[column]) # new in 0.5.0
|
||||
|
||||
|
|
|
@ -40,13 +40,22 @@ class abstractModel(QAbstractItemModel):
|
|||
"""
|
||||
def __init__(self, parent):
|
||||
QAbstractItemModel.__init__(self, parent)
|
||||
|
||||
self.rootItem = outlineItem(self, title="Root", ID="0")
|
||||
self.nextAvailableID = 1
|
||||
|
||||
# Stores removed item, in order to remove them on disk when saving, depending on the file format.
|
||||
self.removed = []
|
||||
self._removingRows = False
|
||||
|
||||
def requestNewID(self):
|
||||
newID = self.nextAvailableID
|
||||
self.nextAvailableID += 1
|
||||
return str(newID)
|
||||
|
||||
# Call this if loading an ID from file rather than assigning a new one.
|
||||
def updateAvailableIDs(self, addedID):
|
||||
if int(addedID) >= self.nextAvailableID:
|
||||
self.nextAvailableID = int(addedID) + 1
|
||||
|
||||
def index(self, row, column, parent):
|
||||
|
||||
if not self.hasIndex(row, column, parent):
|
||||
|
|
|
@ -2,11 +2,14 @@
|
|||
# --!-- coding: utf8 --!--
|
||||
|
||||
from manuskript.models.abstractModel import abstractModel
|
||||
from manuskript.models import outlineItem
|
||||
|
||||
|
||||
class outlineModel(abstractModel):
|
||||
def __init__(self, parent):
|
||||
abstractModel.__init__(self, parent)
|
||||
self.rootItem = outlineItem(model=self, title="Root", ID="0")
|
||||
|
||||
|
||||
def findItemsByPOV(self, POV):
|
||||
"Returns a list of IDs of all items whose POV is ``POV``."
|
||||
|
|
Loading…
Reference in a new issue