Sdk/TextAreaWidget: Add signals (allowing for controlling the cursor/keys)

This commit is contained in:
Lynix 2017-01-18 23:38:29 +01:00
parent 5d39d60f94
commit ec795269ad
3 changed files with 65 additions and 2 deletions

View File

@ -56,6 +56,14 @@ namespace Ndk
TextAreaWidget& operator=(const TextAreaWidget&) = delete; TextAreaWidget& operator=(const TextAreaWidget&) = delete;
TextAreaWidget& operator=(TextAreaWidget&&) = default; TextAreaWidget& operator=(TextAreaWidget&&) = default;
NazaraSignal(OnTextAreaCursorMove, const TextAreaWidget* /*textArea*/, std::size_t* /*newCursorPosition*/);
NazaraSignal(OnTextAreaKeyBackspace, const TextAreaWidget* /*textArea*/, bool* /*ignoreDefaultAction*/);
NazaraSignal(OnTextAreaKeyDown, const TextAreaWidget* /*textArea*/, bool* /*ignoreDefaultAction*/);
NazaraSignal(OnTextAreaKeyLeft, const TextAreaWidget* /*textArea*/, bool* /*ignoreDefaultAction*/);
NazaraSignal(OnTextAreaKeyReturn, const TextAreaWidget* /*textArea*/, bool* /*ignoreDefaultAction*/);
NazaraSignal(OnTextAreaKeyRight, const TextAreaWidget* /*textArea*/, bool* /*ignoreDefaultAction*/);
NazaraSignal(OnTextAreaKeyUp, const TextAreaWidget* /*textArea*/, bool* /*ignoreDefaultAction*/);
private: private:
void Layout() override; void Layout() override;

View File

@ -66,6 +66,8 @@ namespace Ndk
inline void TextAreaWidget::SetCursorPosition(std::size_t cursorPosition) inline void TextAreaWidget::SetCursorPosition(std::size_t cursorPosition)
{ {
OnTextAreaCursorMove(this, &cursorPosition);
m_cursorPosition = std::min(cursorPosition, m_drawer.GetGlyphCount()); m_cursorPosition = std::min(cursorPosition, m_drawer.GetGlyphCount());
RefreshCursor(); RefreshCursor();
@ -83,6 +85,8 @@ namespace Ndk
m_drawer.SetText(text); m_drawer.SetText(text);
m_textSprite->Update(m_drawer); m_textSprite->Update(m_drawer);
SetCursorPosition(m_cursorPosition); //< Refresh cursor position (prevent it from being outside of the text)
} }
inline void TextAreaWidget::SetTextColor(const Nz::Color& text) inline void TextAreaWidget::SetTextColor(const Nz::Color& text)

View File

@ -123,13 +123,53 @@ namespace Ndk
break; break;
} }
case Nz::Keyboard::Down:
{
bool ignoreDefaultAction = false;
OnTextAreaKeyDown(this, &ignoreDefaultAction);
if (ignoreDefaultAction)
break;
//TODO
break;
}
case Nz::Keyboard::Left: case Nz::Keyboard::Left:
{
bool ignoreDefaultAction = false;
OnTextAreaKeyLeft(this, &ignoreDefaultAction);
if (ignoreDefaultAction)
break;
MoveCursor(-1); MoveCursor(-1);
break; break;
}
case Nz::Keyboard::Right: case Nz::Keyboard::Right:
{
bool ignoreDefaultAction = false;
OnTextAreaKeyRight(this, &ignoreDefaultAction);
if (ignoreDefaultAction)
break;
MoveCursor(1); MoveCursor(1);
break; break;
}
case Nz::Keyboard::Up:
{
bool ignoreDefaultAction = false;
OnTextAreaKeyUp(this, &ignoreDefaultAction);
if (ignoreDefaultAction)
break;
//TODO
break;
}
} }
} }
@ -170,6 +210,12 @@ namespace Ndk
{ {
case '\b': case '\b':
{ {
bool ignoreDefaultAction = false;
OnTextAreaKeyBackspace(this, &ignoreDefaultAction);
if (ignoreDefaultAction)
break;
const Nz::String& text = m_drawer.GetText(); const Nz::String& text = m_drawer.GetText();
Nz::String newText; Nz::String newText;
@ -179,18 +225,23 @@ namespace Ndk
if (m_cursorPosition < m_drawer.GetGlyphCount()) if (m_cursorPosition < m_drawer.GetGlyphCount())
newText.Append(text.SubString(text.GetCharacterPosition(m_cursorPosition))); newText.Append(text.SubString(text.GetCharacterPosition(m_cursorPosition)));
SetText(newText);
MoveCursor(-1); MoveCursor(-1);
SetText(newText);
break; break;
} }
case '\r': case '\r':
case '\n': case '\n':
if (!m_multiLineEnabled) {
bool ignoreDefaultAction = false;
OnTextAreaKeyReturn(this, &ignoreDefaultAction);
if (ignoreDefaultAction || !m_multiLineEnabled)
break; break;
Write(Nz::String('\n')); Write(Nz::String('\n'));
break; break;
}
default: default:
{ {