aboutsummaryrefslogtreecommitdiff
path: root/src/guiChatConsole.cpp
diff options
context:
space:
mode:
authorEsteban I. Ruiz Moreno <exio4.com@gmail.com>2013-06-02 21:16:32 -0300
committerShadowNinja <shadowninja@minetest.net>2016-03-02 23:23:31 -0500
commiteffa24737d6997dc40508533635accca3ed099e9 (patch)
treed8155991eada7cab1123ec48af7c1e7c539464ff /src/guiChatConsole.cpp
parentda97969c9b72ea1752efb741663b727c0225795a (diff)
downloadminetest-effa24737d6997dc40508533635accca3ed099e9.tar.gz
minetest-effa24737d6997dc40508533635accca3ed099e9.tar.bz2
minetest-effa24737d6997dc40508533635accca3ed099e9.zip
Use the console instead of a dedicated window when pressing keymap_chat/cmd
keymap_console opens a full window for chat history browsing.
Diffstat (limited to 'src/guiChatConsole.cpp')
-rw-r--r--src/guiChatConsole.cpp56
1 files changed, 37 insertions, 19 deletions
diff --git a/src/guiChatConsole.cpp b/src/guiChatConsole.cpp
index 3937e405c..4c0039e5e 100644
--- a/src/guiChatConsole.cpp
+++ b/src/guiChatConsole.cpp
@@ -55,6 +55,7 @@ GUIChatConsole::GUIChatConsole(
m_screensize(v2u32(0,0)),
m_animate_time_old(0),
m_open(false),
+ m_close_on_enter(false),
m_height(0),
m_desired_height(0),
m_desired_height_fraction(0.0),
@@ -148,6 +149,14 @@ f32 GUIChatConsole::getDesiredHeight() const
return m_desired_height_fraction;
}
+void GUIChatConsole::replaceAndAddToHistory(std::wstring line)
+{
+ ChatPrompt& prompt = m_chat_backend->getPrompt();
+ prompt.addToHistory(prompt.getLine());
+ prompt.replace(line);
+}
+
+
void GUIChatConsole::setCursor(
bool visible, bool blinking, f32 blink_speed, f32 relative_height)
{
@@ -381,6 +390,9 @@ void GUIChatConsole::drawPrompt()
bool GUIChatConsole::OnEvent(const SEvent& event)
{
+
+ ChatPrompt &prompt = m_chat_backend->getPrompt();
+
if(event.EventType == EET_KEY_INPUT_EVENT && event.KeyInput.PressedDown)
{
// Key input
@@ -391,13 +403,16 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
// inhibit open so the_game doesn't reopen immediately
m_open_inhibited = 50;
+ m_close_on_enter = false;
return true;
}
else if(event.KeyInput.Key == KEY_ESCAPE)
{
closeConsoleAtOnce();
Environment->removeFocus(this);
- // the_game will open the pause menu
+ m_close_on_enter = false;
+ // inhibit open so the_game doesn't reopen immediately
+ m_open_inhibited = 1; // so the ESCAPE button doesn't open the "pause menu"
return true;
}
else if(event.KeyInput.Key == KEY_PRIOR)
@@ -412,22 +427,28 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
}
else if(event.KeyInput.Key == KEY_RETURN)
{
- std::wstring text = m_chat_backend->getPrompt().submit();
+ prompt.addToHistory(prompt.getLine());
+ std::wstring text = prompt.replace(L"");
m_client->typeChatMessage(text);
+ if (m_close_on_enter) {
+ closeConsoleAtOnce();
+ Environment->removeFocus(this);
+ m_close_on_enter = false;
+ }
return true;
}
else if(event.KeyInput.Key == KEY_UP)
{
// Up pressed
// Move back in history
- m_chat_backend->getPrompt().historyPrev();
+ prompt.historyPrev();
return true;
}
else if(event.KeyInput.Key == KEY_DOWN)
{
// Down pressed
// Move forward in history
- m_chat_backend->getPrompt().historyNext();
+ prompt.historyNext();
return true;
}
else if(event.KeyInput.Key == KEY_LEFT)
@@ -438,7 +459,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
event.KeyInput.Control ?
ChatPrompt::CURSOROP_SCOPE_WORD :
ChatPrompt::CURSOROP_SCOPE_CHARACTER;
- m_chat_backend->getPrompt().cursorOperation(
+ prompt.cursorOperation(
ChatPrompt::CURSOROP_MOVE,
ChatPrompt::CURSOROP_DIR_LEFT,
scope);
@@ -452,7 +473,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
event.KeyInput.Control ?
ChatPrompt::CURSOROP_SCOPE_WORD :
ChatPrompt::CURSOROP_SCOPE_CHARACTER;
- m_chat_backend->getPrompt().cursorOperation(
+ prompt.cursorOperation(
ChatPrompt::CURSOROP_MOVE,
ChatPrompt::CURSOROP_DIR_RIGHT,
scope);
@@ -462,7 +483,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
{
// Home pressed
// move to beginning of line
- m_chat_backend->getPrompt().cursorOperation(
+ prompt.cursorOperation(
ChatPrompt::CURSOROP_MOVE,
ChatPrompt::CURSOROP_DIR_LEFT,
ChatPrompt::CURSOROP_SCOPE_LINE);
@@ -472,7 +493,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
{
// End pressed
// move to end of line
- m_chat_backend->getPrompt().cursorOperation(
+ prompt.cursorOperation(
ChatPrompt::CURSOROP_MOVE,
ChatPrompt::CURSOROP_DIR_RIGHT,
ChatPrompt::CURSOROP_SCOPE_LINE);
@@ -486,7 +507,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
event.KeyInput.Control ?
ChatPrompt::CURSOROP_SCOPE_WORD :
ChatPrompt::CURSOROP_SCOPE_CHARACTER;
- m_chat_backend->getPrompt().cursorOperation(
+ prompt.cursorOperation(
ChatPrompt::CURSOROP_DELETE,
ChatPrompt::CURSOROP_DIR_LEFT,
scope);
@@ -500,7 +521,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
event.KeyInput.Control ?
ChatPrompt::CURSOROP_SCOPE_WORD :
ChatPrompt::CURSOROP_SCOPE_CHARACTER;
- m_chat_backend->getPrompt().cursorOperation(
+ prompt.cursorOperation(
ChatPrompt::CURSOROP_DELETE,
ChatPrompt::CURSOROP_DIR_RIGHT,
scope);
@@ -513,17 +534,14 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
IOSOperator *os_operator = Environment->getOSOperator();
const c8 *text = os_operator->getTextFromClipboard();
if (text)
- {
- std::wstring wtext = narrow_to_wide(text);
- m_chat_backend->getPrompt().input(wtext);
- }
+ prompt.input(narrow_to_wide(text));
return true;
}
else if(event.KeyInput.Key == KEY_KEY_U && event.KeyInput.Control)
{
// Ctrl-U pressed
// kill line to left end
- m_chat_backend->getPrompt().cursorOperation(
+ prompt.cursorOperation(
ChatPrompt::CURSOROP_DELETE,
ChatPrompt::CURSOROP_DIR_LEFT,
ChatPrompt::CURSOROP_SCOPE_LINE);
@@ -533,7 +551,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
{
// Ctrl-K pressed
// kill line to right end
- m_chat_backend->getPrompt().cursorOperation(
+ prompt.cursorOperation(
ChatPrompt::CURSOROP_DELETE,
ChatPrompt::CURSOROP_DIR_RIGHT,
ChatPrompt::CURSOROP_SCOPE_LINE);
@@ -545,7 +563,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
// Nick completion
std::list<std::string> names = m_client->getConnectedPlayerNames();
bool backwards = event.KeyInput.Shift;
- m_chat_backend->getPrompt().nickCompletion(names, backwards);
+ prompt.nickCompletion(names, backwards);
return true;
}
else if(event.KeyInput.Char != 0 && !event.KeyInput.Control)
@@ -553,9 +571,9 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
#if (defined(linux) || defined(__linux))
wchar_t wc = L'_';
mbtowc( &wc, (char *) &event.KeyInput.Char, sizeof(event.KeyInput.Char) );
- m_chat_backend->getPrompt().input(wc);
+ prompt.input(wc);
#else
- m_chat_backend->getPrompt().input(event.KeyInput.Char);
+ prompt.input(event.KeyInput.Char);
#endif
return true;
}