package com.example.listmaker.app.client.ui.web.content;
import com.example.listmaker.app.client.App;
import com.example.listmaker.app.client.activity.ManageNotesActivity;
import com.example.listmaker.app.client.domain.Note;
import com.example.listmaker.app.client.domain.NoteList;
import com.example.listmaker.app.client.place.HomePlace;
import com.example.listmaker.app.client.ui.widget.NotesTable;
import com.example.listmaker.common.client.ui.web.AppStyles;
import com.example.listmaker.common.client.ui.web.ViewImpl;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.SpanElement;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.query.client.GQuery;
import com.google.gwt.user.client.ui.*;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.turbomanage.gwt.client.ui.widget.HasSelectedValue;
import com.turbomanage.gwt.client.ui.widget.MessageWidget;
import com.turbomanage.gwt.client.ui.widget.SelectOneListBox;
import com.turbomanage.gwt.client.ui.widget.SelectOneListBox.OptionFormatter;
import java.util.Set;
public class ManageNotesViewImpl extends ViewImpl<ManageNotesActivity> implements ManageNotesActivity.ManageNoteActivityView
{
// Only one widget to listen for all events
// Every Widget must be in hierarchy up to that returned by asWidget()
//All Notes View
private FlowPanel box;
private FlowPanel actionBar;
private FlowPanel buttonSet;
private Anchor selectAll;
private Anchor selectNone;
private Button deleteButton;
private FlowPanel loadingPanel;
private NotesTable notesTable;
private SelectOneListBox<NoteList> selectNoteList;
private GQuery animation;
public ManageNotesViewImpl()
{
init();
}
@Override
public void init()
{
super.init();
box = new FlowPanel();
actionBar = new FlowPanel();
notesTable = new NotesTable();
buttonSet = new FlowPanel();
selectNoteList = new SelectOneListBox<NoteList>(new OptionFormatter<NoteList>()
{
@Override
public String getLabel(NoteList option)
{
return option.name;
}
@Override
public String getValue(NoteList option)
{
return String.valueOf(option.id);
}
});
selectNoteList.addStyleName(AppStyles.SELECT_NOTE_LIST);
selectNoteList.addValueChangeHandler(valueChangedHandler);
selectAll = new Anchor("All");
selectAll.addClickHandler(selectAllClickHandler);
selectNone = new Anchor("None");
selectNone.addClickHandler(selectNoneClickHandler);
deleteButton = new Button("Delete");
deleteButton.addStyleName(AppStyles.ACTION_BUTTON);
deleteButton.addClickHandler(deleteClickHandler);
loadingPanel = new FlowPanel();
box.getElement().setId(AppStyles.ID_MANAGE_NOTES);
buildActionBar();
box.add(actionBar);
notesTable.getElement().setId(AppStyles.ID_NOTES_TABLE);
notesTable.getSelectionModel().addSelectionChangeHandler(selectionHandler);
box.add(notesTable);
loadingPanel.addStyleName(AppStyles.LOADING_PANEL);
Image loading = App.getAppImages().spin().createImage();
loadingPanel.add(loading);
loadingPanel.setVisible(false);
box.add(loadingPanel);
viewPanel.add(new MessageWidget(App.getEventBus()).asWidget());
viewPanel.add(box);
show();
}
private void buildActionBar()
{
disableBulkActions();
actionBar.addStyleName(AppStyles.ACTION_BAR);
SpanElement listFilterLabel = Document.get().createSpanElement();
listFilterLabel.setInnerText("Show");
buttonSet.getElement().appendChild(listFilterLabel);
buttonSet.add(selectNoteList);
SpanElement selectLabel = Document.get().createSpanElement();
selectLabel.setInnerText("Select:");
buttonSet.getElement().appendChild(selectLabel);
buttonSet.add(selectAll);
buttonSet.add(selectNone);
buttonSet.add(deleteButton);
// buttonSet.add(showHistory);
actionBar.add(buttonSet);
}
@Override
public void setActivity(ManageNotesActivity presenter) {
super.setActivity(presenter);
notesTable.setListener(presenter);
}
@Override
public Widget asWidget()
{
return viewPanel;
}
@Override
public void hide() {
notesTable.setVisible(false);
actionBar.setVisible(false);
}
@Override
public void show() {
notesTable.getListDataProvider().refresh();
notesTable.setVisible(true);
actionBar.setVisible(true);
}
@Override
public boolean isShowing() {
return notesTable.isVisible();
}
@Override
public void startProcessing()
{
this.loadingPanel.setVisible(true);
hide();
}
@Override
public void stopProcessing()
{
this.loadingPanel.setVisible(false);
show();
}
@Override
public void disableBulkActions()
{
deleteButton.setEnabled(false);
}
@Override
public void enableBulkActions()
{
deleteButton.setEnabled(true);
}
@Override
public void reset()
{
notesTable.selectNone();
}
/**
* Handlers
*/
@Override
public HasSelectedValue<NoteList> getNoteListFilter()
{
return selectNoteList;
}
private ClickHandler selectAllClickHandler = new ClickHandler() {
@Override
public void onClick(ClickEvent clickEvent) {
notesTable.selectAll();
}
};
private ClickHandler selectNoneClickHandler = new ClickHandler() {
@Override
public void onClick(ClickEvent clickEvent) {
reset();
}
};
private ClickHandler deleteClickHandler = new ClickHandler() {
@Override
public void onClick(ClickEvent clickEvent) {
getActivity().deleteSelectedNotes();
}
};
private ValueChangeHandler<NoteList> valueChangedHandler = new ValueChangeHandler<NoteList>() {
@Override
public void onValueChange(ValueChangeEvent<NoteList> event) {
App.getClientFactory().getPlaceController().goTo(new HomePlace(String.valueOf(event.getValue().id)));
}
};
private SelectionChangeEvent.Handler selectionHandler = new SelectionChangeEvent.Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent selectionChangeEvent) {
Set<Note> set = notesTable.getSelectionModel().getSelectedSet();
getActivity().checkBulkActions(set);
}
};
public NotesTable getNotesTable() {
return notesTable;
}
}