Source code for imagect.core.actmgr
import imagect.api.actmgr
from imagect.api.actmgr import IActMgr, IAction, createAction
from zope.interface import implementer
from typing import List
# from PyQt5.QtGui import QAction
from PyQt5.QtWidgets import QMenu, QAction
from collections import defaultdict
[docs]@implementer(IActMgr)
class ActMgr(object) :
"""
ActMgr
"""
def __init__(self):
super().__init__()
self.actions = {}
self.groups = defaultdict(dict)
self.file = createAction("file", "File", index=0)
self.edit = createAction("edit", "Edit")
self.image= createAction("image", "Image")
self.test = createAction("test", "Test")
for a in [self.file, self.edit, self.image, self.test] :
self.addAct(a)
[docs] def renameAct(self, id : str, title: str, index = 0):
if id in self.actions:
self.actions[id].title = title
self.actions[id].index = index
[docs] def topActions(self) -> List[QAction] :
return [self.file, self.edit, self.image, self.test]
[docs] def addAct(self, act :IAction):
"""
add sub action parent | child
"""
if not act.id in self.actions:
if act.pid not in self.actions.keys():
keys = act.pid.split(".")
grandpa = ".".join(keys[:-1])
pa = createAction(act.pid, act.pid)
if grandpa == "" : # child.id == child.pid == ""
self.actions[pa.id] = pa
else:
self.addAct(pa)
self.actions[act.id] = act
self.groups[act.pid][act.id] = act
else :
raise "duplicated Action id = {}".format(act.id)
[docs] def remAct(self, id : str) :
if id in self.actions:
act = self.actions[id]
self.actions.pop(id, None)
self.groups[act.pid].pop(act.id)
[docs] def queryChildren(self, pid : str)-> List[IAction]:
"""
todo: sort by index
"""
return self.sort(self.groups[pid].values())
[docs] def queryAll(self) -> List[IAction] :
return sorted([ self.actions[k] for k in self.actions ], key = lambda a : a.id)
[docs] def sort(self, acts : List[IAction]) -> List[IAction] :
return sorted(acts, key = lambda act: act.index)
from zope.component import getGlobalSiteManager
gsm = getGlobalSiteManager()
try:
mgr = imagect.api.actmgr.get()
except:
actmgr = ActMgr()
gsm.registerUtility(actmgr, IActMgr)