This repository has been archived on 2021-11-25. You can view files and clone it, but cannot push or open issues or pull requests.
vmereports-manager-portlet/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/D4sRichTextarea.java

228 lines
6.8 KiB
Java

package org.gcube.portlets.user.reportgenerator.client.targets;
import org.gcube.portlets.d4sreporting.common.client.ComponentType;
import org.gcube.portlets.user.reportgenerator.client.ReportGenerator;
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.event.dom.client.KeyDownHandler;
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.Event;
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.TextArea;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
/**
* <code> D4sRichTextArea </code> class is a template component that goes into the workspace
*
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
* @version October 2008 (0.2)
*/
public class D4sRichTextarea extends ReportTextArea {
/**
* the text area
*/
private RichTextArea area = new RichTextArea();
TextArea text = new TextArea();
/**
* a flag
*/
boolean firstClick = true;
int currHeight = 0;
VerticalPanel myPanel;
/**
*
*
*/
public D4sRichTextarea() {}
/**
*
* @param presenter .
* @param left left
* @param top top
* @param width .
* @param height .
* @param type .
*/
public D4sRichTextarea(ComponentType type, final Presenter presenter, int left, int top, int width, final int height, boolean hasComments) {
super(type, presenter, left, top, width, height, hasComments);
currHeight = height;
myPanel = getResizablePanel();
area.setPixelSize(width-6, height-2);
area.setStyleName("d4sRichTextArea");
switch (type) {
case TITLE:
area.addStyleName("");
break;
case HEADING_1:
area.addStyleName("");
break;
case HEADING_2:
area.addStyleName("");
break;
case HEADING_3:
area.addStyleName("");
break;
case BODY:
area.addStyleName("bodyArea");
break;
default:
break;
}
myPanel.add(area);
//repositionMyPanel(0, 15);
myPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_BOTTOM);
myPanel.setPixelSize(width, height-15);
setStyleName("d4sFrame");
area.addMouseDownHandler(new MouseDownHandler() {
public void onMouseDown(MouseDownEvent event) {
if (event.getNativeButton() == Event.BUTTON_RIGHT) {
event.preventDefault();
event.stopPropagation();
MessageBox.alert("Warning","Please, use CTRL+V (CMD+V) for pasting into this area", null);
}
if (firstClick) {
presenter.enableTextToolBar(area);
presenter.enableBiblioEntry(area);
firstClick = false;
ReportGenerator.get().getDivHidden().setPixelSize(area.getOffsetWidth(), -1);
}
HTML div = ReportGenerator.get().getDivHidden();
div.setHTML(area.getHTML());
int newHeight = div.getOffsetHeight()+20 ;
if (newHeight > height-10 && newHeight != currHeight) {
presenter.shiftComponentsByTextArea(myInstance.top, newHeight - currHeight);
resizePanel(myPanel.getOffsetWidth(), div.getOffsetHeight());
//Window.alert("myInstance.top: " + myInstance.top);
presenter.resizeTemplateComponentInModel(myInstance, myPanel.getOffsetWidth(), newHeight);
}
}
});
area.addMouseOutHandler(new MouseOutHandler() {
public void onMouseOut(MouseOutEvent event) {
firstClick = true;
presenter.storeChangeInSession((Widget) event.getSource());
}
});
//TODO: aggiorna
// area.addKeyDownHandler(new KeyDownHandler() {
// public void onKeyDown(KeyDownEvent event) {
//// if (event.isAnyModifierKeyDown() && event.getNativeKeyCode() == 86) { //event.getNativeKeyCode() == 86 is the V (to avoid ctrl V or cmd V)
//// MessageBox.show(new MessageBoxConfig() {
//// {
//// setTitle("Paste operation");
//// setMsg("Please enter your text here (PLAIN)");
//// setWidth(500);
//// setButtons(MessageBox.OKCANCEL);
//// setMultiline(true);
//// setCallback(new MessageBox.PromptCallback() {
//// public void execute(String btnID, String text) {
//// if (btnID.compareTo("ok") == 0) {
//// area.setText(text);
////
//// //resize if needed
//// HTML div = ReportGenerator.get().getDivHidden();
//// //GWT.log("element.getHTML():\n" + area.getHTML(), null);
//// div.setHTML(area.getHTML());
//// int newHeight = div.getOffsetHeight()+20 ;
//// if (newHeight > height-10 && newHeight != currHeight) {
//// resizePanel(myPanel.getOffsetWidth(), div.getOffsetHeight());
//// }
//// }
////
//// }
//// });
//// }
//// });
// event.stopPropagation();
// event.preventDefault();
// }
//
// }
// });
area.addKeyUpHandler(new KeyUpHandler() {
public void onKeyUp(KeyUpEvent event) {
HTML div = ReportGenerator.get().getDivHidden();
div.setHTML(area.getHTML());
int newHeight = div.getOffsetHeight()+20 ;
if (newHeight > height-10 && newHeight != currHeight) {
presenter.shiftComponentsByTextArea(myInstance.top, newHeight - currHeight);
resizePanel(myPanel.getOffsetWidth(), div.getOffsetHeight());
//Window.alert("myInstance.top: " + myInstance.top);
presenter.resizeTemplateComponentInModel(myInstance, myPanel.getOffsetWidth(), newHeight);
}
}
});
}
/**
* used to resize the panel
* @param width w
* @param height h
*/
@Override
public void resizePanel(int width, int height) {
if (height > 15 && width > 15) {
mainPanel.setPixelSize(width, height+20);
resizablePanel.setPixelSize(width, height+20);
mainPanel.setWidgetPosition(topPanel, width-30 , 0);
area.setPixelSize(width-4, height+20);
currHeight = height + 20;
}
}
/**
*
* @return .
*/
public String getHTML() {
return area.getHTML();
}
/**
* @param html the html
*/
public void setHTML(String html) {
area.setHTML(html);
}
/**
*
* @return .
*/
public RichTextArea getArea() {
return area;
}
/**
*
* @param firstClick .
*/
public void setFirstClick(boolean firstClick) {
this.firstClick = firstClick;
}
}