Added read-only property to EditBox
parent
7880b9e00f
commit
d0c66e9fb8
|
@ -320,6 +320,30 @@ namespace tgui
|
||||||
bool isTextWidthLimited() const;
|
bool isTextWidthLimited() const;
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief Makes the edit box read-only or make it writable again
|
||||||
|
///
|
||||||
|
/// @param readOnly Should the edit box be read-only?
|
||||||
|
///
|
||||||
|
/// When the edit box is read-only, you can no longer delete characters and type text.
|
||||||
|
/// Selecting text, copying text and even calling the setText function will still work.
|
||||||
|
///
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void setReadOnly(bool readOnly = true);
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// @brief Checks if the edit box read-only or writable
|
||||||
|
///
|
||||||
|
/// @return Is the edit box read-only?
|
||||||
|
///
|
||||||
|
/// When the edit box is read-only, you can no longer delete characters and type text.
|
||||||
|
/// Selecting text, copying text and even calling the setText function will still work.
|
||||||
|
///
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool isReadOnly() const;
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief Sets the blinking caret to after a specific character
|
/// @brief Sets the blinking caret to after a specific character
|
||||||
///
|
///
|
||||||
|
@ -493,6 +517,8 @@ namespace tgui
|
||||||
// You can change the boolean with the limitTextWidth(bool) function.
|
// You can change the boolean with the limitTextWidth(bool) function.
|
||||||
bool m_limitTextWidth = false;
|
bool m_limitTextWidth = false;
|
||||||
|
|
||||||
|
bool m_readOnly = false;
|
||||||
|
|
||||||
// The text inside the edit box
|
// The text inside the edit box
|
||||||
sf::String m_text;
|
sf::String m_text;
|
||||||
|
|
||||||
|
|
|
@ -399,6 +399,20 @@ namespace tgui
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void EditBox::setReadOnly(bool readOnly)
|
||||||
|
{
|
||||||
|
m_readOnly = readOnly;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
bool EditBox::isReadOnly() const
|
||||||
|
{
|
||||||
|
return m_readOnly;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void EditBox::setCaretPosition(std::size_t charactersBeforeCaret)
|
void EditBox::setCaretPosition(std::size_t charactersBeforeCaret)
|
||||||
{
|
{
|
||||||
// The caret position has to stay inside the string
|
// The caret position has to stay inside the string
|
||||||
|
@ -697,6 +711,9 @@ namespace tgui
|
||||||
}
|
}
|
||||||
else if (event.code == sf::Keyboard::BackSpace)
|
else if (event.code == sf::Keyboard::BackSpace)
|
||||||
{
|
{
|
||||||
|
if (m_readOnly)
|
||||||
|
return;
|
||||||
|
|
||||||
// Make sure that we did not select any characters
|
// Make sure that we did not select any characters
|
||||||
if (m_selChars == 0)
|
if (m_selChars == 0)
|
||||||
{
|
{
|
||||||
|
@ -738,6 +755,9 @@ namespace tgui
|
||||||
}
|
}
|
||||||
else if (event.code == sf::Keyboard::Delete)
|
else if (event.code == sf::Keyboard::Delete)
|
||||||
{
|
{
|
||||||
|
if (m_readOnly)
|
||||||
|
return;
|
||||||
|
|
||||||
// Make sure that no text is selected
|
// Make sure that no text is selected
|
||||||
if (m_selChars == 0)
|
if (m_selChars == 0)
|
||||||
{
|
{
|
||||||
|
@ -787,6 +807,9 @@ namespace tgui
|
||||||
}
|
}
|
||||||
else if (event.code == sf::Keyboard::V)
|
else if (event.code == sf::Keyboard::V)
|
||||||
{
|
{
|
||||||
|
if (m_readOnly)
|
||||||
|
return;
|
||||||
|
|
||||||
const auto clipboardContents = Clipboard::get();
|
const auto clipboardContents = Clipboard::get();
|
||||||
|
|
||||||
// Only continue pasting if you actually have to do something
|
// Only continue pasting if you actually have to do something
|
||||||
|
@ -807,6 +830,10 @@ namespace tgui
|
||||||
else if (event.code == sf::Keyboard::X)
|
else if (event.code == sf::Keyboard::X)
|
||||||
{
|
{
|
||||||
Clipboard::set(m_textSelection.getString());
|
Clipboard::set(m_textSelection.getString());
|
||||||
|
|
||||||
|
if (m_readOnly)
|
||||||
|
return;
|
||||||
|
|
||||||
deleteSelectedCharacters();
|
deleteSelectedCharacters();
|
||||||
|
|
||||||
onTextChange->emit(this, m_text);
|
onTextChange->emit(this, m_text);
|
||||||
|
@ -823,6 +850,9 @@ namespace tgui
|
||||||
|
|
||||||
void EditBox::textEntered(sf::Uint32 key)
|
void EditBox::textEntered(sf::Uint32 key)
|
||||||
{
|
{
|
||||||
|
if (m_readOnly)
|
||||||
|
return;
|
||||||
|
|
||||||
// Only add the character when the regex matches
|
// Only add the character when the regex matches
|
||||||
if (m_regexString != ".*")
|
if (m_regexString != ".*")
|
||||||
{
|
{
|
||||||
|
|
|
@ -145,6 +145,22 @@ TEST_CASE("[EditBox]")
|
||||||
REQUIRE(editBox->getText() == "yet another text");
|
REQUIRE(editBox->getText() == "yet another text");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION("ReadOnly")
|
||||||
|
{
|
||||||
|
REQUIRE(!editBox->isReadOnly());
|
||||||
|
|
||||||
|
editBox->setReadOnly(true);
|
||||||
|
REQUIRE(editBox->isReadOnly());
|
||||||
|
|
||||||
|
// The text can still be changed using the setText function
|
||||||
|
editBox->setText("Test");
|
||||||
|
REQUIRE(editBox->getText() == "Test");
|
||||||
|
REQUIRE(editBox->isReadOnly());
|
||||||
|
|
||||||
|
editBox->setReadOnly(false);
|
||||||
|
REQUIRE(!editBox->isReadOnly());
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("Input Validator")
|
SECTION("Input Validator")
|
||||||
{
|
{
|
||||||
editBox->setText(L"++Some123 Ê Text456--");
|
editBox->setText(L"++Some123 Ê Text456--");
|
||||||
|
|
Loading…
Reference in New Issue