""" 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", "PSDF", "InverseFFT2D", ], "Flatten": [ "PlaneLevelField", "FacetLevelField", "PolyLevelField", "FixZero", "LineCorrection", ], "Measure": [ "CrossSection", "Curvature", "Histogram", "FractalDimension", "ACF", "Cursors", "Statistics", "Stats", ], "Mask": [ "DrawMask", "ThresholdMask", "MaskMorphology", "MaskInvert", "MaskCombine", "GrainDistanceTransform", ], "Particles": [ "WatershedSegmentation", "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, }