17#include <unordered_map>
23struct RegisteredMenuItem
26 std::string mMenuPath;
27 std::string mItemPath;
28 MenuCallback mCallback;
30 std::string mShortcut;
31 bool mIsSeparator =
false;
37struct RegisteredWindow
40 std::string mWindowName;
41 std::string mWindowId;
42 WindowDrawCallback mDrawFunc;
50struct RegisteredInspector
53 std::string mNodeTypeName;
54 InspectorDrawCallback mDrawFunc;
61struct RegisteredContextItem
64 std::string mItemPath;
65 std::string mAssetTypeFilter;
66 MenuCallback mCallback;
74struct RegisteredEventCallback
77 EventCallback mCallback;
84struct RegisteredStringEventCallback
87 StringEventCallback mCallback;
94struct RegisteredPlatformEventCallback
97 PlatformEventCallback mCallback;
104struct RegisteredPackageFinishedCallback
107 PackageFinishedCallback mCallback;
114struct RegisteredPlayModeCallback
117 PlayModeCallback mCallback;
124struct RegisteredTopLevelMenu
127 std::string mMenuName;
128 TopLevelMenuDrawCallback mDrawFunc;
142 int32_t mPosition = -1;
148struct RegisteredToolbarItem
151 std::string mItemName;
152 ToolbarDrawCallback mDrawFunc;
159struct RegisteredMenuItemEx
162 std::string mMenuPath;
163 std::string mItemPath;
164 MenuCallback mCallback;
166 std::string mShortcut;
167 MenuValidationCallback mValidateFunc;
173struct RegisteredNodeMenuItems
176 std::string mCategory;
177 MenuSectionDrawCallback mDrawFunc;
184struct RegisteredCreateAssetItems
187 MenuSectionDrawCallback mDrawFunc;
194struct RegisteredSpawnItems
197 MenuSectionDrawCallback mDrawFunc;
204struct RegisteredSceneType
207 std::string mTypeName;
208 SceneCreationCallback mCreateFunc;
215struct RegisteredViewportContextItem
218 std::string mItemPath;
219 MenuCallback mCallback;
226struct RegisteredViewportOverlay
229 std::string mOverlayName;
230 ViewportOverlayCallback mDrawFunc;
237struct RegisteredPreferencesPanel
240 std::string mPanelName;
241 std::string mPanelCategory;
242 PreferencesPanelDrawCallback mDrawFunc;
243 PreferencesLoadCallback mLoadFunc;
244 PreferencesSaveCallback mSaveFunc;
251struct RegisteredShortcut
254 std::string mShortcutId;
255 std::string mDisplayName;
256 std::string mDefaultBinding;
257 ShortcutCallback mCallback;
263 int32_t mKeyCode = -1;
269struct RegisteredPropertyDrawer
272 std::string mPropertyTypeName;
273 PropertyDrawCallback mDrawFunc;
280struct RegisteredHierarchyItemGUI
283 HierarchyItemGUICallback mDrawFunc;
290struct RegisteredAssetItemGUI
293 AssetItemGUICallback mDrawFunc;
300struct RegisteredHierarchyChangedCallback
303 HierarchyChangedCallback mCallback;
310struct RegisteredSimpleContextItem
313 std::string mItemPath;
314 MenuCallback mCallback;
321struct RegisteredGamePreviewResolution
332struct RegisteredPlayTarget
335 std::string mTargetName;
336 std::string mIconText;
337 PlayTargetCallback mCallback;
344struct RegisteredDragDropHandler
347 std::string mTargetArea;
348 DragDropHandlerCallback mHandler;
355struct RegisteredAssetImporter
358 std::string mExtension;
359 AssetImportCallback mImportFunc;
366struct RegisteredPreImportCallback
369 PreImportCallback mCallback;
376struct RegisteredPreBuildCallback
379 PreBuildCallback mCallback;
386struct RegisteredEditorModeCallback
389 EditorModeCallback mCallback;
396struct RegisteredGizmoTool
399 std::string mToolName;
400 std::string mIconText;
401 std::string mTooltip;
402 GizmoToolDrawCallback mDrawFunc;
404 bool mIsActive =
false;
410struct RegisteredControllerRoute
415 ControllerRouteCallback mCallback;
422struct RegisteredControllerServerEvent
425 ControllerServerEventCallback mCallback;
434class EditorUIHookManager
437 static void Create();
439 static EditorUIHookManager*
Get();
444 EditorUIHooks* GetHooks() {
return &mHooks; }
451 const std::vector<RegisteredMenuItem>& GetMenuItems(
const std::string& menuPath)
const;
457 void DrawMenuItems(
const std::string& menuPath);
464 const std::vector<RegisteredWindow>& GetWindows()
const {
return mWindows; }
474 void OpenWindow(
const std::string& windowId);
479 void CloseWindow(
const std::string& windowId);
484 bool IsWindowOpen(
const std::string& windowId)
const;
492 const RegisteredInspector* GetInspector(
const std::string& nodeTypeName)
const;
498 bool DrawInspector(
const std::string& nodeTypeName,
void* node);
505 void DrawNodeContextItems();
511 void DrawAssetContextItems(
const std::string& assetType);
518 void DrawTopLevelMenus();
525 void DrawTopLevelMenusAtPosition(int32_t builtinPosition);
529 void DrawToolbarItems();
533 void DrawNodeMenuItems(
const char* category,
void* parentNode);
534 void DrawCustomNodeCategories(
void* parentNode);
535 void DrawCreateAssetItems();
536 void DrawSpawnBasic3dItems(
void* parentNode);
537 void DrawSpawnBasicWidgetItems(
void* parentNode);
541 const std::vector<RegisteredSceneType>& GetSceneTypes()
const {
return mSceneTypes; }
542 void FireSceneCreation(
const std::string& typeName,
const char* sceneName,
void* rootNode);
546 void DrawViewportContextItems();
547 void DrawViewportOverlays(
float viewportX,
float viewportY,
float viewportW,
float viewportH);
548 bool HasViewportContextItems()
const;
552 const std::vector<RegisteredPreferencesPanel>& GetPreferencesPanels()
const {
return mPreferencesPanels; }
553 void LoadAddonPreferences();
554 void SaveAddonPreferences();
558 void ProcessShortcuts();
562 bool DrawPropertyDrawer(
const char* propertyTypeName,
const char* propertyName,
void* propertyOwner, int32_t propertyType);
566 void DrawHierarchyItemGUI(
void* node,
float rowX,
float rowY,
float rowW,
float rowH);
567 void DrawAssetItemGUI(
const char* assetName,
const char* assetType,
float rowX,
float rowY,
float rowW,
float rowH);
568 void FireOnHierarchyChanged(int32_t changeType,
void* node);
572 void DrawSceneTabContextItems();
573 void DrawDebugLogContextItems();
574 void DrawImportMenuItems();
575 void DrawAddonsMenuItems();
576 void DrawPlayTargets();
577 bool HasPlayTargets()
const;
581 const std::vector<RegisteredGamePreviewResolution>& GetGamePreviewResolutions()
const {
return mGamePreviewResolutions; }
585 bool HandleDragDrop(
const char* targetArea,
const char* payloadType,
const void* payloadData, int32_t payloadSize);
586 bool HandleAssetImport(
const char* filePath,
const char* extension);
587 bool FireOnPreAssetImport(
const char* filePath);
588 void FireOnPostAssetImport(
const char* assetPath);
592 bool FireOnPreBuild(int32_t platform);
593 void FireOnPostBuild(int32_t platform,
bool success);
594 void FireOnEditorModeChanged(int32_t newMode);
595 void DrawGizmoTools(
void* selectedNode);
596 const std::vector<RegisteredGizmoTool>& GetGizmoTools()
const {
return mGizmoTools; }
600 void FireOnProjectOpen(
const char* projectPath);
601 void FireOnProjectClose(
const char* projectPath);
602 void FireOnProjectSave(
const char* filePath);
603 void FireOnSceneOpen(
const char* scenePath);
604 void FireOnSceneClose(
const char* scenePath);
605 void FireOnPackageStarted(int32_t platform);
606 void FireOnPackageFinished(int32_t platform,
bool success);
607 void FireOnSelectionChanged();
608 void FireOnPlayModeChanged(int32_t state);
609 void FireOnEditorShutdown();
610 void FireOnAssetImported(
const char* assetPath);
611 void FireOnAssetDeleted(
const char* assetPath);
612 void FireOnAssetSaved(
const char* assetPath);
613 void FireOnAssetOpen(
const char* assetName);
614 void FireOnAssetOpened(
const char* assetName);
615 void FireOnUndoRedo();
616 void FireOnAssetDropHierarchy(
const char* assetName);
617 void FireOnAssetDropViewport(
const char* assetName);
621 const std::vector<RegisteredControllerRoute>& GetControllerRoutes()
const {
return mControllerRoutes; }
622 void FireOnControllerServerStateChanged(int32_t state);
629 void RemoveAllHooks(HookId hookId);
632 static EditorUIHookManager* sInstance;
633 EditorUIHookManager();
634 ~EditorUIHookManager();
636 void InitializeHooks();
639 std::unordered_map<std::string, std::vector<RegisteredMenuItem>> mMenuItems;
640 std::vector<RegisteredWindow> mWindows;
641 std::vector<RegisteredInspector> mInspectors;
642 std::vector<RegisteredContextItem> mContextItems;
645 std::vector<RegisteredTopLevelMenu> mTopLevelMenus;
646 std::vector<RegisteredToolbarItem> mToolbarItems;
647 std::vector<RegisteredStringEventCallback> mOnProjectOpen;
648 std::vector<RegisteredStringEventCallback> mOnProjectClose;
649 std::vector<RegisteredStringEventCallback> mOnProjectSave;
650 std::vector<RegisteredStringEventCallback> mOnSceneOpen;
651 std::vector<RegisteredStringEventCallback> mOnSceneClose;
652 std::vector<RegisteredPlatformEventCallback> mOnPackageStarted;
653 std::vector<RegisteredPackageFinishedCallback> mOnPackageFinished;
654 std::vector<RegisteredEventCallback> mOnSelectionChanged;
655 std::vector<RegisteredPlayModeCallback> mOnPlayModeChanged;
656 std::vector<RegisteredEventCallback> mOnEditorShutdown;
657 std::vector<RegisteredStringEventCallback> mOnAssetImported;
658 std::vector<RegisteredStringEventCallback> mOnAssetDeleted;
659 std::vector<RegisteredStringEventCallback> mOnAssetSaved;
660 std::vector<RegisteredStringEventCallback> mOnAssetOpen;
661 std::vector<RegisteredStringEventCallback> mOnAssetOpened;
662 std::vector<RegisteredEventCallback> mOnUndoRedo;
663 std::vector<RegisteredStringEventCallback> mOnAssetDropHierarchy;
664 std::vector<RegisteredStringEventCallback> mOnAssetDropViewport;
667 std::vector<RegisteredMenuItemEx> mMenuItemsEx;
670 std::vector<RegisteredNodeMenuItems> mNodeMenuItems;
671 std::vector<RegisteredCreateAssetItems> mCreateAssetItems;
672 std::vector<RegisteredSpawnItems> mSpawnBasic3dItems;
673 std::vector<RegisteredSpawnItems> mSpawnBasicWidgetItems;
676 std::vector<RegisteredSceneType> mSceneTypes;
679 std::vector<RegisteredViewportContextItem> mViewportContextItems;
680 std::vector<RegisteredViewportOverlay> mViewportOverlays;
683 std::vector<RegisteredPreferencesPanel> mPreferencesPanels;
686 std::vector<RegisteredShortcut> mShortcuts;
689 std::vector<RegisteredPropertyDrawer> mPropertyDrawers;
692 std::vector<RegisteredHierarchyItemGUI> mHierarchyItemGUI;
693 std::vector<RegisteredAssetItemGUI> mAssetItemGUI;
694 std::vector<RegisteredHierarchyChangedCallback> mOnHierarchyChanged;
697 std::vector<RegisteredGamePreviewResolution> mGamePreviewResolutions;
700 std::vector<RegisteredSimpleContextItem> mSceneTabContextItems;
701 std::vector<RegisteredSimpleContextItem> mDebugLogContextItems;
702 std::vector<RegisteredSimpleContextItem> mImportMenuItems;
703 std::vector<RegisteredSimpleContextItem> mAddonsMenuItems;
704 std::vector<RegisteredPlayTarget> mPlayTargets;
707 std::vector<RegisteredDragDropHandler> mDragDropHandlers;
708 std::vector<RegisteredAssetImporter> mAssetImporters;
709 std::vector<RegisteredPreImportCallback> mOnPreAssetImport;
710 std::vector<RegisteredStringEventCallback> mOnPostAssetImport;
713 std::vector<RegisteredPreBuildCallback> mOnPreBuild;
714 std::vector<RegisteredPackageFinishedCallback> mOnPostBuild;
715 std::vector<RegisteredEditorModeCallback> mOnEditorModeChanged;
716 std::vector<RegisteredGizmoTool> mGizmoTools;
719 std::vector<RegisteredControllerRoute> mControllerRoutes;
720 std::vector<RegisteredControllerServerEvent> mOnControllerServerStateChanged;
723 std::vector<RegisteredMenuItem> mEmptyMenuItems;
726 EditorUIHooks mHooks;
729 void ParseKeyBinding(RegisteredShortcut& shortcut);
735HookId GenerateHookId(
const char* identifier);
Editor UI extension system for native addons.