diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/Presenter/Presenter.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/Presenter/Presenter.java index f46adb2..86aaa71 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/Presenter/Presenter.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/Presenter/Presenter.java @@ -42,6 +42,7 @@ import org.gcube.portlets.user.reportgenerator.client.targets.Coords; import org.gcube.portlets.user.reportgenerator.client.targets.D4sRichTextarea; import org.gcube.portlets.user.reportgenerator.client.targets.GenericTable; import org.gcube.portlets.user.reportgenerator.client.targets.GroupingDelimiterArea; +import org.gcube.portlets.user.reportgenerator.client.targets.HeadingTextArea; import org.gcube.portlets.user.reportgenerator.client.targets.ReportTextArea; import org.gcube.portlets.user.reportgenerator.client.targets.TSArea; import org.gcube.portlets.user.reportgenerator.client.targets.TextTableImage; @@ -965,8 +966,20 @@ public class Presenter { case HEADING_3: case HEADING_4: case HEADING_5: - case BODY_NOT_FORMATTED: case TITLE: + if (component.isLocked()) { + HTML text = (HTML) component.getContent(); + wp.addComponentToLayout(text, component.isDoubleColLayout()); + } + else { + HeadingTextArea textArea = (HeadingTextArea) component.getContent(); + textArea.getMyInstance().setTop(uiY); + textArea.getMyInstance().setLeft(uiX); + wp.addComponentToLayout(textArea, component.isDoubleColLayout()); + } + + break; + case BODY_NOT_FORMATTED: if (component.isLocked()) { HTML text = (HTML) component.getContent(); wp.addComponentToLayout(text, component.isDoubleColLayout()); diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportGenerator.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportGenerator.java index 99ab58e..2b0481f 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportGenerator.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/ReportGenerator.java @@ -137,8 +137,8 @@ public class ReportGenerator implements EntryPoint { divHidden.setStyleName("d4sFrame"); divHidden.setWidth("750px"); divHidden.setStyleName("d4sRichTextArea"); - divHidden.addStyleName("setVisibilityOff"); divHidden.addStyleName("hasRichTextToolbar"); + divHidden.addStyleName("setVisibilityOff"); eastPanel.add(workSpacePanel); eastPanel.add(divHidden); diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateComponent.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateComponent.java index 05bcbfe..c1e8075 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateComponent.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/model/TemplateComponent.java @@ -23,6 +23,7 @@ import org.gcube.portlets.user.reportgenerator.client.targets.DropTSListener; import org.gcube.portlets.user.reportgenerator.client.targets.GenericTable; import org.gcube.portlets.user.reportgenerator.client.targets.GroupingDelimiterArea; import org.gcube.portlets.user.reportgenerator.client.targets.GroupingInnerArea; +import org.gcube.portlets.user.reportgenerator.client.targets.HeadingTextArea; import org.gcube.portlets.user.reportgenerator.client.targets.ReportTextArea; import org.gcube.portlets.user.reportgenerator.client.targets.TSArea; import org.gcube.portlets.user.reportgenerator.client.targets.TextTableImage; @@ -167,7 +168,7 @@ public class TemplateComponent { switch (sc.getType()) { case DYNA_IMAGE: - ClientImage dp = new ClientImage(sc, presenter, sc.getWidth(), sc.getHeight()); + ClientImage dp = new ClientImage(sc, presenter, sc.getWidth(), sc.getHeight(), showClose, owner); this.content = dp; break; case HEADING_1: @@ -175,8 +176,23 @@ public class TemplateComponent { case HEADING_3: case HEADING_4: case HEADING_5: - case BODY_NOT_FORMATTED: case TITLE: + if (sc.isLocked()) { + HTML area = new HTML(); + area.setStyleName("report-ui-component"); + area.addStyleName(getStyle(sc.getType())); + area.getElement().getStyle().setMarginTop(5, Unit.PX); + area.setPixelSize(width, 18); + area.setText((String) sc.getPossibleContent()); + this.content = area; + } + else { + HeadingTextArea bToAdd = new HeadingTextArea(sc.getType(), presenter, sc.getX(), sc.getY(), width, 25, getUserComments() != null, showClose); + bToAdd.setText((String) sc.getPossibleContent()); + this.content = bToAdd; + } + break; + case BODY_NOT_FORMATTED: if (sc.isLocked()) { HTML area = new HTML(); area.setStyleName("report-ui-component"); @@ -370,11 +386,18 @@ public class TemplateComponent { case HEADING_3: case HEADING_4: case HEADING_5: - case BODY_NOT_FORMATTED: case TITLE: if (this.isLocked()) { content = ((HTML) this.content).getText(); + } + else + content = ((HeadingTextArea) this.content).getText(); + break; + case BODY_NOT_FORMATTED: + if (this.isLocked()) { + content = ((HTML) this.content).getText(); + } else content = ((BasicTextArea) this.content).getText(); diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/BasicTextArea.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/BasicTextArea.java index 90f92ec..fe01a84 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/BasicTextArea.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/BasicTextArea.java @@ -24,10 +24,12 @@ import com.google.gwt.user.client.ui.Widget; */ public class BasicTextArea extends ReportTextArea { private RichTextArea textArea = new RichTextArea(); + //private TextArea textArea = new TextArea(); + private VerticalPanel myPanel; int currHeight = 0; - + @@ -46,31 +48,10 @@ public class BasicTextArea extends ReportTextArea { } }); 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; + case BODY_NOT_FORMATTED: textArea.addStyleName("simpleText"); myPanel.setTitle("Simple text"); @@ -93,26 +74,26 @@ public class BasicTextArea extends ReportTextArea { textArea.addKeyUpHandler(new KeyUpHandler() { public void onKeyUp(KeyUpEvent event) { HTML div = ReportGenerator.get().getDivHidden(); - div.setHTML(textArea.getHTML()); + div.setHTML(textArea.getHTML()); int newHeight = div.getOffsetHeight(); - if (newHeight > currHeight) { - resizePanel(width, newHeight); - presenter.resizeTemplateComponentInModel(myInstance, width, newHeight); - currHeight = newHeight; - } + + 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()); + div.setHTML(textArea.getHTML()); int newHeight = div.getOffsetHeight(); - if (newHeight > currHeight) { - resizePanel(width, newHeight); - presenter.resizeTemplateComponentInModel(myInstance, width, newHeight); - currHeight = newHeight; - } + + resizePanel(width, newHeight); + presenter.resizeTemplateComponentInModel(myInstance, width, newHeight); + currHeight = newHeight; + } }); @@ -120,8 +101,14 @@ public class BasicTextArea extends ReportTextArea { public String getText() { return textArea.getText(); } + public void setText(String text) { textArea.setText(text); + + } + + public RichTextArea getRichTextArea() { + return null; } /** diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientImage.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientImage.java index 2d5e918..05b5c2f 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientImage.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientImage.java @@ -19,6 +19,7 @@ import org.gcube.portlets.user.workspace.lighttree.client.load.WorkspaceLightTre import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.RunAsyncCallback; +import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.MouseOutEvent; @@ -63,17 +64,17 @@ public class ClientImage extends Composite { private String currentUser; private String currentScope; - private final int DEFAULT_HEIGHT = 100; - private final int DEFAULT_WIDTH = 700; + public static final int DEFAULT_HEIGHT = 100; + public static final int DEFAULT_WIDTH = 700; private TextBox titleTB = new TextBox(); private TextBox descTB = new TextBox(); private TextBox sourceTB = new TextBox(); - private Button resetB = new Button("Reset Image"); + private Button resetB = new Button("Clear"); private Button addImageB = new Button("Select Image"); private Button uploadImageB = new Button("Upload Image"); - + private Button removeB = new Button("Remove Image"); private BasicComponent basicComponent; /** * @@ -81,12 +82,12 @@ public class ClientImage extends Composite { * @param width * @param tag */ - public ClientImage(BasicComponent co, Presenter presenter, int width, int height) { + public ClientImage(BasicComponent co, Presenter presenter, int width, int height, boolean isRemovable, TextTableImage owner) { imageHeight = height; imageWidth = width; this.presenter = presenter; this.basicComponent = co; - HorizontalPanel controlPanel = getControlPanel(); + HorizontalPanel controlPanel = getControlPanel(isRemovable, owner); VerticalPanel attributesPanel = getAttributesPanel(co); mainPanel.add(controlPanel); mainPanel.add(imagePanel); @@ -119,7 +120,12 @@ public class ClientImage extends Composite { b.addStyleName("tableButton"); } } - + if (isRemovable) { + removeB.removeStyleName("tableButton"); + removeB.addStyleName("deleteEntryButton"); + removeB.getElement().getStyle().setMarginRight(10, Unit.PX); + } + focusPanel.add(mainPanel); initWidget(focusPanel); @@ -131,9 +137,18 @@ public class ClientImage extends Composite { }); } - private HorizontalPanel getControlPanel() { + private HorizontalPanel getControlPanel(boolean isRemovable, final TextTableImage owner) { final HorizontalPanel toReturn = new HorizontalPanel(); + removeB.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + if (owner != null) { + remove(owner); + } + } + }); + resetB.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { @@ -160,7 +175,8 @@ public class ClientImage extends Composite { }); toReturn.setSpacing(3); - + if (isRemovable) + toReturn.add(removeB); toReturn.add(resetB); toReturn.add(uploadImageB); toReturn.add(addImageB); @@ -399,5 +415,12 @@ public class ClientImage extends Composite { } }); } - + /** + * helper method that removes a image from the textTableImage widget + * @param owner + */ + private void remove(TextTableImage owner) { + owner.removeFromParent(this); + removeFromParent(); + } } diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/HeadingTextArea.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/HeadingTextArea.java new file mode 100644 index 0000000..bbfd02b --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/HeadingTextArea.java @@ -0,0 +1,89 @@ +package org.gcube.portlets.user.reportgenerator.client.targets; + +import org.gcube.portlets.d4sreporting.common.shared.ComponentType; +import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter; + +import com.google.gwt.event.dom.client.MouseOutEvent; +import com.google.gwt.event.dom.client.MouseOutHandler; +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; +/** + * HeadingTextArea + * + * @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it + * @version July 2011 (3.0) + */ +public class HeadingTextArea extends ReportTextArea { + private TextArea textArea = new TextArea(); + private VerticalPanel myPanel; + private Presenter presenter; + + int currHeight = 0; + + + public HeadingTextArea(ComponentType type, final Presenter presenter, int left, int top, int width, final int height, boolean hasComments, boolean showClose) { + super(type, presenter, left, top, width, height, hasComments, showClose); + 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"); + resizePanel(width, 30); + 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()); + + } + }); + } + public String getText() { + return textArea.getText(); + } + public void setText(String text) { + textArea.setText(text); + } + + +} diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/SequenceWidget.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/SequenceWidget.java index d5b9b3c..61e13d7 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/SequenceWidget.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/SequenceWidget.java @@ -23,8 +23,8 @@ public class SequenceWidget extends Composite { private VerticalPanel myPanel; - private Button addAnotherB = new Button("Add another entry"); - private Button removeThisB = new Button("Remove this entry"); + private Button addAnotherB = new Button("Add another Entry"); + private Button removeThisB = new Button("Remove Entry"); private Presenter p; private HorizontalPanel buttonPanel = new HorizontalPanel(); HorizontalPanel buttonsWrapperPanel = new HorizontalPanel(); @@ -37,8 +37,7 @@ public class SequenceWidget extends Composite { this.owner = owner; this.repSequence = repSequence; addAnotherB.getElement().getStyle().setMargin(10, Unit.PX); - addAnotherB.getElement().getStyle().setHeight(30, Unit.PX); - addAnotherB.getElement().getStyle().setWidth(180, Unit.PX); + addAnotherB.getElement().getStyle().setWidth(130, Unit.PX); addAnotherB.addStyleName("addEntryButton"); myPanel = new VerticalPanel(); myPanel.setHorizontalAlignment(HasAlignment.ALIGN_LEFT); @@ -76,9 +75,9 @@ public class SequenceWidget extends Composite { }); } else { + + removeThisB.getElement().getStyle().setWidth(130, Unit.PX); removeThisB.getElement().getStyle().setMargin(10, Unit.PX); - removeThisB.getElement().getStyle().setHeight(30, Unit.PX); - removeThisB.getElement().getStyle().setWidth(180, Unit.PX); removeThisB.addStyleName("deleteEntryButton"); buttonsWrapperPanel.add(removeThisB); @@ -88,6 +87,14 @@ public class SequenceWidget extends Composite { removeMe(); } }); + + buttonsWrapperPanel.add(addAnotherB); + addAnotherB.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + addAnother(); + } + }); } } diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/TextTableImage.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/TextTableImage.java index e598582..4263664 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/TextTableImage.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/TextTableImage.java @@ -1,9 +1,11 @@ package org.gcube.portlets.user.reportgenerator.client.targets; import java.util.ArrayList; +import java.util.List; import org.gcube.portlets.d4sreporting.common.shared.BasicComponent; import org.gcube.portlets.d4sreporting.common.shared.ComponentType; +import org.gcube.portlets.d4sreporting.common.shared.Metadata; import org.gcube.portlets.d4sreporting.common.shared.RepeatableSequence; import org.gcube.portlets.d4sreporting.common.shared.Table; import org.gcube.portlets.d4sreporting.common.shared.TableCell; @@ -104,6 +106,16 @@ public class TextTableImage extends Composite { add(toAdd); } + private void addNewImage() { + List emptyMetadata = new ArrayList(); + BasicComponent serImage = new BasicComponent(0, 0, ClientImage.DEFAULT_WIDTH, ClientImage.DEFAULT_HEIGHT, + presenter.getModel().getCurrentPage(), ComponentType.DYNA_IMAGE, "", "", false, false, emptyMetadata); + ClientImage dp = new ClientImage(serImage, presenter, ClientImage.DEFAULT_WIDTH, ClientImage.DEFAULT_HEIGHT, true, this); + TemplateComponent toAdd = new TemplateComponent(presenter.getModel(), 0, 0, DEFAULT_WIDTH, GenericTable.DEFAULT_HEIGHT, + presenter.getModel().getCurrentPage(), ComponentType.DYNA_IMAGE, "", dp); + add(toAdd); + } + /** * * @return @@ -142,7 +154,7 @@ public class TextTableImage extends Composite { addImageB.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - + addNewImage(); } }); diff --git a/src/main/webapp/ReportGenerator.css b/src/main/webapp/ReportGenerator.css index 552f4cc..c0b3057 100644 --- a/src/main/webapp/ReportGenerator.css +++ b/src/main/webapp/ReportGenerator.css @@ -65,6 +65,10 @@ margin-top: 5px; } +.imageTableTextDelimiter { + border-bottom: 1px inset #336699; + width: 700px; +} .imageWrapperPanel { background-color: transparent; @@ -374,7 +378,7 @@ tableBorder td { .heading2 { background-image: url(images/heading_2.png); - font-size: 13pt; + font-size: 12pt; } .heading2-label { @@ -386,17 +390,17 @@ tableBorder td { .heading3 { background-image: url(images/heading_3.png); font-size: 10pt; - font-weight: bold; } .heading3-label{ font-size: 10pt; padding-left: 2px; + font-weight: bold; } .heading4 { background-image: url(images/heading_4.png); - font-size: 9pt; + font-size: 10pt; } .heading4-label{ @@ -406,7 +410,7 @@ tableBorder td { .heading5 { background-image: url(images/heading_5.png); - font-size: 8pt; + font-size: 10pt; } .heading5-label{ diff --git a/src/main/webapp/images/heading_1.png b/src/main/webapp/images/heading_1.png index b5ca1a6..365d91a 100644 Binary files a/src/main/webapp/images/heading_1.png and b/src/main/webapp/images/heading_1.png differ diff --git a/src/main/webapp/images/heading_2.png b/src/main/webapp/images/heading_2.png index 08b083d..7bac8c1 100644 Binary files a/src/main/webapp/images/heading_2.png and b/src/main/webapp/images/heading_2.png differ diff --git a/src/main/webapp/images/heading_3.png b/src/main/webapp/images/heading_3.png index 3cfa791..59f8f51 100644 Binary files a/src/main/webapp/images/heading_3.png and b/src/main/webapp/images/heading_3.png differ diff --git a/src/main/webapp/images/heading_4.png b/src/main/webapp/images/heading_4.png index 7040253..cc7c93e 100644 Binary files a/src/main/webapp/images/heading_4.png and b/src/main/webapp/images/heading_4.png differ diff --git a/src/main/webapp/images/heading_5.png b/src/main/webapp/images/heading_5.png index ea482f8..1d6430d 100644 Binary files a/src/main/webapp/images/heading_5.png and b/src/main/webapp/images/heading_5.png differ diff --git a/src/main/webapp/images/title.png b/src/main/webapp/images/title.png index 5434e2b..707090a 100644 Binary files a/src/main/webapp/images/title.png and b/src/main/webapp/images/title.png differ