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.dom.client.Style.Unit; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.event.dom.client.MouseDownEvent; import com.google.gwt.event.dom.client.MouseDownHandler; 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.RichTextArea; 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 RichTextArea textArea = new RichTextArea(); //private TextArea textArea = new TextArea(); private VerticalPanel myPanel; int currHeight = 0; public BasicTextArea(ComponentType type, final Presenter presenter, int left, int top, final int width, final int height, boolean hasComments, boolean showClose) { super(type, presenter, left, top, width, height, hasComments, showClose); currHeight = height; myPanel = getResizablePanel(); textArea.setPixelSize(width, height); textArea.getElement().getStyle().setMarginTop(-4, Unit.PX); //this is needed because the richtextarea has margin 8px and a not able to modify it via css textArea.addMouseOutHandler(new MouseOutHandler() { public void onMouseOut(MouseOutEvent event) { presenter.storeChangeInSession((Widget) event.getSource()); } }); textArea.setStyleName("report-ui-component"); switch (type) { case BODY_NOT_FORMATTED: textArea.addStyleName("simpleText"); myPanel.setTitle("Simple text"); 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(); div.setHTML(textArea.getHTML()); int newHeight = div.getOffsetHeight(); resizePanel(width, newHeight); presenter.resizeTemplateComponentInModel(myInstance, width, newHeight); currHeight = newHeight; } }); textArea.addMouseDownHandler(new MouseDownHandler() { public void onMouseDown(MouseDownEvent event) { HTML div = ReportGenerator.get().getDivHidden(); div.setHTML(textArea.getHTML()); int newHeight = div.getOffsetHeight(); resizePanel(width, newHeight); presenter.resizeTemplateComponentInModel(myInstance, width, newHeight); currHeight = newHeight; } }); } public String getText() { return textArea.getText(); } public void setText(String text) { textArea.setText(text); } public RichTextArea getRichTextArea() { return null; } /** * used to resize the panel * @param width w * @param height h */ @Override public void resizePanel(int width, int height) { if (height > 25) { mainPanel.setPixelSize(width, height); resizablePanel.setPixelSize(width, height); textArea.setPixelSize(width-4, height); currHeight = height; } } }