package com.example.listmaker.app.client.ui.widget;
import com.example.listmaker.app.client.App;
import com.example.listmaker.app.client.domain.Note;
import com.example.listmaker.common.client.ui.web.AppStyles;
import com.google.gwt.cell.client.Cell;
import com.google.gwt.cell.client.EditTextCell;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.cell.client.SafeHtmlCell;
import com.google.gwt.dom.client.BrowserEvents;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.CellPreviewEvent;
import com.google.gwt.view.client.DefaultSelectionEventManager;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.MultiSelectionModel;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class NotesTable extends Composite {
public interface CanEdit {
void updateNote(Note item);
}
private CellTable table = new CellTable();
private ListDataProvider<Note> dataProvider;
private MultiSelectionModel selectionModel;
private ArrayList<Note> notes;
private CanEdit presenter;
private int selectedRow;
private int selectedColumn;
private Column<Note, String> info = new Column<Note, String>(new EditTextCell()) {
@Override
public String getValue(Note item) {
return item.itemText;
}
};
private TextColumn<Note> list = new TextColumn<Note>() {
@Override
public String getValue(Note item) {
return item.listName;
}
};
SafeHtmlCell safeHtmlCell = new SafeHtmlCell() {
public Set<String> getConsumedEvents() {
HashSet<String> events = new HashSet<String>();
events.add(BrowserEvents.CLICK);
return events;
}
};
public NotesTable() {
selectionModel = new MultiSelectionModel<Note>();
table.setSelectionModel(selectionModel, DefaultSelectionEventManager.<Note> createDefaultManager());
info.setCellStyleNames(AppStyles.NOTE_TEXT);
list.setCellStyleNames(AppStyles.NOTE_LIST_NAME);
table.addColumn(info, "Note");
// table.addColumn(list, "List");
initWidget(table);
dataProvider = new ListDataProvider<Note>();
dataProvider.addDataDisplay(table);
table.addCellPreviewHandler(new CellPreviewEvent.Handler() {
@Override
public void onCellPreview(CellPreviewEvent event) {
if (BrowserEvents.CLICK.equalsIgnoreCase(event.getNativeEvent().getType())) {
selectedColumn = event.getColumn();
selectedRow = event.getIndex();
//used to prepare double click info
}
}
});
}
public void setListener(final CanEdit presenter) {
this.presenter = presenter;
info.setFieldUpdater(new FieldUpdater<Note, String>() {
@Override
public void update(int i, Note note, String s) {
if (!note.itemText.equals(s)) {
note.itemText = s;
presenter.updateNote(note);
}
}
});
}
public CellTable getTable() {
return table;
}
public ListDataProvider<Note> getListDataProvider() {
return dataProvider;
}
public MultiSelectionModel<Note> getSelectionModel() {
return selectionModel;
}
public void selectAll() {
for (Note note : dataProvider.getList()) {
selectionModel.setSelected(note, true);
}
}
public void selectNone() {
selectionModel.clear();
}
public void inputNotes(List<Note> notes) {
table.setVisibleRange(0, notes.size());
dataProvider.setList(notes);
dataProvider.refresh();
}
@Override
public Widget asWidget() {
return table;
}
}