package org.jowidgets.examples.rcp3.nattable;
import org.jowidgets.api.model.table.ITableColumn;
import org.jowidgets.api.toolkit.Toolkit;
import org.jowidgets.api.widgets.IFrame;
import org.jowidgets.api.widgets.IPopupMenu;
import org.jowidgets.api.widgets.ITable;
import org.jowidgets.common.application.IApplication;
import org.jowidgets.common.application.IApplicationLifecycle;
import org.jowidgets.common.model.ITableCell;
import org.jowidgets.common.model.ITableColumnModelObservable;
import org.jowidgets.common.types.Dimension;
import org.jowidgets.common.widgets.controller.IActionListener;
import org.jowidgets.common.widgets.controller.IMouseButtonEvent;
import org.jowidgets.common.widgets.controller.ITableCellMouseEvent;
import org.jowidgets.common.widgets.controller.ITableCellPopupDetectionListener;
import org.jowidgets.common.widgets.controller.ITableCellPopupEvent;
import org.jowidgets.common.widgets.controller.ITableColumnMouseEvent;
import org.jowidgets.common.widgets.controller.ITableColumnPopupDetectionListener;
import org.jowidgets.common.widgets.controller.ITableColumnPopupEvent;
import org.jowidgets.common.widgets.controller.ITableSelectionListener;
import org.jowidgets.tools.controller.MouseAdapter;
import org.jowidgets.tools.controller.TableCellAdapter;
import org.jowidgets.tools.controller.TableColumnAdapter;
import org.jowidgets.tools.controller.TableColumnModelObservable;
import org.jowidgets.tools.controller.TableDataModelAdapter;
import org.jowidgets.tools.layout.MigLayoutFactory;
import org.jowidgets.tools.model.item.MenuModel;
import org.jowidgets.tools.model.table.AbstractTableModel;
import org.jowidgets.tools.model.table.DefaultTableColumn;
import org.jowidgets.tools.model.table.TableCell;
import org.jowidgets.tools.widgets.blueprint.BPF;
import org.jowidgets.util.ObservableBoolean;
import org.jowidgets.util.ObservableValue;
public final class NatTableExample implements IApplication {
@Override
public void start(IApplicationLifecycle lifecycle) {
IFrame frame = Toolkit.createRootFrame(BPF.frame("Nattable").setSize(new Dimension(800, 600)), lifecycle);
frame.setLayout(MigLayoutFactory.growingInnerCellLayout());
final ObservableBoolean option = new ObservableBoolean();
final TableModel tableModel = new TableModel(option);
final ITable table = frame.add(BPF.table(tableModel), MigLayoutFactory.GROWING_CELL_CONSTRAINTS);
table.addTableSelectionListener(new ITableSelectionListener() {
@Override
public void selectionChanged() {
System.out.println("ViewSelection: " + table.getSelection());
}
});
tableModel.addDataModelListener(new TableDataModelAdapter() {
@Override
public void selectionChanged() {
System.out.println("ModelSelection: " + tableModel.getSelection());
}
});
final MenuModel menu = new MenuModel();
menu.addActionItem("ChangeData").addActionListener(new IActionListener() {
@Override
public void actionPerformed() {
option.set(!option.getValue());
tableModel.fireDataChanged();
}
});
menu.addActionItem("Add Column").addActionListener(new IActionListener() {
@Override
public void actionPerformed() {
tableModel.addColumn();
}
});
menu.addActionItem("Remove Column").addActionListener(new IActionListener() {
@Override
public void actionPerformed() {
tableModel.removeColumn();
}
});
menu.addActionItem("Add Row").addActionListener(new IActionListener() {
@Override
public void actionPerformed() {
tableModel.addRow();
}
});
menu.addActionItem("Remove Row").addActionListener(new IActionListener() {
@Override
public void actionPerformed() {
tableModel.removeRow();
}
});
final IPopupMenu popupMenu = table.createPopupMenu();
popupMenu.setModel(menu);
table.addTableCellPopupDetectionListener(new ITableCellPopupDetectionListener() {
@Override
public void popupDetected(final ITableCellPopupEvent event) {
popupMenu.show(event.getPosition());
System.out.println("Cell popup: " + event);
}
});
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseDoubleClicked(final IMouseButtonEvent event) {
System.out.println("DoubleClick: " + event);
}
});
table.addTableColumnListener(new TableColumnAdapter() {
@Override
public void mouseClicked(final ITableColumnMouseEvent event) {
System.out.println("Clicked to header: " + event);
}
});
table.addTableCellListener(new TableCellAdapter() {
@Override
public void mouseDoubleClicked(final ITableCellMouseEvent event) {
System.out.println("DoubleClick: " + event);
}
});
table.addTableColumnPopupDetectionListener(new ITableColumnPopupDetectionListener() {
@Override
public void popupDetected(final ITableColumnPopupEvent event) {
System.out.println("Column popup: " + event);
}
});
frame.setVisible(true);
}
private final class TableModel extends AbstractTableModel {
private final TableColumnModelObservable columnModelObservable;;
private final ObservableValue<Boolean> cellOption;
private int columnCount;
private int rowCount;
TableModel(final ObservableValue<Boolean> cellOption) {
this.columnModelObservable = new TableColumnModelObservable();
this.cellOption = cellOption;
this.rowCount = 20000;
this.columnCount = 50;
}
void addRow() {
rowCount++;
fireRowsAdded(new int[] {rowCount - 1});
}
void removeRow() {
rowCount--;
fireRowsRemoved(new int[] {rowCount});
}
void addColumn() {
columnCount++;
columnModelObservable.fireColumnsAdded(new int[] {columnCount - 1});
}
void removeColumn() {
columnCount--;
columnModelObservable.fireColumnsRemoved(new int[] {columnCount});
}
@Override
public ITableColumnModelObservable getTableColumnModelObservable() {
return columnModelObservable;
}
@Override
public int getColumnCount() {
return columnCount;
}
@Override
public int getRowCount() {
return rowCount;
}
@Override
public ITableColumn getColumn(final int columnIndex) {
return new DefaultTableColumn("Column " + columnIndex, "columnTooltip: " + columnIndex);
}
@Override
public ITableCell getCell(final int rowIndex, final int columnIndex) {
if (Boolean.TRUE.equals(cellOption.getValue())) {
return new TableCell(
"Cell Opt(" + rowIndex + "/" + columnIndex + ")",
"Tooltip (" + rowIndex + "/" + columnIndex + ")");
}
return new TableCell("Cell (" + rowIndex + "/" + columnIndex + ")", "Tooltip (" + rowIndex + "/" + columnIndex + ")");
}
}
}