@ -1,9 +1,11 @@
package org.gcube.portlets.user.reportgenerator.client.targets ;
import java.util.Date ;
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.dom.client.Style.Unit ;
import com.google.gwt.event.dom.client.KeyUpEvent ;
import com.google.gwt.event.dom.client.KeyUpHandler ;
@ -11,119 +13,104 @@ 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.TextArea ;
import com.google.gwt.user.client.ui.Widget ;
/ * *
* < code > BasicTextArea < / code >
* < code > BasicTextArea < / code > is a resizable textArea
*
* @author Massimiliano Assante , ISTI - CNR - massimiliano . assante @isti.cnr.it
* @version July 201 1 ( 3.0)
* @version July 201 3
* /
public class BasicTextArea extends ReportTextArea {
private RichTextArea textArea = new RichTextArea ( ) ;
//private TextArea textArea = new TextArea();
private VerticalPanel myPanel ;
int currHeight = 0 ;
public class BasicTextArea extends TextArea {
private String myId ;
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
myId = Long . toString ( new Date ( ) . getTime ( ) ) ;
this . setPixelSize ( width , height ) ;
textArea . addMouseOutHandler ( new MouseOutHandler ( ) {
this . addMouseOutHandler ( new MouseOutHandler ( ) {
public void onMouseOut ( MouseOutEvent event ) {
presenter . storeChangeInSession ( ( Widget ) event . getSource ( ) ) ;
}
} ) ;
textArea . setStyleName ( "report-ui-component" ) ;
this . setStyleName ( "report-ui-component" ) ;
this . addStyleName ( "d4sFrame" ) ;
this . getElement ( ) . setId ( myId ) ;
switch ( type ) {
case BODY_NOT_FORMATTED :
textArea . addStyleName ( "simpleText" ) ;
myPanel . setTitle ( "Simple text" ) ;
this . addStyleName ( "simpleText" ) ;
break ;
default :
break ;
}
myPanel . add ( textArea ) ;
myPanel . setVerticalAlignment ( HasVerticalAlignment . ALIGN_BOTTOM ) ;
myPanel . setPixelSize ( width , height ) ;
textArea . addMouseOutHandler ( new MouseOutHandler ( ) {
this . addMouseOutHandler ( new MouseOutHandler ( ) {
public void onMouseOut ( MouseOutEvent event ) {
presenter . storeChangeInSession ( ( Widget ) event . getSource ( ) ) ;
}
} ) ;
textArea . addKeyUpHandler ( new KeyUpHandler ( ) {
this . 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 ;
//presenter.resizeTemplateComponentInModel(myInstance, width, newHeight);
}
} ) ;
textArea . addMouseDownHandler ( new MouseDownHandler ( ) {
this . 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 ;
autoSizeIt ( myId , height ) ;
}
} ) ;
}
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
* This method actually makes resizable the textArea
* @param id
* /
@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 ;
public static native void autoSizeIt ( String id , int height ) / * - {
var text = $doc . getElementById ( id ) ;
var observe ;
if ( window . attachEvent ) {
observe = function ( element , event , handler ) {
element . attachEvent ( ' on ' + event , handler ) ;
} ;
}
}
else {
observe = function ( element , event , handler ) {
element . addEventListener ( event , handler , false ) ;
} ;
}
function resize ( ) {
text . style . height = height + ' px ' ;
text . style . height = text . scrollHeight + ' px ' ;
}
function delayedResize ( ) {
window . setTimeout ( resize , 0 ) ;
}
observe ( text , ' change ' , resize ) ;
observe ( text , ' cut ' , delayedResize ) ;
observe ( text , ' paste ' , delayedResize ) ;
observe ( text , ' drop ' , delayedResize ) ;
observe ( text , ' keydown ' , delayedResize ) ;
text . focus ( ) ;
text . select ( ) ;
resize ( ) ;
} - * / ;
}