-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathExportableTableView.cs
77 lines (67 loc) · 1.6 KB
/
ExportableTableView.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System.Data;
using Cilurbo.Services;
using Terminal.Gui;
namespace Cilurbo;
public class ExportableTableView : TableView {
public ExportableTableView ()
{
}
public string? Title { get; set; }
public override bool ProcessKey (KeyEvent kb)
{
switch (kb.Key) {
case Key.CtrlMask | Key.E:
ExportTable ();
return true;
case Key.CtrlMask | Key.G:
GistTable ();
return true;
}
return base.ProcessKey (kb);
}
protected virtual void ExportMarkdown (TextWriter writer)
{
foreach (DataColumn column in Table.Columns)
writer.Write ($"| {column.ColumnName} ");
writer.WriteLine ("|");
foreach (DataColumn column in Table.Columns) {
switch (Type.GetTypeCode (column.DataType)) {
case TypeCode.String:
writer.Write ("| :---- ");
break;
case TypeCode.Int16:
case TypeCode.Int32:
case TypeCode.Int64:
writer.Write ("| ----: ");
break;
default:
writer.Write ("| :---: ");
break;
}
}
writer.WriteLine ("|");
foreach (DataRow row in Table.Rows) {
for (int i = 0; i < Table.Columns.Count; i++)
writer.Write ($"| {row [i]} ");
writer.WriteLine ("|");
}
writer.Flush ();
}
void ExportTable ()
{
using SaveDialog d = new ("Export Table", "", new () { ".md" });
Application.Run (d);
if (!d.Canceled && (d.FilePath is not null)) {
using StreamWriter writer = new (d.FilePath.ToString ()!);
ExportMarkdown (writer);
writer.Close ();
}
}
void GistTable ()
{
using StringWriter writer = new ();
ExportMarkdown (writer);
writer.Close ();
_ = GistSupport.Gist (Title ?? "cilurbo", "table.md", writer.ToString ());
}
}