[Lldb-commits] [PATCH] D108331: [LLDB][GUI] Handle return key for compound fields
Greg Clayton via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Thu Aug 19 11:46:54 PDT 2021
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG28a76049c66f: [LLDB][GUI] Handle return key for compound fields (authored by OmarEmaraDev, committed by clayborg).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D108331/new/
https://reviews.llvm.org/D108331
Files:
lldb/source/Core/IOHandlerCursesGUI.cpp
Index: lldb/source/Core/IOHandlerCursesGUI.cpp
===================================================================
--- lldb/source/Core/IOHandlerCursesGUI.cpp
+++ lldb/source/Core/IOHandlerCursesGUI.cpp
@@ -1857,6 +1857,31 @@
return eKeyHandled;
}
+ // If the last element of the field is selected and it didn't handle the key.
+ // Select the next field or new button if the selected field is the last one.
+ HandleCharResult SelectNextInList(int key) {
+ assert(m_selection_type == SelectionType::Field);
+
+ FieldDelegate &field = m_fields[m_selection_index];
+ if (field.FieldDelegateHandleChar(key) == eKeyHandled)
+ return eKeyHandled;
+
+ if (!field.FieldDelegateOnLastOrOnlyElement())
+ return eKeyNotHandled;
+
+ field.FieldDelegateExitCallback();
+
+ if (m_selection_index == GetNumberOfFields() - 1) {
+ m_selection_type = SelectionType::NewButton;
+ return eKeyHandled;
+ }
+
+ m_selection_index++;
+ FieldDelegate &next_field = m_fields[m_selection_index];
+ next_field.FieldDelegateSelectFirstElement();
+ return eKeyHandled;
+ }
+
HandleCharResult FieldDelegateHandleChar(int key) override {
switch (key) {
case '\r':
@@ -1869,16 +1894,14 @@
case SelectionType::RemoveButton:
RemoveField();
return eKeyHandled;
- default:
- break;
+ case SelectionType::Field:
+ return SelectNextInList(key);
}
break;
case '\t':
- SelectNext(key);
- return eKeyHandled;
+ return SelectNext(key);
case KEY_SHIFT_TAB:
- SelectPrevious(key);
- return eKeyHandled;
+ return SelectPrevious(key);
default:
break;
}
@@ -2048,14 +2071,34 @@
return eKeyHandled;
}
+ // If the value field is selected, pass the key to it. If the key field is
+ // selected, its last element is selected, and it didn't handle the key, then
+ // select its corresponding value field.
+ HandleCharResult SelectNextField(int key) {
+ if (m_selection_type == SelectionType::Value) {
+ return m_value_field.FieldDelegateHandleChar(key);
+ }
+
+ if (m_key_field.FieldDelegateHandleChar(key) == eKeyHandled)
+ return eKeyHandled;
+
+ if (!m_key_field.FieldDelegateOnLastOrOnlyElement())
+ return eKeyNotHandled;
+
+ m_key_field.FieldDelegateExitCallback();
+ m_selection_type = SelectionType::Value;
+ m_value_field.FieldDelegateSelectFirstElement();
+ return eKeyHandled;
+ }
+
HandleCharResult FieldDelegateHandleChar(int key) override {
switch (key) {
+ case KEY_RETURN:
+ return SelectNextField(key);
case '\t':
- SelectNext(key);
- return eKeyHandled;
+ return SelectNext(key);
case KEY_SHIFT_TAB:
- SelectPrevious(key);
- return eKeyHandled;
+ return SelectPrevious(key);
default:
break;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D108331.367569.patch
Type: text/x-patch
Size: 2886 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20210819/8c969749/attachment.bin>
More information about the lldb-commits
mailing list