mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-21 05:12:27 +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
|
@return: outlineItem
|
||||||
"""
|
"""
|
||||||
|
|
||||||
item = outlineItem(parent=parent)
|
|
||||||
md, body = parseMMDFile(text, asDict=True)
|
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
|
# Store metadata
|
||||||
for k in md:
|
for k in md:
|
||||||
if k in Outline.__members__:
|
if k in Outline.__members__:
|
||||||
|
|
|
@ -42,11 +42,19 @@ class abstractItem():
|
||||||
if xml is not None:
|
if xml is not None:
|
||||||
self.setFromXML(xml)
|
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:
|
if ID:
|
||||||
self._data[self.enum.ID] = 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
|
# Model
|
||||||
|
@ -135,8 +143,6 @@ class abstractItem():
|
||||||
self.childItems.insert(row, child)
|
self.childItems.insert(row, child)
|
||||||
child._parent = self
|
child._parent = self
|
||||||
child.setModel(self._model)
|
child.setModel(self._model)
|
||||||
if not child.ID():
|
|
||||||
child.getUniqueID()
|
|
||||||
|
|
||||||
def removeChild(self, row):
|
def removeChild(self, row):
|
||||||
"""
|
"""
|
||||||
|
@ -195,7 +201,7 @@ class abstractItem():
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
def getUniqueID(self, recursive=False):
|
def getUniqueID(self, recursive=False):
|
||||||
self.setData(self.enum.ID, self._model.rootItem.findUniqueID())
|
self.setData(self.enum.ID, self._model.requestNewID())
|
||||||
|
|
||||||
if recursive:
|
if recursive:
|
||||||
for c in self.children():
|
for c in self.children():
|
||||||
|
@ -226,14 +232,6 @@ class abstractItem():
|
||||||
IDs.extend(c.listAllIDs())
|
IDs.extend(c.listAllIDs())
|
||||||
return IDs
|
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
|
# Data
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
@ -250,6 +248,9 @@ class abstractItem():
|
||||||
# Setting data
|
# Setting data
|
||||||
self._data[column] = data
|
self._data[column] = data
|
||||||
|
|
||||||
|
if column == self.enum.ID:
|
||||||
|
self._model.updateAvailableIDs(data)
|
||||||
|
|
||||||
# Emit signal
|
# Emit signal
|
||||||
self.emitDataChanged(cols=[column]) # new in 0.5.0
|
self.emitDataChanged(cols=[column]) # new in 0.5.0
|
||||||
|
|
||||||
|
|
|
@ -40,13 +40,22 @@ class abstractModel(QAbstractItemModel):
|
||||||
"""
|
"""
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
QAbstractItemModel.__init__(self, parent)
|
QAbstractItemModel.__init__(self, parent)
|
||||||
|
self.nextAvailableID = 1
|
||||||
self.rootItem = outlineItem(self, title="Root", ID="0")
|
|
||||||
|
|
||||||
# Stores removed item, in order to remove them on disk when saving, depending on the file format.
|
# Stores removed item, in order to remove them on disk when saving, depending on the file format.
|
||||||
self.removed = []
|
self.removed = []
|
||||||
self._removingRows = False
|
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):
|
def index(self, row, column, parent):
|
||||||
|
|
||||||
if not self.hasIndex(row, column, parent):
|
if not self.hasIndex(row, column, parent):
|
||||||
|
|
|
@ -2,11 +2,14 @@
|
||||||
# --!-- coding: utf8 --!--
|
# --!-- coding: utf8 --!--
|
||||||
|
|
||||||
from manuskript.models.abstractModel import abstractModel
|
from manuskript.models.abstractModel import abstractModel
|
||||||
|
from manuskript.models import outlineItem
|
||||||
|
|
||||||
|
|
||||||
class outlineModel(abstractModel):
|
class outlineModel(abstractModel):
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
abstractModel.__init__(self, parent)
|
abstractModel.__init__(self, parent)
|
||||||
|
self.rootItem = outlineItem(model=self, title="Root", ID="0")
|
||||||
|
|
||||||
|
|
||||||
def findItemsByPOV(self, POV):
|
def findItemsByPOV(self, POV):
|
||||||
"Returns a list of IDs of all items whose POV is ``POV``."
|
"Returns a list of IDs of all items whose POV is ``POV``."
|
||||||
|
|
Loading…
Reference in a new issue