-
Notifications
You must be signed in to change notification settings - Fork 8
Architecture
Explain basic architecture, in case you want to contribute to the code.
Feel free to make a PR for the wiki too. Not sure yet on the process for this, might need to setup a mirror repo.
MenuNode
class reads data from a config
It represents a node in the menu hierachy.
MenuNodeAbstract
inherits from MenuNode
, and adds abstract logic to create a menu in an app, from the data loaded in MenuNode
Ideally you only overwrite these methods
@property
def _default_root_parent(self):
"""get the default parent for the root node, optional method"""
return None
@abstractmethod
def _setup_sub_menu(self, parent_app_node=None):
"""instantiate & parent a sub menu"""
pass
@abstractmethod
def _setup_menu_item(self, parent_app_node=None):
"""instantiate & parent a menu item"""
pass
@abstractmethod
def _setup_separator(self, parent_app_node=None):
"""instantiate & parent a separator"""
pass
@abstractmethod
def teardown(self):
"""teardown the menu item"""
pass
all app implementations go in here, and inherit from MenuNodeAbstract
for the ones that are qt compatible, you can inherit from MenuNodeQt
, e.g. Krita
use lowercase name, with underscore for app module names
in def menu_node_class
we convert this name to CamelCase to grab the app node.
every app module should have an app node, named MenuNodeMyApp
, e.g. MenuNodeMax
the easiest is to have a look at e
Applications
Dev Docs
Other