package org.eclipse.swt.widgets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Parent;
import javafx.scene.control.TableView;
import javafx.scene.control.TableView.TableViewSelectionModel;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.internal.Util;
public class Table extends Composite {
private TableView<TableItem> view;
private ObservableList<TableItem> list;
private List<TableColumn> columns = new ArrayList<TableColumn>();
public Table(Composite parent, int style) {
super(parent, style);
}
@Override
protected void internal_attachControl(Control c) {
// TODO Auto-generated method stub
super.internal_attachControl(c);
}
@Override
public Parent internal_getNativeObject() {
return view;
}
@Override
protected double internal_getHeight() {
return view.getHeight();
}
@Override
protected double internal_getPrefHeight() {
return view.prefHeight(javafx.scene.control.Control.USE_COMPUTED_SIZE);
}
@Override
protected double internal_getPrefWidth() {
return view.prefWidth(javafx.scene.control.Control.USE_COMPUTED_SIZE);
}
@Override
protected double internal_getWidth() {
return view.getHeight();
}
public void internal_itemAdded(TableItem item) {
list.add(item);
}
public void internal_columnAdded(TableColumn column) {
columns.add(column);
view.getColumns().add(column.internal_getNativeObject());
}
@Override
protected void createWidget() {
this.list = FXCollections.observableArrayList();
this.view = new TableView<TableItem>(list);
}
public void clear(int index) {
// TODO Not implemented
Util.logNotImplemented();
}
public void clear(int start, int end) {
// TODO Not implemented
Util.logNotImplemented();
}
public void clear(int[] indices) {
// TODO Not implemented
Util.logNotImplemented();
}
public void clearAll() {
// TODO Not implemented
Util.logNotImplemented();
}
public void deselect(int index) {
checkWidget();
view.getSelectionModel().clearSelection(index);
}
public void deselect(int start, int end) {
checkWidget();
TableViewSelectionModel<TableItem> model = view.getSelectionModel();
for (; start <= end; start++) {
model.clearSelection(start);
}
}
public void deselect(int[] indices) {
checkWidget();
TableViewSelectionModel<TableItem> model = view.getSelectionModel();
for (int idx : indices) {
model.clearSelection(idx);
}
}
public void deselectAll() {
checkWidget();
view.getSelectionModel().clearSelection();
}
public TableColumn getColumn(int index) {
checkWidget();
if (!(0 <= index && index < getColumnCount())) {
error(SWT.ERROR_INVALID_RANGE);
}
return columns.get(index);
}
public int getColumnCount() {
return columns.size();
}
public int[] getColumnOrder() {
// TODO Not implemented
Util.logNotImplemented();
return null;
}
public TableColumn[] getColumns() {
checkWidget();
return columns.toArray(new TableColumn[0]);
}
public int getGridLineWidth() {
// TODO Not implemented
Util.logNotImplemented();
return 0;
}
public int getHeaderHeight() {
// TODO Not implemented
Util.logNotImplemented();
return 0;
}
public boolean getHeaderVisible() {
// TODO Not implemented
Util.logNotImplemented();
return true;
}
public TableItem getItem(int index) {
if (!(0 <= index && index < getItemCount())) {
error(SWT.ERROR_INVALID_RANGE);
}
return list.get(index);
}
public TableItem getItem(Point point) {
// TODO Not implemented
Util.logNotImplemented();
return null;
}
public int getItemCount() {
checkWidget();
return list.size();
}
public int getItemHeight() {
// TODO Not implemented
Util.logNotImplemented();
return 0;
}
public TableItem[] getItems() {
checkWidget();
return list.toArray(new TableItem[0]);
}
public boolean getLinesVisible() {
// TODO Not implemented
Util.logNotImplemented();
return true;
}
public TableItem[] getSelection() {
checkWidget();
return view.getSelectionModel().getSelectedItems().toArray(new TableItem[0]);
}
public int getSelectionCount() {
checkWidget();
return view.getSelectionModel().getSelectedIndices().size();
}
public int getSelectionIndex() {
checkWidget();
return view.getSelectionModel().getSelectedIndex();
}
public int[] getSelectionIndices() {
checkWidget();
ObservableList<Integer> l = view.getSelectionModel().getSelectedIndices();
int[] rv = new int[l.size()];
int j = 0;
for( Integer i : l ) {
rv[j++] = i.intValue();
}
return rv;
}
public TableColumn getSortColumn() {
// TODO Not implemented
Util.logNotImplemented();
return null;
}
public int getSortDirection() {
// TODO Not implemented
Util.logNotImplemented();
return 0;
}
public int getTopIndex() {
// TODO Not implemented
Util.logNotImplemented();
return 0;
}
public int indexOf(TableColumn column) {
checkWidget();
return columns.indexOf(column);
}
public int indexOf(TableItem item) {
checkWidget();
return list.indexOf(item);
}
public boolean isSelected(int index) {
checkWidget();
return view.getSelectionModel().isSelected(index);
}
public void remove(int index) {
checkWidget();
list.remove(index);
}
public void remove(int start, int end) {
checkWidget();
list.remove(start, end);
}
public void remove(int[] indices) {
checkWidget();
Util.removeListIndices(list, indices);
}
public void removeAll() {
checkWidget();
list.clear();
}
public void removeSelectionListener(SelectionListener listener) {
// TODO Not implemented
Util.logNotImplemented();
}
public void select(int index) {
checkWidget();
view.getSelectionModel().select(index);
}
public void select(int start, int end) {
checkWidget();
view.getSelectionModel().selectRange(start, end);
}
public void select(int[] indices) {
checkWidget();
if( indices.length == 0 ) {
view.getSelectionModel().clearSelection();
} else if( indices.length == 1 ) {
view.getSelectionModel().selectIndices(indices[0]);
} else {
int idx = indices[0];
int[] rest = new int[indices.length-1];
System.arraycopy(indices, 1, rest, 0, indices.length-1);
view.getSelectionModel().selectIndices(idx,rest);
}
}
public void selectAll() {
checkWidget();
view.getSelectionModel().clearSelection();
}
public void setColumnOrder(int[] order) {
// TODO Not implemented
Util.logNotImplemented();
}
public void setHeaderVisible(boolean show) {
// TODO Not implemented
Util.logNotImplemented();
}
public void setItemCount(int count) {
// TODO Not implemented
Util.logNotImplemented();
}
public void setLinesVisible(boolean show) {
// TODO Not implemented
Util.logNotImplemented();
}
public void setSelection(int index) {
checkWidget();
view.getSelectionModel().clearAndSelect(index);
view.getFocusModel().focus(index);
}
public void setSelection(int start, int end) {
checkWidget();
view.getSelectionModel().clearSelection();
select(start, end);
view.getFocusModel().focus(end);
}
public void setSelection(int[] indices) {
checkWidget();
view.getSelectionModel().clearSelection();
if( indices.length > 0 ) {
int[] sorted = new int[indices.length];
System.arraycopy(indices, 0, sorted, 0, indices.length);
Arrays.sort(sorted);
view.getFocusModel().focus(sorted[sorted.length-1]);
}
}
public void setSelection(TableItem item) {
checkWidget();
view.getSelectionModel().clearSelection();
view.getSelectionModel().select(item);
view.getFocusModel().focus(view.getSelectionModel().getSelectedIndex());
}
public void setSelection(TableItem[] items) {
checkWidget();
view.getSelectionModel().clearSelection();
for( TableItem t : items ) {
view.getSelectionModel().select(t);
}
view.getFocusModel().focus(view.getSelectionModel().getSelectedIndex());
}
public void setSortColumn(TableColumn column) {
// TODO Not implemented
Util.logNotImplemented();
}
public void setSortDirection(int direction) {
// TODO Not implemented
Util.logNotImplemented();
}
public void setTopIndex(int index) {
// TODO Not implemented
Util.logNotImplemented();
}
public void showColumn(TableColumn column) {
// TODO Not implemented
Util.logNotImplemented();
}
public void showItem(TableItem item) {
// TODO Not implemented
Util.logNotImplemented();
}
public void showSelection() {
// TODO Not implemented
Util.logNotImplemented();
}
}