Implement adding and removing world items

Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
This commit is contained in:
TheJackiMonster 2022-10-30 13:28:40 +01:00
parent 906d05e377
commit 792e68038d
No known key found for this signature in database
GPG key ID: D850A5F772E880F9
2 changed files with 44 additions and 5 deletions

View file

@ -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)

View file

@ -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):