package ru.yababay.SHIFA_CHELNY.index.client;
import java.util.HashMap;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.Frame;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Hidden;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.TabPanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.xml.client.Document;
import com.google.gwt.xml.client.Element;
import com.google.gwt.xml.client.Node;
import com.google.gwt.xml.client.NodeList;
import com.google.gwt.xml.client.XMLParser;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.Response;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
public abstract class Pattern extends Composite {
// interface TabsBinder extends UiBinder <HTMLPanel, Pattern>{}
interface TabsBinder extends UiBinder <HTMLPanel, Main>{}
@UiField DivElement tab0;
@UiField DivElement tab1;
@UiField DivElement tab2;
@UiField DivElement tab3;
@UiField DivElement tab4;
@UiField DivElement tab5;
@UiField DivElement tab6;
@UiField DivElement tab7;
@UiField DivElement tab8;
@UiField DivElement tab9;
private final TabsBinder tabsBinder = (TabsBinder)GWT.create(TabsBinder.class);
protected final TabPanel tabPanel = new TabPanel();
protected final HashMap <String, HTML> tabMap = new HashMap <String, HTML> ();
/**
*
* В методе onModuleLoad() лучше ничего не менять. Специфическое
* поведение следует размещать в doSpecific(). Он вызывается после
* того, как отработал UiBuilder, но до вставки html-фрагментов из
* tabs.html. Чтобы заменить загруженный из tabs.html фрагмент на
* виджет следует использовать методы setTabWidget_0() ... setTabWidget_9.
* Метод setSlot() предназначен для подготовки места, в которое будет
* вставлен фрагмент с соответствующим именем из tabs.html.
*
*/
public void onModuleLoad(){
tabsBinder.createAndBindUi((Main)this);
addDiv(tab0); addDiv(tab1); addDiv(tab2); addDiv(tab3); addDiv(tab4);
addDiv(tab5); addDiv(tab6); addDiv(tab7); addDiv(tab8); addDiv(tab9);
doSpecific();
tabPanel.selectTab(getDefaultTab());
HorizontalPanel hp = new HorizontalPanel();
VerticalPanel vp = new VerticalPanel();
HTML dummy = new HTML(" ");
dummy.setStyleName("headImg");
vp.add(dummy);
vp.setCellWidth(dummy, "1000px");
vp.setCellHeight(dummy, "100px");
vp.add(tabPanel);
HTML filler = new HTML(" ");
hp.add(filler);
hp.setCellWidth(filler, (Window.getClientWidth() - 1000)/2 + "px");
hp.add(vp);
RootPanel.get().add(hp);
RequestBuilder tabsBuilder = new RequestBuilder(RequestBuilder.GET, GWT.getModuleBaseURL() + "tabs.html?r=" + Math.random());
try{
tabsBuilder.sendRequest("", new RequestCallback(){
public void onResponseReceived(Request req, Response resp){
String rsp = resp.getText();
rsp = "<?xml version='1.0' encoding='UTF-8'?>" + rsp.substring(rsp.indexOf("<html"));
Document doc = XMLParser.parse(rsp);
NodeList nl = doc.getDocumentElement().getElementsByTagName("div");
for(int i = 0; i < nl.getLength(); i++)setSlice((Element)nl.item(i));
}
public void onError(Request req, Throwable thr){}
});
}
catch(RequestException ex){}
}
/* Наследуемые методы */
protected abstract void doSpecific();
protected void setSlot(SimplePanel sp, String name){
HTML html = new HTML(" ");
sp.add(html);
tabMap.put(name, html);
}
protected void setTabWidget_0(Widget w){setTabWidget(tab0, w);}
protected void setTabWidget_1(Widget w){setTabWidget(tab1, w);}
protected void setTabWidget_2(Widget w){setTabWidget(tab2, w);}
protected void setTabWidget_3(Widget w){setTabWidget(tab3, w);}
protected void setTabWidget_4(Widget w){setTabWidget(tab4, w);}
protected void setTabWidget_5(Widget w){setTabWidget(tab5, w);}
protected void setTabWidget_6(Widget w){setTabWidget(tab6, w);}
protected void setTabWidget_7(Widget w){setTabWidget(tab7, w);}
protected void setTabWidget_8(Widget w){setTabWidget(tab8, w);}
protected void setTabWidget_9(Widget w){setTabWidget(tab9, w);}
/* Вспомогательные методы */
private void setTabWidget(DivElement div, Widget w){
String id = div.getAttribute("name");
if(id == null || "".equals(id))return;
SimplePanel sp = (SimplePanel)tabMap.get(id).getParent();
sp.clear();
sp.add(w);
}
private void setSlice(Element el){
String id = el.getAttribute("name");
if(id == null || "".equals(id) || tabMap.get(id) == null)return;
HTML html = tabMap.get(id);
SimplePanel p = (SimplePanel)html.getParent();
p.clear();
HTML h = new HTML(el.toString());
p.add(h);
tabMap.put(id, html);
}
private final void addDiv(DivElement div){
if(div == null) return;
String id = div.getAttribute("name").trim();
if(id == null || "".equals(id))return;
HTML html = new HTML(div.getInnerHTML());
tabMap.put(id, html);
SimplePanel sp = new SimplePanel();
sp.add(html);
tabPanel.add(sp, id);
}
private final native int getDefaultTab()/*-{
if(window.top.defaultTab != undefined && window.top.defaultTab != null)return window.top.defaultTab;
return 0;
}-*/;
}