package com.akjava.gwt.lib.client.experimental; import com.akjava.gwt.lib.client.experimental.CellBaseEntryPoint.PreviewControler; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.VerticalPanel; public class PreviewHtmlPanelControler<T> implements PreviewControler<T>{ private PopupPanel popup; private HTML previewHTML; int w; int h; private int marginTop=48; private VerticalPanel mainPanel; private VerticalPanel containerPanel; public PreviewHtmlPanelControler(int w,int h){ this.w=w; this.h=h; containerPanel = new VerticalPanel(); containerPanel.setWidth("100%"); } public PreviewHtmlPanelControler(){ this(230,800); } public void show(){ if(popup==null){ createPreviewPanel(); } moveToAroundRightTop(popup); popup.show(); } public void hide(){ if(popup!=null){ popup.hide(); } } public void setPreviewHtml(SafeHtml html){ previewHTML.setHTML(html); show(); } private void createPreviewPanel() { popup = new PopupPanel(); mainPanel = new VerticalPanel();//need on initial popup.add(mainPanel); previewHTML = new HTML(); previewHTML.setSize(w+"px", h+"px"); mainPanel.add(previewHTML); mainPanel.add(containerPanel); //popup.show(); //moveToAroundRightTop(popup); } public VerticalPanel getContainer() { return containerPanel; } private void moveToAroundRightTop(PopupPanel dialog){ int clientWidth=Window.getClientWidth(); int scrollTopPos=Window.getScrollTop(); int dw=dialog.getOffsetWidth(); //LogUtils.log(clientWidth+","+scrollTopPos+","+dw); if(dw==0){ //this is bug,some how first time return 0;maybe set html is async? dw=w+12; } dialog.setPopupPosition(clientWidth-dw, scrollTopPos+marginTop); } @Override public void setData(T data) { // TODO Auto-generated method stub } }