mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-09-28 07:21:31 +12:00
Attributes unique IDs to outlineItems
This commit is contained in:
parent
fd94cc1288
commit
9094a18e24
3 changed files with 56 additions and 12 deletions
|
@ -2,8 +2,6 @@
|
|||
#--!-- coding: utf8 --!--
|
||||
|
||||
|
||||
|
||||
|
||||
# As seen on http://stackoverflow.com/questions/36932/how-can-i-represent-an-enum-in-python
|
||||
|
||||
from enum import Enum
|
||||
|
|
|
@ -14,7 +14,7 @@ class outlineModel(QAbstractItemModel):
|
|||
def __init__(self, parent):
|
||||
QAbstractItemModel.__init__(self, parent)
|
||||
|
||||
self.rootItem = outlineItem(self, title="root")
|
||||
self.rootItem = outlineItem(self, title="root", ID="0")
|
||||
|
||||
def index(self, row, column, parent):
|
||||
|
||||
|
@ -327,8 +327,8 @@ class outlineModel(QAbstractItemModel):
|
|||
else:
|
||||
root = ET.fromstring(xml)
|
||||
|
||||
self.rootItem = outlineItem(self, xml=ET.tostring(root))
|
||||
|
||||
self.rootItem = outlineItem(model=self, xml=ET.tostring(root), ID="0")
|
||||
self.rootItem.checkIDs()
|
||||
|
||||
def pathToIndex(self, index, path=""):
|
||||
if not index.isValid():
|
||||
|
@ -352,13 +352,14 @@ class outlineModel(QAbstractItemModel):
|
|||
|
||||
class outlineItem():
|
||||
|
||||
def __init__(self, model=None, title="", _type="folder", xml=None):
|
||||
def __init__(self, model=None, title="", _type="folder", xml=None, parent=None, ID=None):
|
||||
|
||||
self._data = {}
|
||||
self.childItems = []
|
||||
self._parent = None
|
||||
self._model = model
|
||||
self.defaultTextType = None
|
||||
self.IDs = [] # used by root item to store unique IDs
|
||||
|
||||
if title:
|
||||
self._data[Outline.title] = title
|
||||
|
@ -368,6 +369,12 @@ class outlineItem():
|
|||
|
||||
if xml is not None:
|
||||
self.setFromXML(xml)
|
||||
|
||||
if parent:
|
||||
parent.appendChild(self)
|
||||
|
||||
if ID:
|
||||
self._data[Outline.ID] = ID
|
||||
|
||||
|
||||
def child(self, row):
|
||||
|
@ -521,6 +528,8 @@ class outlineItem():
|
|||
self.childItems.insert(row, child)
|
||||
child._parent = self
|
||||
child.setModel(self._model)
|
||||
if not child.data(Outline.ID.value):
|
||||
child.getUniqueID()
|
||||
self.updateWordCount()
|
||||
|
||||
def setModel(self, model):
|
||||
|
@ -627,5 +636,40 @@ class outlineItem():
|
|||
self.setData(Outline.__members__[k].value, str(root.attrib[k]))
|
||||
|
||||
for child in root:
|
||||
item = outlineItem(self._model, xml=ET.tostring(child))
|
||||
self.appendChild(item)
|
||||
item = outlineItem(self._model, xml=ET.tostring(child), parent=self)
|
||||
|
||||
def getUniqueID(self):
|
||||
self.setData(Outline.ID.value, self._model.rootItem.findUniqueID())
|
||||
|
||||
def checkIDs(self):
|
||||
"""This is called when a model is loaded.
|
||||
|
||||
Makes a list of all sub-items IDs, that is used to generate unique IDs afterwards.
|
||||
"""
|
||||
self.IDs = self.listAllIDs()
|
||||
|
||||
if max([self.IDs.count(i) for i in self.IDs if i]) != 1:
|
||||
print("There are some doublons:", [i for i in self.IDs if i and self.IDs.count(i) != 1])
|
||||
|
||||
def checkChildren(item):
|
||||
for c in item.children():
|
||||
_id = c.data(Outline.ID.value)
|
||||
if not _id or _id == "0":
|
||||
c.getUniqueID()
|
||||
checkChildren(c)
|
||||
|
||||
checkChildren(self)
|
||||
|
||||
|
||||
def listAllIDs(self):
|
||||
IDs = [self.data(Outline.ID.value)]
|
||||
for c in self.children():
|
||||
IDs.extend(c.listAllIDs())
|
||||
return IDs
|
||||
|
||||
def findUniqueID(self):
|
||||
k = 0
|
||||
while str(k) in self.IDs:
|
||||
k += 1
|
||||
self.IDs.append(str(k))
|
||||
return str(k)
|
|
@ -371,10 +371,11 @@ class welcome(QWidget, Ui_welcome):
|
|||
item = outlineItem(title="{} {}".format(
|
||||
datas[0][1],
|
||||
str(n)),
|
||||
_type=_type)
|
||||
_type=_type,
|
||||
parent=parent)
|
||||
if len(datas) == 2:
|
||||
item.setData(Outline.setGoal.value, datas[1][0])
|
||||
parent.appendChild(item)
|
||||
#parent.appendChild(item)
|
||||
else:
|
||||
n = 0
|
||||
for i in range(datas[0][0]):
|
||||
|
@ -382,8 +383,9 @@ class welcome(QWidget, Ui_welcome):
|
|||
item = outlineItem(title="{} {}".format(
|
||||
datas[0][1],
|
||||
str(n)),
|
||||
_type="folder")
|
||||
parent.appendChild(item)
|
||||
_type="folder",
|
||||
parent=parent)
|
||||
#parent.appendChild(item)
|
||||
addElement(item, datas[1:])
|
||||
|
||||
if self.template:
|
||||
|
|
Loading…
Reference in a new issue