mirror of https://github.com/buggins/dlangui.git
grids: support selection moving using keys
This commit is contained in:
parent
305e020de7
commit
a9b921350e
|
@ -35,7 +35,7 @@ import std.algorithm;
|
||||||
immutable dchar EOL = '\n';
|
immutable dchar EOL = '\n';
|
||||||
|
|
||||||
/// Editor action codes
|
/// Editor action codes
|
||||||
enum EditorActions {
|
enum EditorActions : int {
|
||||||
None = 0,
|
None = 0,
|
||||||
/// move cursor one char left
|
/// move cursor one char left
|
||||||
Left = 1000,
|
Left = 1000,
|
||||||
|
|
|
@ -100,6 +100,20 @@ class GridWidgetBase : WidgetGroup {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// grid control action codes
|
||||||
|
enum GridActions : int {
|
||||||
|
/// no action
|
||||||
|
None = 0,
|
||||||
|
/// move selection up
|
||||||
|
Up = 2000,
|
||||||
|
/// move selection down
|
||||||
|
Down,
|
||||||
|
/// move selection left
|
||||||
|
Left,
|
||||||
|
/// move selection right
|
||||||
|
Right,
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Grid view with string data shown. All rows are of the same height.
|
* Grid view with string data shown. All rows are of the same height.
|
||||||
*/
|
*/
|
||||||
|
@ -147,6 +161,13 @@ class StringGridWidget : GridWidgetBase {
|
||||||
_data[y][x] = "cell("d ~ to!dstring(x) ~ ","d ~ to!dstring(y) ~ ")"d;
|
_data[y][x] = "cell("d ~ to!dstring(x) ~ ","d ~ to!dstring(y) ~ ")"d;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
acceleratorMap.add( [
|
||||||
|
new Action(GridActions.Up, KeyCode.UP, 0),
|
||||||
|
new Action(GridActions.Down, KeyCode.DOWN, 0),
|
||||||
|
new Action(GridActions.Left, KeyCode.LEFT, 0),
|
||||||
|
new Action(GridActions.Right, KeyCode.RIGHT, 0),
|
||||||
|
]);
|
||||||
|
focusable = true;
|
||||||
}
|
}
|
||||||
@property override int cols() {
|
@property override int cols() {
|
||||||
return _cols;
|
return _cols;
|
||||||
|
@ -319,7 +340,7 @@ class StringGridWidget : GridWidgetBase {
|
||||||
x -= _clientRect.left;
|
x -= _clientRect.left;
|
||||||
y -= _clientRect.top;
|
y -= _clientRect.top;
|
||||||
cellFound = pointToCell(x, y, c, r, rc);
|
cellFound = pointToCell(x, y, c, r, rc);
|
||||||
normalCell = c >= _fixedCols && r >= _fixedRows;
|
normalCell = c >= _headerCols && r >= _headerRows;
|
||||||
}
|
}
|
||||||
if (event.action == MouseAction.ButtonDown && event.button == MouseButton.Left) {
|
if (event.action == MouseAction.ButtonDown && event.button == MouseButton.Left) {
|
||||||
if (cellFound && normalCell) {
|
if (cellFound && normalCell) {
|
||||||
|
@ -341,6 +362,32 @@ class StringGridWidget : GridWidgetBase {
|
||||||
return super.onMouseEvent(event);
|
return super.onMouseEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override protected bool handleAction(const Action a) {
|
||||||
|
switch (a.id) {
|
||||||
|
case GridActions.Left:
|
||||||
|
if (_col > _headerCols)
|
||||||
|
_col--;
|
||||||
|
invalidate();
|
||||||
|
return true;
|
||||||
|
case GridActions.Right:
|
||||||
|
if (_col < _cols - 1)
|
||||||
|
_col++;
|
||||||
|
invalidate();
|
||||||
|
return true;
|
||||||
|
case GridActions.Up:
|
||||||
|
if (_row > _headerRows)
|
||||||
|
_row--;
|
||||||
|
invalidate();
|
||||||
|
return true;
|
||||||
|
case GridActions.Down:
|
||||||
|
if (_row < _rows - 1)
|
||||||
|
_row++;
|
||||||
|
invalidate();
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return super.handleAction(a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// returns row header title
|
/// returns row header title
|
||||||
dstring rowTitle(int row) {
|
dstring rowTitle(int row) {
|
||||||
|
|
Loading…
Reference in New Issue