Skip to content

Commit db4ac10

Browse files
AndyCrossIvan Gavryliuk
authored and
Ivan Gavryliuk
committed
tensorflow#70 row-wise folding (tensorflow#74)
* tensorflow#70 row-wise folding * tensorflow#70 row-wise folding
1 parent 3fdeb0f commit db4ac10

File tree

7 files changed

+112
-28
lines changed

7 files changed

+112
-28
lines changed

src/parq/Display/DisplayController.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Parquet;
1+
using parq.Display.Models;
2+
using Parquet;
23
using System;
34
using System.Collections.Generic;
45
using System.Linq;

src/parq/Display/ColumnDetails.cs renamed to src/parq/Display/Models/ColumnDetails.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using System.Collections.Generic;
33
using System.Text;
44

5-
namespace parq.Display
5+
namespace parq.Display.Models
66
{
77
public class ColumnDetails
88
{
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace parq.Display.Models
6+
{
7+
class ConsoleFold
8+
{
9+
public IEnumerable<object[]> Rows { get; set; }
10+
public int IndexStart { get; set; }
11+
public int IndexEnd { get; set; }
12+
}
13+
}

src/parq/Display/ConsoleSheet.cs renamed to src/parq/Display/Models/ConsoleSheet.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using System.Collections.Generic;
33
using System.Text;
44

5-
namespace parq.Display
5+
namespace parq.Display.Models
66
{
77
public class ConsoleSheet
88
{

src/parq/Display/ViewModel.cs renamed to src/parq/Display/Models/ViewModel.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using System.Collections.Generic;
33
using System.Text;
44

5-
namespace parq.Display
5+
namespace parq.Display.Models
66
{
77
public class ViewModel
88
{

src/parq/Display/Views/ConsoleView.cs

+90-22
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,128 @@
1-
using System;
1+
using parq.Display.Models;
2+
using System;
23
using System.Collections.Generic;
34
using System.Linq;
45

56
namespace parq.Display.Views
67
{
8+
/// <summary>
9+
/// Displays to the Console window a navigatable (2D) data set
10+
/// </summary>
711
public class ConsoleView
812
{
913
private const string verticalSeparator = "|";
1014
private const string horizontalSeparator = "-";
1115
private Stack<ConsoleSheet> unreadSheets;
1216
private Stack<ConsoleSheet> readSheets = new Stack<ConsoleSheet>();
13-
private ConsoleSheet currentSheet;
17+
private Stack<ConsoleFold> unreadFolds;
18+
private Stack<ConsoleFold> readFolds = new Stack<ConsoleFold>();
1419

1520
public void Draw(ViewModel viewModel)
1621
{
1722
Console.Clear();
1823
var viewPort = new ViewPort();
1924

2025
unreadSheets = GenerateSheets(viewPort, viewModel.Columns);
26+
unreadFolds = GenerateFolds(viewPort, viewModel.Rows);
2127

22-
currentSheet = unreadSheets.Pop();
23-
DrawSheet(viewModel, currentSheet);
28+
var currentSheet = unreadSheets.Pop();
29+
var currentFold = unreadFolds.Pop();
30+
DrawSheet(viewModel, currentSheet, currentFold, viewPort);
2431

2532
}
2633

27-
private void DrawSheet(ViewModel viewModel, ConsoleSheet currentSheet)
34+
private Stack<ConsoleFold> GenerateFolds(ViewPort viewPort, List<object[]> rows)
2835
{
36+
var foldLength = viewPort.Height - 7;
37+
38+
var folds = new Stack<ConsoleFold>();
39+
var firstFoldPoint = (rows.Count > foldLength) ? foldLength : rows.Count;
40+
var runningTotal = firstFoldPoint;
41+
var firstFold = rows.Take(firstFoldPoint);
42+
43+
folds.Push(new ConsoleFold { Rows = firstFold, IndexStart = 0, IndexEnd = firstFold.Count() });
44+
45+
while (runningTotal != rows.Count)
46+
{
47+
var nextFoldPoint = (rows.Count > runningTotal + foldLength) ? foldLength : rows.Count - runningTotal;
48+
var nextFold = rows.Skip(runningTotal).Take(nextFoldPoint);
49+
folds.Push(new ConsoleFold { Rows = nextFold, IndexStart = runningTotal, IndexEnd = runningTotal + nextFold.Count() });
50+
runningTotal += nextFold.Count();
51+
}
52+
53+
var originalFoldCount = folds.Count;
54+
var unReadFolds = new Stack<ConsoleFold>();
55+
for (int i = 0; i < originalFoldCount; i++)
56+
{
57+
unReadFolds.Push(folds.Pop());
58+
}
59+
return unReadFolds;
60+
}
61+
62+
private void DrawSheet(ViewModel viewModel, ConsoleSheet currentSheet, ConsoleFold currentFold, ViewPort viewPort)
63+
{
64+
Console.Clear();
2965
DrawLine(currentSheet);
3066
WriteHeaderLine(currentSheet);
3167
DrawLine(currentSheet);
32-
WriteValues(viewModel, currentSheet);
68+
WriteValues(viewModel, currentSheet, currentFold);
3369
DrawLine(currentSheet);
34-
WriteSummary(viewModel, currentSheet);
70+
WriteSummary(viewModel, currentSheet, currentFold);
3571

3672
var input = AwaitInput();
3773
switch (input)
3874
{
3975
case Input.NoOp:
40-
DrawSheet(viewModel, currentSheet);
76+
DrawSheet(viewModel, currentSheet, currentFold, viewPort);
4177
break;
4278
case Input.Quit:
4379
break;
44-
case Input.NextPage:
80+
case Input.NextSheet:
4581
if (unreadSheets.Any())
4682
{
4783
readSheets.Push(currentSheet);
4884
var nextPage = unreadSheets.Pop();
49-
DrawSheet(viewModel, nextPage);
85+
DrawSheet(viewModel, nextPage, currentFold, viewPort);
5086
}
5187
else
5288
{
53-
DrawSheet(viewModel, currentSheet);
89+
DrawSheet(viewModel, currentSheet, currentFold, viewPort);
5490
}
5591
break;
56-
case Input.PrevPage:
92+
case Input.PrevSheet:
5793
if (readSheets.Any())
5894
{
5995
unreadSheets.Push(currentSheet);
6096
var lastPage = readSheets.Pop();
61-
DrawSheet(viewModel, lastPage);
97+
DrawSheet(viewModel, lastPage, currentFold, viewPort);
98+
}
99+
else
100+
{
101+
DrawSheet(viewModel, currentSheet, currentFold, viewPort);
102+
}
103+
break;
104+
case Input.NextFold:
105+
if (unreadFolds.Any())
106+
{
107+
readFolds.Push(currentFold);
108+
var nextFold = unreadFolds.Pop();
109+
DrawSheet(viewModel, currentSheet, nextFold, viewPort);
110+
}
111+
else
112+
{
113+
DrawSheet(viewModel, currentSheet, currentFold, viewPort);
114+
}
115+
break;
116+
case Input.PrevFold:
117+
if (readFolds.Any())
118+
{
119+
unreadFolds.Push(currentFold);
120+
var lastFold = readFolds.Pop();
121+
DrawSheet(viewModel, currentSheet, lastFold, viewPort);
62122
}
63123
else
64124
{
65-
DrawSheet(viewModel, currentSheet);
125+
DrawSheet(viewModel, currentSheet, currentFold, viewPort);
66126
}
67127
break;
68128
}
@@ -98,16 +158,24 @@ private Input AwaitInput()
98158
var key = Console.ReadKey();
99159
if (key.Key == ConsoleKey.RightArrow)
100160
{
101-
return Input.NextPage;
161+
return Input.NextSheet;
102162
}
103163
else if (key.Key == ConsoleKey.LeftArrow)
104164
{
105-
return Input.PrevPage;
165+
return Input.PrevSheet;
106166
}
107167
else if (key.Key == ConsoleKey.Enter)
108168
{
109169
return Input.Quit;
110170
}
171+
else if (key.Key == ConsoleKey.DownArrow)
172+
{
173+
return Input.NextFold;
174+
}
175+
else if (key.Key == ConsoleKey.UpArrow)
176+
{
177+
return Input.PrevFold;
178+
}
111179

112180
return Input.NoOp;
113181
}
@@ -136,10 +204,10 @@ private IEnumerable<ColumnDetails> FitColumns(ViewPort viewPort, IEnumerable<Col
136204
return columns;
137205
}
138206

139-
private void WriteSummary(ViewModel viewModel, ConsoleSheet currentSheet)
207+
private void WriteSummary(ViewModel viewModel, ConsoleSheet currentSheet, ConsoleFold currentFold)
140208
{
141-
Console.WriteLine("Showing {0} to {1} of {2} Columns. Press <- or -> to navigate.", currentSheet.IndexStart, currentSheet.IndexEnd, viewModel.Columns.Count());
142-
Console.WriteLine("{0} Rows Affected. Press ENTER to quit;", viewModel.RowCount);
209+
Console.WriteLine("Showing {0} to {1} of {2} Columns. Use Arrow Keys to Navigate.", currentSheet.IndexStart, currentSheet.IndexEnd, viewModel.Columns.Count());
210+
Console.WriteLine("Showing {0} to {1} of {2} Rows Total. Press ENTER to quit;", currentFold.IndexStart, currentFold.IndexEnd, viewModel.RowCount);
143211
}
144212
private void WriteHeaderLine(ConsoleSheet columnDetails)
145213
{
@@ -159,11 +227,11 @@ private void WriteHeaderLine(ConsoleSheet columnDetails)
159227
Console.Write(Environment.NewLine);
160228
}
161229

162-
private void WriteValues(ViewModel viewModel, ConsoleSheet columnsFitToScreen)
230+
private void WriteValues(ViewModel viewModel, ConsoleSheet columnsFitToScreen, ConsoleFold foldedRows)
163231
{
164-
for (int i = 0; i < viewModel.Rows.Count; i++)
232+
for (int i = 0; i < foldedRows.Rows.Count(); i++)
165233
{
166-
var row = viewModel.Rows[i];
234+
var row = foldedRows.Rows.ElementAt(i);
167235
Console.Write(verticalSeparator);
168236
for (int j = 0; j < row.Length; j++)
169237
{

src/parq/Display/Views/Input.cs

+4-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ public enum Input
44
{
55
NoOp,
66
Quit,
7-
NextPage,
8-
PrevPage
7+
NextSheet,
8+
PrevSheet,
9+
NextFold,
10+
PrevFold
911
}
1012
}

0 commit comments

Comments
 (0)