Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 40 additions & 20 deletions src/main/java/com/googlecode/lanterna/gui2/table/Table.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public Table(String... columnLabels) {
* Creates a new {@code Table} with the specified table model
* @param tableModel Table model
*/
public Table(final TableModel tableModel) {
public Table(final TableModel<V> tableModel) {
this.tableHeaderRenderer = new DefaultTableHeaderRenderer<>();
this.tableCellRenderer = new DefaultTableCellRenderer<>();
this.tableModel = tableModel;
Expand Down Expand Up @@ -465,25 +465,45 @@ else if(escapeByArrowKey) {
} else {
return super.handleKeyStroke(keyStroke);
}
case MOUSE_EVENT:
MouseAction action = (MouseAction)keyStroke;
MouseActionType actionType = action.getActionType();
if (actionType == MouseActionType.MOVE) {
// do nothing
case MOUSE_EVENT:
if (!isFocused())
{
// If table is not in focus, pass on
return super.handleKeyStroke(keyStroke);
}

if (isMouseMove(keyStroke)) {
// do nothing
return Result.UNHANDLED;
}
if (!isFocused()) {
super.handleKeyStroke(keyStroke);
}
int mouseRow = getRowByMouseAction((MouseAction) keyStroke);
int mouseColumn = getColumnByMouseAction((MouseAction) keyStroke);
boolean isDifferentCell = mouseRow != selectedRow || mouseColumn != selectedColumn;
selectedRow = mouseRow;
selectedColumn = mouseColumn;
if (isDifferentCell) {
return handleKeyStroke(new KeyStroke(KeyType.ENTER));
}
break;
}

MouseAction action = (MouseAction)keyStroke;
MouseActionType actionType = action.getActionType();

// Handle - scrolling or mouse movement
switch(actionType)
{
// do nothing, desired action has been performed already on CLICK_DOWN and DRAG
case CLICK_RELEASE : return Result.HANDLED;

// Call ArrowUp key so same behavior is performed
case SCROLL_UP : return handleKeyStroke(new KeyStroke(KeyType.ARROW_UP));

// Call ArrowDown key so same behavior is performed
case SCROLL_DOWN : return handleKeyStroke(new KeyStroke(KeyType.ARROW_DOWN));

default :
int mouseRow = getRowByMouseAction((MouseAction) keyStroke);
int mouseColumn = getColumnByMouseAction((MouseAction) keyStroke);
boolean isDifferentCell = mouseRow != selectedRow || mouseColumn != selectedColumn;
selectedRow = mouseRow;
selectedColumn = mouseColumn;
if (!isDifferentCell) {
return handleKeyStroke(new KeyStroke(KeyType.ENTER));
}
break;
}
break;
default:
return super.handleKeyStroke(keyStroke);
}
Expand All @@ -500,7 +520,7 @@ else if(escapeByArrowKey) {
protected int getRowByMouseAction(MouseAction mouseAction) {
int minPossible = getFirstViewedRowIndex();
int maxPossible = getLastViewedRowIndex();
int mouseSpecified = mouseAction.getPosition().getRow() - getGlobalPosition().getRow() - 1;
int mouseSpecified = mouseAction.getPosition().getRow() - getGlobalPosition().getRow() + getRenderer().getViewTopRow() - 1;

return Math.max(minPossible, Math.min(mouseSpecified, maxPossible));
}
Expand Down
45 changes: 38 additions & 7 deletions src/test/java/com/googlecode/lanterna/gui2/TableTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,24 @@
*/
package com.googlecode.lanterna.gui2;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;

import com.googlecode.lanterna.SGR;
import com.googlecode.lanterna.TextColor;
import com.googlecode.lanterna.gui2.dialogs.*;
import com.googlecode.lanterna.gui2.dialogs.ActionListDialogBuilder;
import com.googlecode.lanterna.gui2.dialogs.ListSelectDialogBuilder;
import com.googlecode.lanterna.gui2.dialogs.MessageDialog;
import com.googlecode.lanterna.gui2.dialogs.TextInputDialogBuilder;
import com.googlecode.lanterna.gui2.table.DefaultTableCellRenderer;
import com.googlecode.lanterna.gui2.table.DefaultTableRenderer;
import com.googlecode.lanterna.gui2.table.Table;
import com.googlecode.lanterna.gui2.table.TableCellBorderStyle;
import com.googlecode.lanterna.gui2.table.TableModel;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;

/**
* Test for the Table component
*/
Expand Down Expand Up @@ -62,6 +65,34 @@ protected void applyStyle(Table<String> table, String cell, int columnIndex, int
}
}
});
table.setSelectAction(new Runnable() {
public void run()
{
int rowIdx = table.getSelectedRow();
if (table.getTableModel().getRowCount() > 0)
{
List<String> row = table.getTableModel().getRow(rowIdx);
if (row != null)
{
StringBuilder sb = new StringBuilder();
sb.append(String.format("Row Selected(%d)->", rowIdx + 1));

int rows = table.getTableModel().getColumnCount();
for (int idx = 0; idx<rows; idx++)
{
if (idx > 0) sb.append("->");
sb.append(String.format("Col%d:[%s]", idx + 1, row.get(idx)));
}
sb.append(System.lineSeparator());

System.out.print(sb.toString());

MessageDialog.showMessageDialog(textGUI, "Selected Row Data", sb.toString());
}
}
}
});

final TableModel<String> model = table.getTableModel();
for (int i = 1; i < 30; i++) {
model.addRow("Row" + i, "Row" + i, "Row" + i);
Expand Down