Files
tono/backend/node_menu.py

104 lines
2.2 KiB
Python

"""
Central Add Node menu manifest.
Edit MENU_LAYOUT to rearrange which nodes appear under each menu leaf and
their order within that leaf. Node classes not listed here fall back to their
class CATEGORY.
"""
from __future__ import annotations
from typing import Any
MENU_LAYOUT: dict[str, list[str]] = {
"Add": [
"Image",
"ImageDemo",
"Folder",
"ColorMap",
"Number",
"RangeSlider",
"Coordinate",
"CoordinatePair",
"Font",
],
"Output": [
"PreviewImage",
"Save",
"SaveImage",
"View3D",
"PrintTable",
"ValueDisplay",
],
"Overlay": [
"Markup",
"Annotations",
"AngleMeasure",
],
"Modify": [
"ColormapAdjust",
"CropResizeField",
"RotateField",
"FlipField",
],
"Filter": [
"GaussianFilter",
"MedianFilter",
"EdgeDetect",
"FFTFilter1D",
"FFTFilter2D",
"ScarRemoval",
],
"Frequency": [
"FFT2D",
"InverseFFT2D",
],
"Flatten": [
"PlaneLevelField",
"PolyLevelField",
"FixZero",
"LineCorrection",
],
"Measure": [
"CrossSection",
"Histogram",
"Cursors",
"Statistics",
"Stats",
],
"Mask": [
"DrawMask",
"ThresholdMask",
"MaskMorphology",
"MaskInvert",
"MaskCombine",
],
"Particles": [
"ParticleAnalysis",
],
}
_CATEGORY_ORDER = {category: index for index, category in enumerate(MENU_LAYOUT)}
_NODE_METADATA: dict[str, dict[str, Any]] = {}
for category, class_names in MENU_LAYOUT.items():
for node_order, class_name in enumerate(class_names):
_NODE_METADATA[class_name] = {
"category": category,
"category_order": _CATEGORY_ORDER[category],
"menu_order": node_order,
}
def get_menu_metadata(class_name: str) -> dict[str, Any]:
metadata = _NODE_METADATA.get(class_name)
if metadata is not None:
return dict(metadata)
return {
"category": "Unsorted",
"category_order": len(_CATEGORY_ORDER),
"menu_order": 10_000,
}