As a Roblox Developer, it is currently rather difficult to provide plugins that allows the user to efficiently create tabs and control systems for the Next Gen Ribbon. Studio currently does not provide a method or a way to get data related to neither the built-in nor the installed plugin controls.
Personally, I’m currently designing a plugin that allows the user to efficiently configure their Tabs on the Ribbon by providing control types other than IconButton, proper drag and drop support, and the ability to select a control from the built-in controls, just like how the “Add Tools” menu does.
Unfortunately, the only way for me to implement this selection system from built-in controls, is to save every action data in a .json file within a GitHub repository, and load them to the plugin once it initializes. This way, I can use all of this data to give the users ability to insert built-in controls. As you can clearly see, this is rather tedious and unnecessary.
To solve this, a method should be implemented that can be accessed from PluginSecurity, that allows the developer to gain information about a selected action/control from built-in controls.
Design
type ActionData = {
Text: string,
Icon: string?,
Uri: {
PluginId: string,
ItemId: string,
DataModel: "Edit" | "PlayClient" | "PlayServer" | "Standalone" | "Null",
Category: "Actions" | "Panels" | "Settings" | "Tools" | "Widgets"
}
}
Service:PromptSelectTool(): ActionData?
This proposed method would first prompt the user with the “Add Tools” menu of the Ribbon, which allows the user to search and select whichever tool they wish for the plugin to access the data of.
It would yield the current thread until the prompt has been completed, which if the user has selected a tool from the menu, would return a table containing the action data about the selected tool. If the user has cancelled/closed the menu, it would return nil.
This method would allow the developer to gain the necessary amount of info about a certain action, without having to go to the extend of which I have. It also provides a more consistent experience for the user, as the menu they’re accessing is the same as the one they would access from the Ribbon. It is easier and safer for both the user and the developer.