|
@@ -34,7 +34,7 @@ CInGameConsole::CInGameConsole()
|
|
|
: CIntObject(KEYBOARD | TIME | TEXTINPUT)
|
|
: CIntObject(KEYBOARD | TIME | TEXTINPUT)
|
|
|
, prevEntDisp(-1)
|
|
, prevEntDisp(-1)
|
|
|
{
|
|
{
|
|
|
- type |= REDRAW_PARENT;
|
|
|
|
|
|
|
+ setRedrawParent(true);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void CInGameConsole::showAll(Canvas & to)
|
|
void CInGameConsole::showAll(Canvas & to)
|
|
@@ -96,7 +96,7 @@ void CInGameConsole::print(const std::string & txt)
|
|
|
|
|
|
|
|
auto splitText = CMessage::breakText(txt, maxWidth, FONT_MEDIUM);
|
|
auto splitText = CMessage::breakText(txt, maxWidth, FONT_MEDIUM);
|
|
|
|
|
|
|
|
- for (auto const & entry : splitText)
|
|
|
|
|
|
|
+ for(const auto & entry : splitText)
|
|
|
texts.push_back({entry, 0});
|
|
texts.push_back({entry, 0});
|
|
|
|
|
|
|
|
while(texts.size() > maxDisplayedTexts)
|
|
while(texts.size() > maxDisplayedTexts)
|
|
@@ -104,6 +104,27 @@ void CInGameConsole::print(const std::string & txt)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
GH.windows().totalRedraw(); // FIXME: ingame console has no parent widget set
|
|
GH.windows().totalRedraw(); // FIXME: ingame console has no parent widget set
|
|
|
|
|
+ CCS->soundh->playSound("CHAT");
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+bool CInGameConsole::captureThisKey(EShortcut key)
|
|
|
|
|
+{
|
|
|
|
|
+ if (enteredText.empty())
|
|
|
|
|
+ return false;
|
|
|
|
|
+
|
|
|
|
|
+ switch (key)
|
|
|
|
|
+ {
|
|
|
|
|
+ case EShortcut::GLOBAL_ACCEPT:
|
|
|
|
|
+ case EShortcut::GLOBAL_CANCEL:
|
|
|
|
|
+ case EShortcut::GAME_ACTIVATE_CONSOLE:
|
|
|
|
|
+ case EShortcut::GLOBAL_BACKSPACE:
|
|
|
|
|
+ case EShortcut::MOVE_UP:
|
|
|
|
|
+ case EShortcut::MOVE_DOWN:
|
|
|
|
|
+ return true;
|
|
|
|
|
+
|
|
|
|
|
+ default:
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void CInGameConsole::keyPressed (EShortcut key)
|
|
void CInGameConsole::keyPressed (EShortcut key)
|
|
@@ -111,18 +132,18 @@ void CInGameConsole::keyPressed (EShortcut key)
|
|
|
if (LOCPLINT->cingconsole != this)
|
|
if (LOCPLINT->cingconsole != this)
|
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
- if(!captureAllKeys && key != EShortcut::GAME_ACTIVATE_CONSOLE)
|
|
|
|
|
|
|
+ if(enteredText.empty() && key != EShortcut::GAME_ACTIVATE_CONSOLE)
|
|
|
return; //because user is not entering any text
|
|
return; //because user is not entering any text
|
|
|
|
|
|
|
|
switch(key)
|
|
switch(key)
|
|
|
{
|
|
{
|
|
|
case EShortcut::GLOBAL_CANCEL:
|
|
case EShortcut::GLOBAL_CANCEL:
|
|
|
- if(captureAllKeys)
|
|
|
|
|
|
|
+ if(!enteredText.empty())
|
|
|
endEnteringText(false);
|
|
endEnteringText(false);
|
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
case EShortcut::GAME_ACTIVATE_CONSOLE:
|
|
case EShortcut::GAME_ACTIVATE_CONSOLE:
|
|
|
- if(captureAllKeys)
|
|
|
|
|
|
|
+ if(!enteredText.empty())
|
|
|
endEnteringText(false);
|
|
endEnteringText(false);
|
|
|
else
|
|
else
|
|
|
startEnteringText();
|
|
startEnteringText();
|
|
@@ -130,15 +151,10 @@ void CInGameConsole::keyPressed (EShortcut key)
|
|
|
|
|
|
|
|
case EShortcut::GLOBAL_ACCEPT:
|
|
case EShortcut::GLOBAL_ACCEPT:
|
|
|
{
|
|
{
|
|
|
- if(!enteredText.empty() && captureAllKeys)
|
|
|
|
|
|
|
+ if(!enteredText.empty())
|
|
|
{
|
|
{
|
|
|
bool anyTextExceptCaret = enteredText.size() > 1;
|
|
bool anyTextExceptCaret = enteredText.size() > 1;
|
|
|
endEnteringText(anyTextExceptCaret);
|
|
endEnteringText(anyTextExceptCaret);
|
|
|
-
|
|
|
|
|
- if(anyTextExceptCaret)
|
|
|
|
|
- {
|
|
|
|
|
- CCS->soundh->playSound("CHAT");
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
@@ -195,8 +211,9 @@ void CInGameConsole::textInputed(const std::string & inputtedText)
|
|
|
if (LOCPLINT->cingconsole != this)
|
|
if (LOCPLINT->cingconsole != this)
|
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
- if(!captureAllKeys || enteredText.empty())
|
|
|
|
|
|
|
+ if(enteredText.empty())
|
|
|
return;
|
|
return;
|
|
|
|
|
+
|
|
|
enteredText.resize(enteredText.size()-1);
|
|
enteredText.resize(enteredText.size()-1);
|
|
|
|
|
|
|
|
enteredText += inputtedText;
|
|
enteredText += inputtedText;
|
|
@@ -215,14 +232,10 @@ void CInGameConsole::startEnteringText()
|
|
|
if (!isActive())
|
|
if (!isActive())
|
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
- if (captureAllKeys)
|
|
|
|
|
- return;
|
|
|
|
|
-
|
|
|
|
|
assert(currentStatusBar.expired());//effectively, nullptr check
|
|
assert(currentStatusBar.expired());//effectively, nullptr check
|
|
|
|
|
|
|
|
currentStatusBar = GH.statusbar();
|
|
currentStatusBar = GH.statusbar();
|
|
|
|
|
|
|
|
- captureAllKeys = true;
|
|
|
|
|
enteredText = "_";
|
|
enteredText = "_";
|
|
|
|
|
|
|
|
GH.statusbar()->setEnteringMode(true);
|
|
GH.statusbar()->setEnteringMode(true);
|
|
@@ -231,7 +244,6 @@ void CInGameConsole::startEnteringText()
|
|
|
|
|
|
|
|
void CInGameConsole::endEnteringText(bool processEnteredText)
|
|
void CInGameConsole::endEnteringText(bool processEnteredText)
|
|
|
{
|
|
{
|
|
|
- captureAllKeys = false;
|
|
|
|
|
prevEntDisp = -1;
|
|
prevEntDisp = -1;
|
|
|
if(processEnteredText)
|
|
if(processEnteredText)
|
|
|
{
|
|
{
|