Something went wrong. Try again.
OpenMW is an open implementation of the Morrowind engine
Something went wrong. Try again.
3.5 kB · 94 lines
C++
at master
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495#include "textedit.hpp"
#include "alignment.hpp"
namespace LuaUi{ void LuaTextEdit::initialize() { mEditBox = createWidget<MyGUI::EditBox>("LuaTextEdit", MyGUI::IntCoord(0, 0, 0, 0), MyGUI::Align::Default); mEditBox->eventEditTextChange += MyGUI::newDelegate(this, &LuaTextEdit::textChange); mEditBox->setMaxTextLength(std::numeric_limits<std::size_t>::max()); registerEvents(mEditBox); WidgetExtension::initialize(); }
void LuaTextEdit::deinitialize() { mEditBox->eventEditTextChange -= MyGUI::newDelegate(this, &LuaTextEdit::textChange); clearEvents(mEditBox); WidgetExtension::deinitialize(); }
void LuaTextEdit::updateProperties() { mEditBox->setFontHeight(propertyValue("textSize", 10)); mEditBox->setTextColour(propertyValue("textColor", MyGUI::Colour(0, 0, 0, 1))); mEditBox->setEditWordWrap(propertyValue("wordWrap", false));
Alignment horizontal(propertyValue("textAlignH", Alignment::Start)); Alignment vertical(propertyValue("textAlignV", Alignment::Start)); mEditBox->setTextAlign(alignmentToMyGui(horizontal, vertical));
mMultiline = propertyValue("multiline", false); mEditBox->setEditMultiLine(mMultiline);
bool readOnly = propertyValue("readOnly", false); mEditBox->setEditStatic(readOnly);
mAutoSize = (readOnly || !mMultiline) && propertyValue("autoSize", false);
// change caption last, for multiline and wordwrap to apply mEditBox->setCaption(propertyValue("text", std::string()));
WidgetExtension::updateProperties(); }
void LuaTextEdit::textChange(MyGUI::EditBox*) { protectedCall([this](LuaUtil::LuaView& view) { triggerEvent("textChanged", sol::make_object(view.sol(), mEditBox->getCaption().asUTF8())); }); }
void LuaTextEdit::updateCoord() { WidgetExtension::updateCoord(); mEditBox->setPosition(getContentOffset()); mEditBox->setSize(getContentSize()); }
void LuaTextEdit::updateChildren() { WidgetExtension::updateChildren(); // otherwise it won't be focusable mEditBox->detachFromWidget(); mEditBox->attachToWidget(this); }
MyGUI::IntSize LuaTextEdit::calculateSize() const { MyGUI::IntSize normalSize = WidgetExtension::calculateSize(); if (mAutoSize) { const MyGUI::IntSize contentSize(std::max(0, normalSize.width - (mPadding.mLeft + mPadding.mRight)), std::max(0, normalSize.height - (mPadding.mTop + mPadding.mBottom))); mEditBox->setSize(contentSize); int targetHeight = mMultiline ? mEditBox->getTextSize().height : mEditBox->getFontHeight(); normalSize.height = std::max(normalSize.height, targetHeight + mPadding.mTop + mPadding.mBottom); } return normalSize; }
const std::vector<std::string_view>& LuaTextEdit::allUsedProperties() const { static std::vector<std::string_view> usedProps = std::invoke([this] { std::vector<std::string_view> props = { "text", "textSize", "textColor", "wordWrap", "textAlignH", "textAlignV", "multiline", "readOnly", "autoSize" }; auto baseProps = WidgetExtension::allUsedProperties(); props.insert(props.end(), baseProps.begin(), baseProps.end()); return props; }); return usedProps; }}