package com.iambookmaster.client.quick;
import java.util.ArrayList;
import java.util.HashMap;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.iambookmaster.client.Images;
import com.iambookmaster.client.Styles;
import com.iambookmaster.client.beans.Picture;
import com.iambookmaster.client.beans.Sound;
import com.iambookmaster.client.common.ScrollContainer;
import com.iambookmaster.client.locale.AppLocale;
import com.iambookmaster.client.model.ContentListener;
import com.iambookmaster.client.model.Model;
public class PictiresList extends ScrollContainer {
private VerticalPanel mainPanel;
private Model model;
private ContentListener objectListener;
private PictureWidget selected;
private boolean activationNeed=true;
public void activate() {
if (activationNeed) {
activationNeed = false;
resetHeight();
}
}
public void activateLater() {
activationNeed = true;
}
public PictiresList(Model model) {
mainPanel = new VerticalPanel();
mainPanel.setSize("100%", "100%");
mainPanel.setSpacing(3);
addStyleName("objects_list");
setScrollWidget(mainPanel);
this.model = model;
objectListener = new ContentListener() {
public void refreshAll() {
reloadTree();
}
public void addNew(Picture picture) {
PictureWidget widget = new PictureWidget(picture);
int pos = getWidgetCount();
mainPanel.insert(widget,pos-1);
items.put(widget.object, widget);
mainPanel.setCellHeight(widget,"1%");
}
public void addNew(Sound sound) {
}
public void remove(Picture picture) {
PictureWidget widget = items.get(picture);
if (widget != null) {
mainPanel.remove(widget);
}
}
public void remove(Sound sound) {
}
public void update(Picture picture) {
PictureWidget widget = items.get(picture);
if (widget != null) {
widget.apply(picture);
}
}
public void update(Sound sound) {
}
public void select(Sound sound) {
}
public void select(Picture picture) {
PictureWidget widget = items.get(picture);
if (widget != null) {
if (selected != widget) {
if (selected != null) {
selected.highlight(false);
}
}
widget.highlight(true);
}
}
public void unselect(Sound sound) {
}
public void unselect(Picture picture) {
PictureWidget widget = items.get(picture);
if (widget != null) {
widget.highlight(false);
selected = null;
}
}
public void showInfo(Picture picture) {
}
public void showInfo(Sound sound) {
}
};
model.addContentListener(objectListener);
reloadTree();
}
private void removeObject(Picture bean, PictureWidget widget) {
if (Window.confirm(AppLocale.getAppConstants().quickConfirmRemoveImage())) {
model.removePicture(bean);
}
}
private HashMap<Picture, PictureWidget> items;
private void reloadTree() {
items = new HashMap<Picture, PictureWidget>();
ArrayList<Picture> beans = model.getPictures();
mainPanel.clear();
int l = beans.size();
for (int i = 0; i < l; i++) {
PictureWidget widget = new PictureWidget(beans.get(i));
mainPanel.add(widget);
items.put(widget.object, widget);
mainPanel.setCellHeight(widget,"1%");
}
HTML html = new HTML(" ");
html.setStyleName("location_list_filler");
mainPanel.add(html);
mainPanel.setCellHeight(html,"99%");
}
public class PictureWidget extends HorizontalPanel {
private Label name;
private Image remove;
private Picture object;
private Image findInfo;
public PictureWidget(Picture obj) {
setSize("100%", "100%");
setSpacing(3);
name = new Label();
name.setStyleName(Styles.CLICKABLE);
name.setWordWrap(false);
ClickHandler clickHandler = new ClickHandler() {
public void onClick(ClickEvent event) {
if (event.getSource()==remove) {
removeObject(object,PictureWidget.this);
} else if (event.getSource()==findInfo) {
model.showInfo(object);
} else {
select();
}
}
};
name.addClickHandler(clickHandler);
add(name);
setCellWidth(name, "1%");
findInfo = new Image(Images.PREVIEW);
findInfo.addClickHandler(clickHandler);
findInfo.setTitle(AppLocale.getAppConstants().quicShowInfo());
add(findInfo);
setCellWidth(findInfo, "1%");
remove = new Image(Images.REMOVE);
remove.addClickHandler(clickHandler);
remove.setTitle(AppLocale.getAppConstants().quickRemoveImage());
add(remove);
setCellWidth(remove, "99%");
apply(obj);
highlight(false);
}
private void apply(Picture object) {
this.object = object;
name.setText(object.getName());
}
private void highlight(boolean highlight) {
if (highlight) {
setStyleName("location_list_item_selected");
} else {
setStyleName("location_list_item");
}
}
private void select() {
if (selected != this) {
if (selected != null) {
selected.unselect();
}
selected = this;
highlight(true);
model.selectPicture(object, objectListener);
}
}
private void unselect() {
if (selected==this) {
selected = null;
}
highlight(false);
model.unselectPicture(object, objectListener);
}
}
public Picture getSelected() {
return selected==null ? null : selected.object;
}
}