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; }-*/; }