| | |
| | |
| |
|
| | |
| | |
| |
|
| | #include "imgui.h" |
| | #include "imgui_stdlib.h" |
| |
|
| | struct InputTextCallback_UserData |
| | { |
| | std::string* Str; |
| | ImGuiInputTextCallback ChainCallback; |
| | void* ChainCallbackUserData; |
| | }; |
| |
|
| | static int InputTextCallback(ImGuiInputTextCallbackData* data) |
| | { |
| | InputTextCallback_UserData* user_data = (InputTextCallback_UserData*)data->UserData; |
| | if (data->EventFlag == ImGuiInputTextFlags_CallbackResize) |
| | { |
| | |
| | |
| | std::string* str = user_data->Str; |
| | IM_ASSERT(data->Buf == str->c_str()); |
| | str->resize(data->BufTextLen); |
| | data->Buf = (char*)str->c_str(); |
| | } |
| | else if (user_data->ChainCallback) |
| | { |
| | |
| | data->UserData = user_data->ChainCallbackUserData; |
| | return user_data->ChainCallback(data); |
| | } |
| | return 0; |
| | } |
| |
|
| | bool ImGui::InputText(const char* label, std::string* str, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data) |
| | { |
| | IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0); |
| | flags |= ImGuiInputTextFlags_CallbackResize; |
| |
|
| | InputTextCallback_UserData cb_user_data; |
| | cb_user_data.Str = str; |
| | cb_user_data.ChainCallback = callback; |
| | cb_user_data.ChainCallbackUserData = user_data; |
| | return InputText(label, (char*)str->c_str(), str->capacity() + 1, flags, InputTextCallback, &cb_user_data); |
| | } |
| |
|
| | bool ImGui::InputTextMultiline(const char* label, std::string* str, const ImVec2& size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data) |
| | { |
| | IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0); |
| | flags |= ImGuiInputTextFlags_CallbackResize; |
| |
|
| | InputTextCallback_UserData cb_user_data; |
| | cb_user_data.Str = str; |
| | cb_user_data.ChainCallback = callback; |
| | cb_user_data.ChainCallbackUserData = user_data; |
| | return InputTextMultiline(label, (char*)str->c_str(), str->capacity() + 1, size, flags, InputTextCallback, &cb_user_data); |
| | } |
| |
|
| | bool ImGui::InputTextWithHint(const char* label, const char* hint, std::string* str, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data) |
| | { |
| | IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0); |
| | flags |= ImGuiInputTextFlags_CallbackResize; |
| |
|
| | InputTextCallback_UserData cb_user_data; |
| | cb_user_data.Str = str; |
| | cb_user_data.ChainCallback = callback; |
| | cb_user_data.ChainCallbackUserData = user_data; |
| | return InputTextWithHint(label, hint, (char*)str->c_str(), str->capacity() + 1, flags, InputTextCallback, &cb_user_data); |
| | } |
| |
|