mirror of
https://github.com/RGBCube/serenity
synced 2025-05-23 19:05:08 +00:00
LibGUI: Add up & down arrow hooks and input history to TextBox
This patch adds the ability to enable "input history" on a textbox, allowing to navigate between the history with the arrow keys. Also removes a custom TextBox subclass from HackStudio that added the exact same hooks, and moves it to use the now standard ones.
This commit is contained in:
parent
893a9ff5b0
commit
139dbfd5b5
4 changed files with 74 additions and 28 deletions
|
@ -37,4 +37,55 @@ TextBox::~TextBox()
|
|||
{
|
||||
}
|
||||
|
||||
void TextBox::keydown_event(GUI::KeyEvent& event)
|
||||
{
|
||||
TextEditor::keydown_event(event);
|
||||
|
||||
if (event.key() == Key_Up) {
|
||||
if (on_up_pressed)
|
||||
on_up_pressed();
|
||||
|
||||
if (has_no_history() || !can_go_backwards_in_history())
|
||||
return;
|
||||
|
||||
if (m_history_index >= static_cast<int>(m_history.size()))
|
||||
m_saved_input = text();
|
||||
|
||||
m_history_index--;
|
||||
set_text(m_history[m_history_index]);
|
||||
} else if (event.key() == Key_Down) {
|
||||
if (on_down_pressed)
|
||||
on_down_pressed();
|
||||
|
||||
if (has_no_history())
|
||||
return;
|
||||
|
||||
if (can_go_forwards_in_history()) {
|
||||
m_history_index++;
|
||||
set_text(m_history[m_history_index]);
|
||||
} else if (m_history_index < static_cast<int>(m_history.size())) {
|
||||
m_history_index++;
|
||||
set_text(m_saved_input);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TextBox::add_current_text_to_history()
|
||||
{
|
||||
if (!m_history_enabled)
|
||||
return;
|
||||
|
||||
auto input = text();
|
||||
if (m_history.is_empty() || m_history.last() != input)
|
||||
add_input_to_history(input);
|
||||
m_history_index = static_cast<int>(m_history.size());
|
||||
m_saved_input = {};
|
||||
}
|
||||
|
||||
void TextBox::add_input_to_history(String input)
|
||||
{
|
||||
m_history.append(move(input));
|
||||
m_history_index++;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue