18#include <unordered_map>
24struct RegisteredMenuItem
27 std::string mMenuPath;
28 std::string mItemPath;
29 MenuCallback mCallback;
31 std::string mShortcut;
32 bool mIsSeparator =
false;
38struct RegisteredWindow
41 std::string mWindowName;
42 std::string mWindowId;
43 WindowDrawCallback mDrawFunc;
51struct RegisteredInspector
54 std::string mNodeTypeName;
55 InspectorDrawCallback mDrawFunc;
62struct RegisteredContextItem
65 std::string mItemPath;
66 std::string mAssetTypeFilter;
67 MenuCallback mCallback;
75struct RegisteredEventCallback
78 EventCallback mCallback;
85struct RegisteredStringEventCallback
88 StringEventCallback mCallback;
95struct RegisteredPlatformEventCallback
98 PlatformEventCallback mCallback;
105struct RegisteredPackageFinishedCallback
108 PackageFinishedCallback mCallback;
115struct RegisteredPlayModeCallback
118 PlayModeCallback mCallback;
125struct RegisteredTopLevelMenu
128 std::string mMenuName;
129 TopLevelMenuDrawCallback mDrawFunc;
143 int32_t mPosition = -1;
149struct RegisteredToolbarItem
152 std::string mItemName;
153 ToolbarDrawCallback mDrawFunc;
160struct RegisteredMenuItemEx
163 std::string mMenuPath;
164 std::string mItemPath;
165 MenuCallback mCallback;
167 std::string mShortcut;
168 MenuValidationCallback mValidateFunc;
174struct RegisteredNodeMenuItems
177 std::string mCategory;
178 MenuSectionDrawCallback mDrawFunc;
185struct RegisteredCreateAssetItems
188 MenuSectionDrawCallback mDrawFunc;
200struct RegisteredCreateAssetItem
204 MenuCallback mCallback;
211struct RegisteredSpawnItems
214 MenuSectionDrawCallback mDrawFunc;
221struct RegisteredSceneType
224 std::string mTypeName;
225 SceneCreationCallback mCreateFunc;
232struct RegisteredViewportContextItem
235 std::string mItemPath;
236 MenuCallback mCallback;
243struct RegisteredViewportOverlay
246 std::string mOverlayName;
247 ViewportOverlayCallback mDrawFunc;
260struct RegisteredFileDropHandler
263 EditorUIHooks::FileDropCallback mCallback;
275struct RegisteredViewportMode
279 std::string mDisplayName;
280 int32_t mSortOrder = 0;
281 EditorUIHooks::ViewportModeCanActivateCallback mCanActivate =
nullptr;
282 EditorUIHooks::ViewportModeActivateCallback mOnActivate =
nullptr;
283 EditorUIHooks::ViewportModeDeactivateCallback mOnDeactivate =
nullptr;
284 EditorUIHooks::ViewportModeTickCallback mTick =
nullptr;
285 EditorUIHooks::ViewportModeDrawPanelCallback mDrawPanel =
nullptr;
286 void* mUserData =
nullptr;
292struct RegisteredPreferencesPanel
295 std::string mPanelName;
296 std::string mPanelCategory;
297 PreferencesPanelDrawCallback mDrawFunc;
298 PreferencesLoadCallback mLoadFunc;
299 PreferencesSaveCallback mSaveFunc;
306struct RegisteredShortcut
309 std::string mShortcutId;
310 std::string mDisplayName;
311 std::string mDefaultBinding;
312 ShortcutCallback mCallback;
318 int32_t mKeyCode = -1;
324struct RegisteredPropertyDrawer
327 std::string mPropertyTypeName;
328 PropertyDrawCallback mDrawFunc;
335struct RegisteredHierarchyItemGUI
338 HierarchyItemGUICallback mDrawFunc;
345struct RegisteredAssetItemGUI
348 AssetItemGUICallback mDrawFunc;
355struct RegisteredHierarchyChangedCallback
358 HierarchyChangedCallback mCallback;
365struct RegisteredSimpleContextItem
368 std::string mItemPath;
369 MenuCallback mCallback;
376struct RegisteredGamePreviewResolution
387struct RegisteredPlayTarget
390 std::string mTargetName;
391 std::string mIconText;
392 PlayTargetCallback mCallback;
399struct RegisteredDragDropHandler
402 std::string mTargetArea;
403 DragDropHandlerCallback mHandler;
410struct RegisteredAssetImporter
413 std::string mExtension;
414 AssetImportCallback mImportFunc;
421struct RegisteredPreImportCallback
424 PreImportCallback mCallback;
431struct RegisteredPreBuildCallback
434 PreBuildCallback mCallback;
441struct RegisteredEditorModeCallback
444 EditorModeCallback mCallback;
451struct RegisteredGizmoTool
454 std::string mToolName;
455 std::string mIconText;
456 std::string mTooltip;
457 GizmoToolDrawCallback mDrawFunc;
459 bool mIsActive =
false;
465struct RegisteredControllerRoute
470 ControllerRouteCallback mCallback;
477struct RegisteredControllerServerEvent
480 ControllerServerEventCallback mCallback;
489class EditorUIHookManager
492 static void Create();
494 static EditorUIHookManager*
Get();
499 EditorUIHooks* GetHooks() {
return &mHooks; }
506 const std::vector<RegisteredMenuItem>& GetMenuItems(
const std::string& menuPath)
const;
512 void DrawMenuItems(
const std::string& menuPath);
519 const std::vector<RegisteredWindow>& GetWindows()
const {
return mWindows; }
529 void OpenWindow(
const std::string& windowId);
534 void CloseWindow(
const std::string& windowId);
539 bool IsWindowOpen(
const std::string& windowId)
const;
547 const RegisteredInspector* GetInspector(
const std::string& nodeTypeName)
const;
553 bool DrawInspector(
const std::string& nodeTypeName,
void* node);
560 void DrawNodeContextItems();
566 void DrawAssetContextItems(
const std::string& assetType);
573 void DrawTopLevelMenus();
580 void DrawTopLevelMenusAtPosition(int32_t builtinPosition);
584 void DrawToolbarItems();
588 void DrawNodeMenuItems(
const char* category,
void* parentNode);
589 void DrawCustomNodeCategories(
void* parentNode);
590 void DrawCreateAssetItems();
591 void DrawSpawnBasic3dItems(
void* parentNode);
592 void DrawSpawnBasicWidgetItems(
void* parentNode);
596 const std::vector<RegisteredSceneType>& GetSceneTypes()
const {
return mSceneTypes; }
597 void FireSceneCreation(
const std::string& typeName,
const char* sceneName,
void* rootNode);
601 void DrawViewportContextItems();
602 void DrawViewportOverlays(
float viewportX,
float viewportY,
float viewportW,
float viewportH);
603 bool HasViewportContextItems()
const;
607 const std::vector<RegisteredPreferencesPanel>& GetPreferencesPanels()
const {
return mPreferencesPanels; }
608 void LoadAddonPreferences();
609 void SaveAddonPreferences();
613 void ProcessShortcuts();
617 bool DrawPropertyDrawer(
const char* propertyTypeName,
const char* propertyName,
void* propertyOwner, int32_t propertyType);
621 void DrawHierarchyItemGUI(
void* node,
float rowX,
float rowY,
float rowW,
float rowH);
622 void DrawAssetItemGUI(
const char* assetName,
const char* assetType,
float rowX,
float rowY,
float rowW,
float rowH);
623 void FireOnHierarchyChanged(int32_t changeType,
void* node);
627 void DrawSceneTabContextItems();
628 void DrawDebugLogContextItems();
629 void DrawImportMenuItems();
630 void DrawAddonsMenuItems();
631 void DrawPlayTargets();
632 bool HasPlayTargets()
const;
636 const std::vector<RegisteredGamePreviewResolution>& GetGamePreviewResolutions()
const {
return mGamePreviewResolutions; }
640 bool HandleDragDrop(
const char* targetArea,
const char* payloadType,
const void* payloadData, int32_t payloadSize);
641 bool HandleAssetImport(
const char* filePath,
const char* extension);
642 bool FireOnPreAssetImport(
const char* filePath);
643 void FireOnPostAssetImport(
const char* assetPath);
647 bool FireOnPreBuild(int32_t platform);
648 void FireOnPostBuild(int32_t platform,
bool success);
649 void FireOnEditorModeChanged(int32_t newMode);
650 void DrawGizmoTools(
void* selectedNode);
651 const std::vector<RegisteredGizmoTool>& GetGizmoTools()
const {
return mGizmoTools; }
655 void FireOnProjectOpen(
const char* projectPath);
656 void FireOnProjectClose(
const char* projectPath);
657 void FireOnProjectSave(
const char* filePath);
658 void FireOnSceneOpen(
const char* scenePath);
659 void FireOnSceneClose(
const char* scenePath);
660 void FireOnPackageStarted(int32_t platform);
661 void FireOnPackageFinished(int32_t platform,
bool success);
662 void FireOnSelectionChanged();
663 void FireOnPlayModeChanged(int32_t state);
664 void FireOnEditorShutdown();
665 void FireOnAssetImported(
const char* assetPath);
666 void FireOnAssetDeleted(
const char* assetPath);
667 void FireOnAssetSaved(
const char* assetPath);
668 void FireOnAssetOpen(
const char* assetName);
669 void FireOnAssetOpened(
const char* assetName);
670 void FireOnUndoRedo();
671 void FireOnAssetDropHierarchy(
const char* assetName);
672 void FireOnAssetDropViewport(
const char* assetName);
676 const std::vector<RegisteredControllerRoute>& GetControllerRoutes()
const {
return mControllerRoutes; }
677 void FireOnControllerServerStateChanged(int32_t state);
687 const std::vector<RegisteredViewportMode>& GetViewportModes()
const {
return mViewportModes; }
693 std::vector<const RegisteredViewportMode*> GetViewportModesSorted()
const;
696 const RegisteredViewportMode* FindViewportMode(
const std::string& modeId)
const;
703 void FireViewportModeActivate(
const std::string& modeId);
706 void FireViewportModeDeactivate(
const std::string& modeId);
709 bool CanActivateViewportMode(
const std::string& modeId);
712 void TickActiveViewportMode(
float deltaTime);
715 void DrawActiveViewportModePanel();
722 void RemoveAllHooks(HookId hookId);
733 bool DispatchFileDrop(
const std::vector<std::string>& paths);
736 static EditorUIHookManager* sInstance;
737 EditorUIHookManager();
738 ~EditorUIHookManager();
740 void InitializeHooks();
743 std::unordered_map<std::string, std::vector<RegisteredMenuItem>> mMenuItems;
744 std::vector<RegisteredWindow> mWindows;
745 std::vector<RegisteredInspector> mInspectors;
746 std::vector<RegisteredContextItem> mContextItems;
749 std::vector<RegisteredTopLevelMenu> mTopLevelMenus;
750 std::vector<RegisteredToolbarItem> mToolbarItems;
751 std::vector<RegisteredStringEventCallback> mOnProjectOpen;
752 std::vector<RegisteredStringEventCallback> mOnProjectClose;
753 std::vector<RegisteredStringEventCallback> mOnProjectSave;
754 std::vector<RegisteredStringEventCallback> mOnSceneOpen;
755 std::vector<RegisteredStringEventCallback> mOnSceneClose;
756 std::vector<RegisteredPlatformEventCallback> mOnPackageStarted;
757 std::vector<RegisteredPackageFinishedCallback> mOnPackageFinished;
758 std::vector<RegisteredEventCallback> mOnSelectionChanged;
759 std::vector<RegisteredPlayModeCallback> mOnPlayModeChanged;
760 std::vector<RegisteredEventCallback> mOnEditorShutdown;
761 std::vector<RegisteredStringEventCallback> mOnAssetImported;
762 std::vector<RegisteredStringEventCallback> mOnAssetDeleted;
763 std::vector<RegisteredStringEventCallback> mOnAssetSaved;
764 std::vector<RegisteredStringEventCallback> mOnAssetOpen;
765 std::vector<RegisteredStringEventCallback> mOnAssetOpened;
766 std::vector<RegisteredEventCallback> mOnUndoRedo;
767 std::vector<RegisteredStringEventCallback> mOnAssetDropHierarchy;
768 std::vector<RegisteredStringEventCallback> mOnAssetDropViewport;
771 std::vector<RegisteredMenuItemEx> mMenuItemsEx;
774 std::vector<RegisteredNodeMenuItems> mNodeMenuItems;
775 std::vector<RegisteredCreateAssetItems> mCreateAssetItems;
776 std::vector<RegisteredCreateAssetItem> mCreateAssetItemSingles;
777 std::vector<RegisteredSpawnItems> mSpawnBasic3dItems;
778 std::vector<RegisteredSpawnItems> mSpawnBasicWidgetItems;
781 std::vector<RegisteredSceneType> mSceneTypes;
784 std::vector<RegisteredViewportContextItem> mViewportContextItems;
785 std::vector<RegisteredViewportOverlay> mViewportOverlays;
788 std::vector<RegisteredPreferencesPanel> mPreferencesPanels;
791 std::vector<RegisteredShortcut> mShortcuts;
794 std::vector<RegisteredPropertyDrawer> mPropertyDrawers;
797 std::vector<RegisteredHierarchyItemGUI> mHierarchyItemGUI;
798 std::vector<RegisteredAssetItemGUI> mAssetItemGUI;
799 std::vector<RegisteredHierarchyChangedCallback> mOnHierarchyChanged;
802 std::vector<RegisteredGamePreviewResolution> mGamePreviewResolutions;
805 std::vector<RegisteredSimpleContextItem> mSceneTabContextItems;
806 std::vector<RegisteredSimpleContextItem> mDebugLogContextItems;
807 std::vector<RegisteredSimpleContextItem> mImportMenuItems;
808 std::vector<RegisteredSimpleContextItem> mAddonsMenuItems;
809 std::vector<RegisteredPlayTarget> mPlayTargets;
812 std::vector<RegisteredFileDropHandler> mFileDropHandlers;
817 std::vector<RegisteredViewportMode> mViewportModes;
820 std::vector<RegisteredDragDropHandler> mDragDropHandlers;
821 std::vector<RegisteredAssetImporter> mAssetImporters;
822 std::vector<RegisteredPreImportCallback> mOnPreAssetImport;
823 std::vector<RegisteredStringEventCallback> mOnPostAssetImport;
826 std::vector<RegisteredPreBuildCallback> mOnPreBuild;
827 std::vector<RegisteredPackageFinishedCallback> mOnPostBuild;
828 std::vector<RegisteredEditorModeCallback> mOnEditorModeChanged;
829 std::vector<RegisteredGizmoTool> mGizmoTools;
832 std::vector<RegisteredControllerRoute> mControllerRoutes;
833 std::vector<RegisteredControllerServerEvent> mOnControllerServerStateChanged;
836 BuildTargetRegistry mBuildTargets;
840 BuildTargetRegistry& GetBuildTargets() {
return mBuildTargets; }
841 const BuildTargetRegistry& GetBuildTargets()
const {
return mBuildTargets; }
845 std::vector<RegisteredMenuItem> mEmptyMenuItems;
848 EditorUIHooks mHooks;
851 void ParseKeyBinding(RegisteredShortcut& shortcut);
857HookId GenerateHookId(
const char* identifier);
Editor UI extension system for native addons.