0001-InputLine-history-handling-improved.patch
src/uisupport/inputline.cpp | ||
---|---|---|
39 | 39 |
case Qt::Key_Up: |
40 | 40 |
event->accept(); |
41 | 41 | |
42 |
if(addToHistory(text())) { |
|
43 |
clear(); |
|
44 |
break; |
|
45 |
} |
|
42 |
addToHistory(text(), true); |
|
46 | 43 |
|
47 | 44 |
if(idx > 0) { |
48 | 45 |
idx--; |
49 |
setText(history[idx]);
|
|
46 |
showHistoryEntry();
|
|
50 | 47 |
} |
51 | 48 | |
52 | 49 |
break; |
... | ... | |
54 | 51 |
case Qt::Key_Down: |
55 | 52 |
event->accept(); |
56 | 53 | |
57 |
if(addToHistory(text())) { |
|
58 |
clear(); |
|
59 |
break; |
|
60 |
} |
|
54 |
addToHistory(text(), true); |
|
61 | 55 |
|
62 | 56 |
if(idx < history.count()) |
63 | 57 |
idx++; |
64 | 58 | |
65 | 59 |
if(idx < history.count()) |
66 |
setText(history[idx]);
|
|
60 |
showHistoryEntry();
|
|
67 | 61 |
else |
68 |
clear();
|
|
62 |
resetLine(); // equals clear() in this case
|
|
69 | 63 | |
70 | 64 |
break; |
71 | 65 |
|
... | ... | |
77 | 71 |
} |
78 | 72 |
} |
79 | 73 | |
80 |
bool InputLine::addToHistory(const QString &text) { |
|
74 |
bool InputLine::addToHistory(const QString &text, bool temporary) {
|
|
81 | 75 |
if(text.isEmpty()) |
82 | 76 |
return false; |
83 | 77 | |
84 | 78 |
Q_ASSERT(0 <= idx && idx <= history.count()); |
85 | 79 |
|
86 | 80 |
if(history.isEmpty() || text != history[idx - (int)(idx == history.count())]) { |
87 |
// if we change an entry of the history the changed entry is appended to the list and we seek to the end |
|
88 |
// we could also easily change the entry in the history... per setting maybe? |
|
89 |
history << text; |
|
90 |
idx = history.count(); |
|
81 |
// if an entry of the history is changed, we remember it and show it again at this |
|
82 |
// position until a line was actually sent |
|
83 |
// sent lines get appended to the history |
|
84 |
if(temporary) { |
|
85 |
tempHistory[idx] = text; |
|
86 |
} else { |
|
87 |
history << text; |
|
88 |
tempHistory.clear(); |
|
89 |
} |
|
91 | 90 |
return true; |
92 | 91 |
} else { |
93 | 92 |
return false; |
... | ... | |
97 | 96 |
void InputLine::on_returnPressed() { |
98 | 97 |
addToHistory(text()); |
99 | 98 |
emit sendText(text()); |
100 |
clear();
|
|
99 |
resetLine();
|
|
101 | 100 |
} |
102 | 101 | |
103 | 102 |
void InputLine::on_textChanged(QString newText) { |
... | ... | |
125 | 124 |
emit returnPressed(); |
126 | 125 |
insert(remainder); |
127 | 126 |
} |
128 |
|
|
129 | 127 |
} |
130 | 128 | |
129 |
void InputLine::resetLine() { |
|
130 |
// every time the InputLine is cleared we also reset history index |
|
131 |
idx = history.count(); |
|
132 |
clear(); |
|
133 |
} |
|
134 | ||
135 |
void InputLine::showHistoryEntry() { |
|
136 |
// if the user changed the history, display the changed line |
|
137 |
tempHistory.contains(idx) ? setText(tempHistory[idx]) : setText(history[idx]); |
|
138 |
} |
src/uisupport/inputline.h | ||
---|---|---|
40 | 40 |
void on_returnPressed(); |
41 | 41 |
void on_textChanged(QString newText); |
42 | 42 | |
43 |
bool addToHistory(const QString &text); |
|
43 |
bool addToHistory(const QString &text, bool temporary = false);
|
|
44 | 44 | |
45 | 45 |
signals: |
46 | 46 |
void sendText(QString text); |
47 | 47 | |
48 | 48 |
private: |
49 | 49 |
QStringList history; |
50 |
QHash<int, QString> tempHistory; |
|
50 | 51 |
qint32 idx; |
51 | 52 |
TabCompleter *tabCompleter; |
52 | 53 | |
53 | 54 |
int bindModifier; |
54 | 55 |
int jumpModifier; |
56 | ||
57 |
void resetLine(); |
|
58 |
void showHistoryEntry(); |
|
55 | 59 |
}; |
56 | 60 | |
57 | 61 |
#endif |
58 |
- |