SelectableItem.java
package org.silverpeas.mobile.client.components.base.widgets;
import com.google.gwt.event.dom.client.TouchEndEvent;
import com.google.gwt.event.dom.client.TouchMoveEvent;
import com.google.gwt.event.dom.client.TouchStartEvent;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import org.silverpeas.mobile.client.components.base.PageContent;
public class SelectableItem extends Composite {
private PageContent parent;
private HTMLPanel container;
private boolean onMove = false;
private boolean unSelected = false;
private boolean multiSelection = true;
private Timer timerSelection = null;
private Timer timerScroll = null;
public boolean isInSelectionMode() {
if (parent != null) {
return parent.isSelectionMode();
}
return false;
}
public void setMultiSelection(boolean multiSelection) {
this.multiSelection = multiSelection;
}
public void setParent(PageContent page) {
this.parent = page;
}
public void setContainer(HTMLPanel container) {
this.container = container;
}
public boolean isSelected() {
return container.getElement().hasClassName("selected");
}
protected void startTouch(TouchStartEvent event, boolean selectable) {
if (!isInSelectionMode() && selectable) {
timerSelection = new Timer() {
@Override
public void run() {
parent.setSelectionMode(true);
container.getElement().addClassName("selected");
parent.changeSelectionNumber(1);
}
};
timerSelection.schedule(400);
} else if (isInSelectionMode() && selectable) {
timerScroll = new Timer() {
@Override
public void run() {
if (!onMove) {
if (container.getElement().hasClassName("selected")) {
container.getElement().removeClassName("selected");
parent.changeSelectionNumber(-1);
unSelected = true;
} else {
if (multiSelection) {
container.getElement().addClassName("selected");
parent.changeSelectionNumber(1);
}
}
} else {
onMove = false;
}
}
};
timerScroll.schedule(100);
}
}
protected void moveTouch(TouchMoveEvent event) {
if (timerSelection != null) timerSelection.cancel();
if (timerScroll != null) timerScroll.cancel();
onMove = true;
}
protected void endTouch(TouchEndEvent event, boolean selectable, Command onClickAction) {
if (timerSelection != null) timerSelection.cancel();
if (!onMove) {
if (selectable) {
if (!isInSelectionMode() && !unSelected) {
onClickAction.execute();
}
} else {
onClickAction.execute();
}
} else {
onMove = false;
}
unSelected = false;
}
}