/*
* Copyright 2011 Vancouver Ywebb Consulting Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package ywb.c.page;
import java.util.ArrayList;
import org.adamtacy.client.ui.effects.events.EffectCompletedEvent;
import org.adamtacy.client.ui.effects.events.EffectCompletedHandler;
import org.adamtacy.client.ui.effects.impl.Fade;
import org.adamtacy.client.ui.effects.impl.NShow;
import ywb.c.Globals;
import ywb.c.api.API.Response;
import ywb.c.di.Context;
import ywb.c.model.Key;
import ywb.c.model.Photo;
import ywb.c.model.PhotoMap;
import ywb.c.ui.OverlayPopup;
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.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
public class SearchImageWidget extends Composite {
private VerticalPanel mainPanel = new VerticalPanel();
private FlowPanel imagePanel = new FlowPanel();
private Context ctx;
final ArrayList<Photo> photos = new ArrayList<Photo>();
public SearchImageWidget(Key searchKey, final int maxRows, int numberPages, Context ctx_) {
initWidget(mainPanel);
this.ctx = ctx_;
ScrollPanel scrollPanel = new ScrollPanel(imagePanel);
scrollPanel.setSize(Globals.WRAPPER_WIDTH + "px", Globals.WRAPPER_HEIGHT + "px");
// scrollPanel.getElement().getStyle().setProperty("overflowX", "hidden");
mainPanel.add(scrollPanel);
ctx.getPhotoDao().getPhotos(searchKey, numberPages, new Response<PhotoMap>() {
@Override
public void read(PhotoMap data) {
photos.clear();
for (String id : data.keySet()) {
final Photo p = data.get(id);
photos.add(p);
// // show vertical images only
// if (p.getThumbHeight() < 130 || p.getThumbWidth() > 120) {
// continue;
// }
Image img = new Image(p.getThumbUrl());
img.setStyleName("yThumb");
img.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
showOverlay(p);
}
});
imagePanel.add(img);
}
}
});
}
void showOverlay(final Photo p) {
final OverlayPopup popup = new OverlayPopup();
final FlowPanel wrapper = new FlowPanel();
wrapper.setStyleName("yPhotoWrapper");
// HTML btnPlay = new HTML("Play");
initBigImage(p, wrapper, popup);
// HorizontalPanel playPanel = new HorizontalPanel();
// final Timer t = new Timer() {
// public void run() {
// System.out.println("before click");
// invokeClick(img, p, wrapper, popup);
// }
// };
//
// btnPlay.addClickHandler(new ClickHandler() {
// @Override
// public void onClick(ClickEvent event) {
// System.out.println("btnPlay click");
// t.scheduleRepeating(2000);
// }
// });
//
//
// HTML btnStop = new HTML("Stop");
// btnStop.addClickHandler(new ClickHandler() {
// @Override
// public void onClick(ClickEvent event) {
// t.cancel();
// }
// });
// playPanel.add(btnPlay);
// playPanel.add(wrapper);
// playPanel.add(new HTML("Stop"));
popup.setWidget(wrapper);
popup.show();
}
void setPopupPosition(Photo p, OverlayPopup popup) {
int w = p.getWidth() > 1024 ? 1024 : p.getWidth();
int h = p.getHeight() > 550 ? 550 : p.getHeight();
int left = (Window.getClientWidth() - w) >> 1;
int top = (Window.getClientHeight() - h) >> 1;
popup.setPopupPosition(Math.max(Window.getScrollLeft() + left, 0), Math.max(Window.getScrollTop() + top, 0));
}
Image initBigImage(final Photo p, final FlowPanel wrapper, final OverlayPopup popup) {
setPopupPosition(p, popup);
final Image urlImg = new Image(p.getUrl());
urlImg.getElement().getStyle().setOpacity(0);
// VerticalPanel fp = new VerticalPanel();
// fp.setStyleName("yImageHolder");
// fp.add(urlImg);
// Anchor a = new Anchor(p.getOriginalContextUrl());
// a.setTarget("_blank");
// a.setHref(p.getOriginalContextUrl());
// fp.add(a);
wrapper.add(urlImg);
wrapper.add(new HTML(p.getOriginalContextUrl()));
NShow show = new NShow(urlImg.getElement());
show.setDuration(0.3);
show.play();
// urlImg.addClickHandler(new ClickHandler() {
// @Override
// public void onClick(ClickEvent event) {
// invokeClick(urlImg, p, wrapper, popup);
// }
// });
return urlImg;
}
void invokeClick(final Image urlImg, final Photo p, final FlowPanel wrapper, final OverlayPopup popup) {
Fade fade = new Fade(urlImg.getElement());
fade.setDuration(0.3);
fade.addEffectCompletedHandler(new EffectCompletedHandler() {
@Override
public void onEffectCompleted(EffectCompletedEvent event) {
// urlImg.removeFromParent();
wrapper.clear();
int inx = photos.indexOf(p);
inx++;
if (inx >= photos.size()) {
inx = 0;
}
initBigImage(photos.get(inx), wrapper, popup);
}
});
fade.play();
}
class Table {
int sum;
int row = 0;
void add(Photo p) {
// sum += p.getThumbWidth();
// sum += 10; // padding
// double d = (double) sum / (double) 640;
// int i = (int) Math.round(d);
}
int getCurrentRow() {
double d = (double) sum / (double) 640;
int i = (int) Math.round(d);
// System.out.println("sum=" + sum + ", i=" + i + ", d=" + d + ", " + p.getThumbUrl());
return i;
}
}
}