summary refs log tree commit diff
path: root/src/timeline/InputBar.cpp
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2020-11-17 13:25:16 +0100
committerNicolas Werner <nicolas.werner@hotmail.de>2020-11-25 19:05:12 +0100
commitd14a5f80676a695b3a087bd1378e8057fc7ffc13 (patch)
tree1554e36a636dc579b09b7b171955722d3d7a539f /src/timeline/InputBar.cpp
parentSend typing updates from QML (diff)
downloadnheko-d14a5f80676a695b3a087bd1378e8057fc7ffc13.tar.xz
Reimplement message history
Diffstat (limited to 'src/timeline/InputBar.cpp')
-rw-r--r--src/timeline/InputBar.cpp66
1 files changed, 52 insertions, 14 deletions
diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp
index 6603287b..1eaaaa64 100644
--- a/src/timeline/InputBar.cpp
+++ b/src/timeline/InputBar.cpp
@@ -119,39 +119,77 @@ InputBar::updateState(int selectionStart_, int selectionEnd_, int cursorPosition
         else
                 startTyping();
 
+        if (text_ != text()) {
+                if (history_.empty())
+                        history_.push_front(text_);
+                else
+                        history_.front() = text_;
+                history_index_ = 0;
+        }
+
         selectionStart = selectionStart_;
         selectionEnd   = selectionEnd_;
         cursorPosition = cursorPosition_;
-        text           = text_;
+}
+
+QString
+InputBar::text() const
+{
+        if (history_index_ < history_.size())
+                return history_.at(history_index_);
+
+        return "";
+}
+
+QString
+InputBar::previousText()
+{
+        history_index_++;
+        if (history_index_ >= INPUT_HISTORY_SIZE)
+                history_index_ = INPUT_HISTORY_SIZE;
+        else if (text().isEmpty())
+                history_index_--;
+
+        return text();
+}
+
+QString
+InputBar::nextText()
+{
+        history_index_--;
+        if (history_index_ >= INPUT_HISTORY_SIZE)
+                history_index_ = 0;
+
+        return text();
 }
 
 void
 InputBar::send()
 {
-        if (text.trimmed().isEmpty())
+        if (text().trimmed().isEmpty())
                 return;
 
-        if (history_.size() == INPUT_HISTORY_SIZE)
-                history_.pop_back();
-        history_.push_front(text);
-        history_index_ = 0;
-
-        if (text.startsWith('/')) {
-                int command_end = text.indexOf(' ');
+        if (text().startsWith('/')) {
+                int command_end = text().indexOf(' ');
                 if (command_end == -1)
-                        command_end = text.size();
-                auto name = text.mid(1, command_end - 1);
-                auto args = text.mid(command_end + 1);
+                        command_end = text().size();
+                auto name = text().mid(1, command_end - 1);
+                auto args = text().mid(command_end + 1);
                 if (name.isEmpty() || name == "/") {
                         message(args);
                 } else {
                         command(name, args);
                 }
         } else {
-                message(text);
+                message(text());
         }
 
-        nhlog::ui()->debug("Send: {}", text.toStdString());
+        nhlog::ui()->debug("Send: {}", text().toStdString());
+
+        if (history_.size() == INPUT_HISTORY_SIZE)
+                history_.pop_back();
+        history_.push_front("");
+        history_index_ = 0;
 }
 
 void