Skip to content

Architecture

hannes edited this page Feb 14, 2023 · 4 revisions

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.

unimenu.dccs._abstract.py

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

unimenu.dccs

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

Clone this wiki locally