package org.gcube.portlets.user.reportgenerator.client.targets; import org.gcube.portlets.d4sreporting.common.shared.ComponentType; import org.gcube.portlets.user.reportgenerator.client.ReportGenerator; import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.event.dom.client.MouseOutEvent; import com.google.gwt.event.dom.client.MouseOutHandler; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.TextArea; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; /** * BasicTextArea * * @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it * @version July 2011 (3.0) */ public class BasicTextArea extends ReportTextArea { private TextArea textArea = new TextArea(); private VerticalPanel myPanel; private Presenter presenter; int currHeight = 0; public BasicTextArea(ComponentType type, final Presenter presenter, int left, int top, int width, final int height, boolean hasComments) { super(type, presenter, left, top, width, height, hasComments); this.presenter = presenter; myPanel = getResizablePanel(); textArea.setPixelSize(width, height); textArea.addMouseOutHandler(new MouseOutHandler() { public void onMouseOut(MouseOutEvent event) { presenter.storeChangeInSession((Widget) event.getSource()); } }); textArea.setStyleName("report-ui-component"); switch (type) { case TITLE: textArea.addStyleName("title"); myPanel.setTitle("Title"); break; case HEADING_1: textArea.addStyleName("heading1"); myPanel.setTitle("Heading: Level 1"); break; case HEADING_2: textArea.addStyleName("heading2"); myPanel.setTitle("Heading Level 2"); break; case HEADING_3: textArea.addStyleName("heading3"); myPanel.setTitle("Heading: Level 3"); break; case HEADING_4: textArea.addStyleName("heading4"); myPanel.setTitle("Heading: Level 4"); break; case HEADING_5: textArea.addStyleName("heading5"); myPanel.setTitle("Heading: Level 5"); break; default: break; } myPanel.add(textArea); myPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_BOTTOM); myPanel.setPixelSize(width, height); textArea.addMouseOutHandler(new MouseOutHandler() { public void onMouseOut(MouseOutEvent event) { presenter.storeChangeInSession((Widget) event.getSource()); } }); textArea.addKeyUpHandler(new KeyUpHandler() { public void onKeyUp(KeyUpEvent event) { HTML div = ReportGenerator.get().getDivHidden(); GWT.log("element.getHTML():\n" + textArea.getText(), null); div.setHTML(textArea.getText()); int newHeight = div.getOffsetHeight(); if (newHeight > height-10 && newHeight != currHeight) { resizeMe(myPanel.getOffsetWidth(), newHeight); } } }); } /** * resize the panel * @param w * @param h */ private void resizeMe(int w, int h) { resizePanel(w, h); //Window.alert("myInstance.top: " + myInstance.top); presenter.resizeTemplateComponentInModel(this, myPanel.getOffsetWidth(), h+5); } public String getText() { return textArea.getText(); } public void setText(String text) { textArea.setText(text); } }