Update support code for Jexer
[jvcard.git] / src / be / nikiroo / jvcard / tui / windows / TuiBrowserWindow.java
CommitLineData
10dd1e38
NR
1package be.nikiroo.jvcard.tui.windows;
2
10dd1e38 3import java.util.List;
10dd1e38
NR
4
5import jexer.TAction;
6import jexer.TApplication;
10dd1e38 7import jexer.TTable;
10dd1e38
NR
8import jexer.event.TResizeEvent;
9import be.nikiroo.jvcard.tui.panes.MainContent;
10
c8398c23 11public abstract class TuiBrowserWindow extends TuiBasicWindow {
10dd1e38
NR
12 private TTable table;
13 private boolean showHeader;
10dd1e38 14
5c5abfd2
NR
15 public TuiBrowserWindow(TuiBasicWindow parent, String title,
16 boolean showHeaders) {
17 super(parent, title);
18 init(showHeaders);
19 }
20
21 public TuiBrowserWindow(TApplication app, int width, int height,
22 String title, boolean showHeaders) {
23 super(app, title, width, height);
24 init(showHeaders);
25 }
10dd1e38 26
5c5abfd2 27 private void init(boolean showHeaders) {
10dd1e38
NR
28 this.showHeader = showHeaders;
29
c8398c23
NR
30 table = new TTable(this, 0, 0, getWidth() - 2, getHeight() - 2,
31 new TAction() {
32 @Override
33 public void DO() {
5c5abfd2 34 onAction(table.getSelectedRow(),
c8398c23
NR
35 table.getSelectedColumn());
36 }
37 }, null);
10dd1e38
NR
38 }
39
40 /**
41 * Change the currently displayed data.
42 *
43 * @param headers
44 * the table headers (mandatory)
5c5abfd2 45 * @param rows
10dd1e38
NR
46 * the data to display
47 */
5c5abfd2
NR
48 public void setData(List<String> headers, List<List<String>> rows) {
49 int prevRow = table.getSelectedRow();
10dd1e38
NR
50 int prevColumn = table.getSelectedColumn();
51
52 table.clear();
53 table.setHeaders(headers, showHeader);
5c5abfd2
NR
54 for (List<String> row : rows) {
55 table.addRow(row);
10dd1e38
NR
56 }
57
58 table.reflow();
59
5c5abfd2 60 table.setSelectedRow(Math.min(prevRow, table.getNumberOfRows() - 1));
10dd1e38
NR
61 table.setSelectedColumn(Math.min(prevColumn,
62 table.getNumberOfColumns() - 1));
63 }
64
10dd1e38
NR
65 /**
66 * Return the number of items in this {@link MainContent}, or -1 if this
67 * {@link MainContent} is not countable.
68 *
69 * @return -1 or the number of present items
70 */
71 public int size() {
5c5abfd2 72 return table.getNumberOfRows();
10dd1e38
NR
73 }
74
10dd1e38
NR
75 /**
76 * An item has been selected.
77 *
5c5abfd2
NR
78 * @param selectedRow
79 * the currently selected row
10dd1e38
NR
80 * @param selectedColumn
81 * the currently selected column
82 */
83 @SuppressWarnings("unused")
5c5abfd2 84 public void onAction(int selectedRow, int selectedColumn) {
10dd1e38
NR
85 }
86
87 @Override
88 public void onResize(TResizeEvent resize) {
89 super.onResize(resize);
c8398c23
NR
90 // Will be NULL at creation time in super()
91 if (table != null) {
92 table.setWidth(getWidth() - 2);
93 table.setHeight(getHeight() - 2);
94 table.reflow();
10dd1e38
NR
95 }
96 }
97}