mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-16 10:52:29 +12:00
Implement adding and removing world items
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
This commit is contained in:
parent
906d05e377
commit
792e68038d
|
@ -9,9 +9,12 @@ from manuskript.io.opmlFile import OpmlFile, OpmlOutlineItem
|
|||
|
||||
class WorldItem:
|
||||
|
||||
def __init__(self, world, UID: UniqueID, name: str):
|
||||
def __init__(self, world, UID: UniqueID, name: str = None):
|
||||
self.world = world
|
||||
|
||||
if name is None:
|
||||
name = "New item"
|
||||
|
||||
self.UID = UID
|
||||
self.name = name
|
||||
self.description = None
|
||||
|
@ -40,17 +43,30 @@ class World:
|
|||
self.items = dict()
|
||||
self.top = list()
|
||||
|
||||
def addItem(self, name: str) -> WorldItem:
|
||||
def addItem(self, name: str = None, parent: WorldItem = None) -> WorldItem:
|
||||
item = WorldItem(self, self.host.newID(), name)
|
||||
|
||||
if parent is None:
|
||||
self.top.append(item)
|
||||
else:
|
||||
parent.children.append(item)
|
||||
|
||||
self.items[item.UID.value] = item
|
||||
return item
|
||||
|
||||
def loadItem(self, ID: int, name: str) -> WorldItem:
|
||||
def loadItem(self, ID: int, name: str = None) -> WorldItem:
|
||||
item = WorldItem(self, self.host.loadID(ID), name)
|
||||
self.items[item.UID.value] = item
|
||||
return item
|
||||
|
||||
def removeItem(self, item: WorldItem):
|
||||
for __item in self.items.values():
|
||||
if item in __item.children:
|
||||
__item.children.remove(item)
|
||||
|
||||
if item in self.top:
|
||||
self.top.remove(item)
|
||||
|
||||
self.host.removeID(item.UID)
|
||||
self.items.pop(item.UID.value)
|
||||
|
||||
|
|
|
@ -21,6 +21,8 @@ class WorldView:
|
|||
|
||||
self.widget = builder.get_object("world_view")
|
||||
|
||||
self.worldTreeView = builder.get_object("world_tree_view")
|
||||
|
||||
self.worldStore = builder.get_object("world_store")
|
||||
self.refreshWorldStore()
|
||||
|
||||
|
@ -37,8 +39,11 @@ class WorldView:
|
|||
|
||||
self.worldSelection.connect("changed", self.worldSelectionChanged)
|
||||
|
||||
self.worldTreeView = builder.get_object("world_tree_view")
|
||||
self.worldTreeView.expand_all()
|
||||
self.addToWorldButton = builder.get_object("add_to_world")
|
||||
self.removeFromWorldButton = builder.get_object("remove_from_world")
|
||||
|
||||
self.addToWorldButton.connect("clicked", self.addToWorldClicked)
|
||||
self.removeFromWorldButton.connect("clicked", self.removeFromWorldClicked)
|
||||
|
||||
self.nameBuffer = builder.get_object("name")
|
||||
self.descriptionBuffer = builder.get_object("description")
|
||||
|
@ -72,6 +77,8 @@ class WorldView:
|
|||
for item in self.world.top:
|
||||
self.__appendWorldItem(item)
|
||||
|
||||
self.worldTreeView.expand_all()
|
||||
|
||||
def loadWorldData(self, worldItem: WorldItem):
|
||||
self.worldItem = None
|
||||
|
||||
|
@ -104,6 +111,22 @@ class WorldView:
|
|||
else:
|
||||
self.loadWorldData(worldItem)
|
||||
|
||||
def addToWorldClicked(self, button: Gtk.Button):
|
||||
name = invalidString(self.filterWorldBuffer.get_text())
|
||||
worldItem = self.world.addItem(name, self.worldItem)
|
||||
|
||||
if worldItem is None:
|
||||
return
|
||||
|
||||
self.refreshWorldStore()
|
||||
|
||||
def removeFromWorldClicked(self, button: Gtk.Button):
|
||||
if self.worldItem is None:
|
||||
return
|
||||
|
||||
self.worldItem.remove()
|
||||
self.refreshWorldStore()
|
||||
|
||||
def __matchWorldItemByText(self, worldItem: WorldItem, text: str):
|
||||
for item in worldItem:
|
||||
if self.__matchWorldItemByText(item, text):
|
||||
|
|
Loading…
Reference in a new issue