feat: Added support for creating views and drawing ImGui elemts from C#

This commit is contained in:
WerWolv
2024-03-11 21:09:45 +01:00
parent a3f550c585
commit e3565d5bcb
8 changed files with 122 additions and 43 deletions

View File

@@ -94,6 +94,7 @@ private:
SCRIPT_API(void registerProvider, const char *typeName, const char *name, ScriptDataProvider::ReadFunction readFunc, ScriptDataProvider::WriteFunction writeFunc, ScriptDataProvider::GetSizeFunction getSizeFunc) {
auto typeNameString = std::string(typeName);
auto nameString = std::string(name);
hex::ContentRegistry::Provider::impl::add(typeNameString, [typeNameString, nameString, readFunc, writeFunc, getSizeFunc] -> std::unique_ptr<hex::prv::Provider> {
auto provider = std::make_unique<ScriptDataProvider>();
provider->setTypeName(typeNameString);

View File

@@ -1,4 +1,5 @@
#include <script_api.hpp>
#include <hex/api/content_registry.hpp>
#include <hex/api/imhex_api.hpp>
#include <hex/api/event_manager.hpp>
@@ -7,8 +8,10 @@
#include <hex/ui/popup.hpp>
#include <hex/helpers/utils.hpp>
#include <hex/ui/view.hpp>
#include <popups/popup_notification.hpp>
#include <toasts/toast_notification.hpp>
using namespace hex;
@@ -140,4 +143,40 @@ SCRIPT_API(void showYesNoQuestionBox, const char *title, const char *message, bo
*result = s_yesNoQuestionBoxResult.value();
s_yesNoQuestionBoxResult.reset();
}
SCRIPT_API(void showToast, const char *message, u32 type) {
switch (type) {
case 0:
ui::ToastInfo::open(message);
break;
case 1:
ui::ToastWarning::open(message);
break;
case 2:
ui::ToastError::open(message);
break;
default:
break;
}
}
SCRIPT_API(void* getImGuiContext) {
return ImGui::GetCurrentContext();
}
class ScriptView : public View::Window {
public:
using DrawFunction = void(*)();
ScriptView(const char *icon, const char *name, DrawFunction function) : View::Window(UnlocalizedString(name), icon), m_drawFunction(function) { }
void drawContent() override {
m_drawFunction();
}
private:
DrawFunction m_drawFunction;
};
SCRIPT_API(void registerView, const char *icon, const char *name, void *drawFunction) {
ContentRegistry::Views::add<ScriptView>(icon, name, ScriptView::DrawFunction(drawFunction));
}