ui: Keyboard controls (#935)
* switch focus between views with Tab * move focus within views with WASD/HJKL/Arrows * move focus between graph edges by holding Shift * move focus between code references by holding Shift * removed graph panning with WASD and moved zooming to Alt + W/S * removed graph navigation by pressing starting character in graph view lists * changed local reference and custom trail shortcuts * updated Keyboard Shortcuts window * use common back and forward shortcuts and YZ & Shift + YZ * fix macOS issue where widgets don't get proper focus after creating a new tab * don't use shared_ptr in QtMainView fixes #486, #327, #214, #210
This commit is contained in:
@@ -0,0 +1,192 @@
|
||||
|
||||
#define CODE_TESTS
|
||||
|
||||
#include "header.h"
|
||||
|
||||
// NOTE: complete in both snippet and single mode
|
||||
|
||||
// TEST: Move Focus between locations
|
||||
// START ----------------------------------------------------------------------
|
||||
|
||||
int sum(int a, int b) // <- ACTION: focus location via hover
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
|
||||
int diff(int a, int b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
int mult(int a, int b)
|
||||
{
|
||||
return a * b;
|
||||
}
|
||||
|
||||
int div(int a, int b)
|
||||
{
|
||||
return a / b;
|
||||
}
|
||||
|
||||
// ACTION: Use WASD for navigation
|
||||
// RESULTS:
|
||||
// - Focus is moved between locations
|
||||
// - lines without locations are skipped
|
||||
// - focus tries to stay at same column if possible
|
||||
// - view scrolls up and down if focus leaves visible viewport
|
||||
|
||||
// ACTION: Use HJKL for navigation
|
||||
// RESULTS: same as above
|
||||
|
||||
// ACTION: Use arrow keys for navigation
|
||||
// RESULTS: same as above
|
||||
|
||||
// END ------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
// TEST: Activate location
|
||||
// START ----------------------------------------------------------------------
|
||||
|
||||
int decimate(int a) // <- ACTION: move focus on 'decimate'
|
||||
{
|
||||
return div(a, 10);
|
||||
}
|
||||
|
||||
// ACTION: Press Enter/E
|
||||
// RESULT: 'decimate' is activated
|
||||
|
||||
// END ------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
// TEST: Activate local symbol
|
||||
// START ----------------------------------------------------------------------
|
||||
|
||||
int pow(int a, int b)
|
||||
{
|
||||
int r = 1; // <- ACTION 1: move focus on 'r'
|
||||
for (int i = 0; i < b; ++i)
|
||||
{
|
||||
r *= a;
|
||||
}
|
||||
return r; // <- ACTION 3: move focus on 'r'
|
||||
}
|
||||
|
||||
// ACTION 2: Press Enter/E
|
||||
// RESULT 2: 'r' is activated
|
||||
|
||||
// ACTION 4: Press Enter/E
|
||||
// RESULT 3: 'r' is deactivated
|
||||
|
||||
// END ------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
// TEST: Navigate between active locations
|
||||
// START ----------------------------------------------------------------------
|
||||
|
||||
int square(int a)
|
||||
{
|
||||
return mult(a, a); // <- ACTION: activate 'mult'
|
||||
}
|
||||
|
||||
// ACTION: Hold Shift and navigate with keyboard
|
||||
// RESULT: focus is moved between the active locations of 'mult'
|
||||
|
||||
// END ------------------------------------------------------------------------
|
||||
|
||||
|
||||
// TEST: Navigate between active local locations
|
||||
// START ----------------------------------------------------------------------
|
||||
|
||||
int cube(int a)
|
||||
{
|
||||
int r = square(a); // <- ACTION 1: activate 'square'
|
||||
r = mult(r, a);
|
||||
return r; // <- ACTION 2: activate 'r'
|
||||
}
|
||||
|
||||
// ACTION: Hold Shift and navigate with keyboard
|
||||
// RESULTS:
|
||||
// - focus is moved between the active locations of 'square'
|
||||
// - focus is moved between the active local locations of 'r' inbetween
|
||||
|
||||
// END ------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
// NOTE: Snippet mode only
|
||||
|
||||
|
||||
|
||||
// TEST: Expanding scopes
|
||||
// START ----------------------------------------------------------------------
|
||||
|
||||
// ACTION 5: Move focus to file expansion above and press Enter/E
|
||||
|
||||
class Calculator
|
||||
{
|
||||
public:
|
||||
int getValue() const
|
||||
{
|
||||
return m_value;
|
||||
}
|
||||
|
||||
// ACTION 4: Move focus to scope expansion above and press Enter/E
|
||||
void clearValue()
|
||||
{
|
||||
m_value = 0;
|
||||
}
|
||||
|
||||
void add(int a) // <- ACTION 1: activate 'add'
|
||||
{
|
||||
m_value += a;
|
||||
}
|
||||
// ACTION 2: Move focus to scope expansion below and press Enter/E
|
||||
|
||||
void diff(int a)
|
||||
{
|
||||
m_value -= a;
|
||||
}
|
||||
// ACTION 3: Move focus to scope expansion above and press Enter/E
|
||||
|
||||
void mult(int a)
|
||||
{
|
||||
m_value *= a;
|
||||
}
|
||||
|
||||
void div(int a)
|
||||
{
|
||||
m_value /= a;
|
||||
}
|
||||
|
||||
private:
|
||||
int m_value = 0;
|
||||
};
|
||||
|
||||
// RESULTS 1-4:
|
||||
// - scope is expanded and focus is placed to location closest to expanded line
|
||||
|
||||
// BROKEN: focus is placed but not visible
|
||||
// RESULT 5: Whole file is expanded and focus placed at closest location
|
||||
|
||||
// END ------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
// TEST: Expand/Minimize snippets
|
||||
// START ----------------------------------------------------------------------
|
||||
|
||||
int half(int a) // <- ACTION 2: activate 'int'
|
||||
{
|
||||
return div(a, 2);
|
||||
}
|
||||
|
||||
// ACTION 2: Move focus to snippet title bar and press Enter/E
|
||||
// RESULT 2: Snippet is collapsed
|
||||
|
||||
// ACTION 2: Press Enter/E again
|
||||
// RESULT 2: Snippet is expanded again
|
||||
|
||||
// END ------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user