Skip to content

Commit

Permalink
Adding findDockingArea method. #1
Browse files Browse the repository at this point in the history
  • Loading branch information
caduandrade committed Oct 12, 2023
1 parent 03d40d8 commit 906796e
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 49 deletions.
16 changes: 11 additions & 5 deletions lib/src/layout/docking_layout.dart
Original file line number Diff line number Diff line change
Expand Up @@ -548,17 +548,23 @@ class DockingLayout extends ChangeNotifier {

/// Finds a [DockingItem] given an id.
DockingItem? findDockingItem(dynamic id) {
return _findDockingItem(parent: root, id: id);
DockingArea? area = _findDockingArea(parent: root, id: id);
return area is DockingItem ? area : null;
}

/// Recursively finds a [DockingItem] given an id.
DockingItem? _findDockingItem({DockingArea? parent, dynamic id}) {
/// Finds a [DockingArea] given an id.
DockingArea? findDockingArea(dynamic id) {
return _findDockingArea(parent: root, id: id);
}

/// Recursively finds a [DockingArea] given an id.
DockingArea? _findDockingArea({DockingArea? parent, dynamic id}) {
if (parent != null) {
if (parent is DockingItem && parent.id == id) {
if (parent.id == id) {
return parent;
} else if (parent is DockingParentArea) {
for (DockingArea child in parent._children) {
DockingItem? item = _findDockingItem(parent: child, id: id);
DockingArea? item = _findDockingArea(parent: child, id: id);
if (item != null) {
return item;
}
Expand Down
4 changes: 2 additions & 2 deletions lib/src/layout/layout_parser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ abstract class LayoutParser {
/// * ID
/// * WEIGHT
/// * MAXIMIZED
/// * CHILDREN_INDEXES
/// * [DockingColumn]
/// * AREA_ACRONYM
/// * ID_LENGTH
Expand All @@ -75,7 +74,7 @@ abstract class LayoutParser {
/// * CHILDREN_INDEXES
///
/// Example:
/// V1:1:1(1;I;.2;;100;5;my_id;7;my_name;8;my_value;T;;F)
/// V1:3:1(R;0;;;2,3),2(I;6;my_id1;0.5;F),3(I;6;my_id2;0.5;F)
String stringify({required DockingLayout layout}) {
final List<DockingArea> areas = layout.layoutAreas();

Expand Down Expand Up @@ -169,6 +168,7 @@ abstract class LayoutParser {
return indexes.join(',');
}

/// Builds a [DockingLayout] from formatted layout String.
DockingLayout layoutFrom(String layout) {
if (layout.startsWith('V1:')) {
_layout = layout.substring(3);
Expand Down
103 changes: 61 additions & 42 deletions test/find_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,30 +15,33 @@ void main() {
test('row', () {
DockingItem item1 = dockingItem(1);
DockingItem item2 = dockingItem(2);
DockingRow row = DockingRow([item1, item2]);
DockingRow row = DockingRow([item1, item2], id: 'row');
DockingLayout layout = DockingLayout(root: row);
expect(layout.findDockingItem(1), isNotNull);
expect(layout.findDockingItem(2), isNotNull);
expect(layout.findDockingItem(1), item1);
expect(layout.findDockingItem(2), item2);
expect(layout.findDockingItem(3), isNull);
expect(layout.findDockingArea('row'), row);
});
test('column', () {
DockingItem item1 = dockingItem(1);
DockingItem item2 = dockingItem(2);
DockingColumn column = DockingColumn([item1, item2]);
DockingColumn column = DockingColumn([item1, item2], id: 'column');
DockingLayout layout = DockingLayout(root: column);
expect(layout.findDockingItem(1), isNotNull);
expect(layout.findDockingItem(2), isNotNull);
expect(layout.findDockingItem(1), item1);
expect(layout.findDockingItem(2), item2);
expect(layout.findDockingItem(3), isNull);
expect(layout.findDockingArea('column'), column);
});

test('tabs', () {
DockingItem itemB = dockingItem(1);
DockingItem itemC = dockingItem(2);
DockingTabs tabs = DockingTabs([itemB, itemC]);
DockingItem item1 = dockingItem(1);
DockingItem item2 = dockingItem(2);
DockingTabs tabs = DockingTabs([item1, item2], id: 'tabs');
DockingLayout layout = DockingLayout(root: tabs);
expect(layout.findDockingItem(1), isNotNull);
expect(layout.findDockingItem(2), isNotNull);
expect(layout.findDockingItem(1), item1);
expect(layout.findDockingItem(2), item2);
expect(layout.findDockingItem(3), isNull);
expect(layout.findDockingArea('tabs'), tabs);
});

test('complex', () {
Expand All @@ -47,18 +50,23 @@ void main() {
DockingItem itemC = dockingItem('c');
DockingItem itemD = dockingItem('d');
DockingItem itemE = dockingItem('e');
DockingColumn innerColumn = DockingColumn([itemB, itemC]);
DockingRow row = DockingRow([itemA, innerColumn]);
DockingTabs tabs = DockingTabs([itemD, itemE]);
DockingColumn column = DockingColumn([row, tabs]);
DockingColumn innerColumn =
DockingColumn([itemB, itemC], id: 'innerColumn');
DockingRow row = DockingRow([itemA, innerColumn], id: 'row');
DockingTabs tabs = DockingTabs([itemD, itemE], id: 'tabs');
DockingColumn column = DockingColumn([row, tabs], id: 'column');
DockingLayout layout = DockingLayout(root: column);

expect(layout.findDockingItem('a'), isNotNull);
expect(layout.findDockingItem('b'), isNotNull);
expect(layout.findDockingItem('c'), isNotNull);
expect(layout.findDockingItem('d'), isNotNull);
expect(layout.findDockingItem('e'), isNotNull);
expect(layout.findDockingItem('a'), itemA);
expect(layout.findDockingItem('b'), itemB);
expect(layout.findDockingItem('c'), itemC);
expect(layout.findDockingItem('d'), itemD);
expect(layout.findDockingItem('e'), itemE);
expect(layout.findDockingItem('f'), isNull);
expect(layout.findDockingArea('innerColumn'), innerColumn);
expect(layout.findDockingArea('row'), row);
expect(layout.findDockingArea('column'), column);
expect(layout.findDockingArea('innerColumn'), innerColumn);
});

test('complex 2', () {
Expand All @@ -68,19 +76,24 @@ void main() {
DockingItem itemD = dockingItem('d');
DockingItem itemE = dockingItem('e');
DockingItem itemF = dockingItem('f');
DockingColumn innerColumn = DockingColumn([itemB, itemC]);
DockingRow row = DockingRow([itemA, innerColumn]);
DockingTabs tabs = DockingTabs([itemD, itemE]);
DockingColumn column = DockingColumn([row, tabs, itemF]);
DockingColumn innerColumn =
DockingColumn([itemB, itemC], id: 'innerColumn');
DockingRow row = DockingRow([itemA, innerColumn], id: 'row');
DockingTabs tabs = DockingTabs([itemD, itemE], id: 'tabs');
DockingColumn column = DockingColumn([row, tabs, itemF], id: 'column');
DockingLayout layout = DockingLayout(root: column);

expect(layout.findDockingItem('a'), isNotNull);
expect(layout.findDockingItem('b'), isNotNull);
expect(layout.findDockingItem('c'), isNotNull);
expect(layout.findDockingItem('d'), isNotNull);
expect(layout.findDockingItem('e'), isNotNull);
expect(layout.findDockingItem('f'), isNotNull);
expect(layout.findDockingItem('a'), itemA);
expect(layout.findDockingItem('b'), itemB);
expect(layout.findDockingItem('c'), itemC);
expect(layout.findDockingItem('d'), itemD);
expect(layout.findDockingItem('e'), itemE);
expect(layout.findDockingItem('f'), itemF);
expect(layout.findDockingItem('g'), isNull);
expect(layout.findDockingArea('innerColumn'), innerColumn);
expect(layout.findDockingArea('row'), row);
expect(layout.findDockingArea('column'), column);
expect(layout.findDockingArea('innerColumn'), innerColumn);
});

test('complex 3', () {
Expand All @@ -91,21 +104,27 @@ void main() {
DockingItem itemE = dockingItem('e');
DockingItem itemF = dockingItem('f');
DockingItem itemG = dockingItem('g');
DockingColumn innerColumn = DockingColumn([itemB, itemC]);
DockingRow row = DockingRow([itemA, innerColumn]);
DockingTabs tabs = DockingTabs([itemD, itemE]);
DockingColumn column = DockingColumn([row, tabs, itemF]);
DockingRow row2 = DockingRow([itemG, column]);
DockingColumn innerColumn =
DockingColumn([itemB, itemC], id: 'innerColumn');
DockingRow row = DockingRow([itemA, innerColumn], id: 'row');
DockingTabs tabs = DockingTabs([itemD, itemE], id: 'tabs');
DockingColumn column = DockingColumn([row, tabs, itemF], id: 'column');
DockingRow row2 = DockingRow([itemG, column], id: 'row2');
DockingLayout layout = DockingLayout(root: row2);

expect(layout.findDockingItem('a'), isNotNull);
expect(layout.findDockingItem('b'), isNotNull);
expect(layout.findDockingItem('c'), isNotNull);
expect(layout.findDockingItem('d'), isNotNull);
expect(layout.findDockingItem('e'), isNotNull);
expect(layout.findDockingItem('f'), isNotNull);
expect(layout.findDockingItem('g'), isNotNull);
expect(layout.findDockingItem('a'), itemA);
expect(layout.findDockingItem('b'), itemB);
expect(layout.findDockingItem('c'), itemC);
expect(layout.findDockingItem('d'), itemD);
expect(layout.findDockingItem('e'), itemE);
expect(layout.findDockingItem('f'), itemF);
expect(layout.findDockingItem('g'), itemG);
expect(layout.findDockingItem('h'), isNull);
expect(layout.findDockingArea('innerColumn'), innerColumn);
expect(layout.findDockingArea('row'), row);
expect(layout.findDockingArea('row2'), row2);
expect(layout.findDockingArea('column'), column);
expect(layout.findDockingArea('innerColumn'), innerColumn);
});
});
}

0 comments on commit 906796e

Please sign in to comment.