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 e8cc434..05bcbfe 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 @@ -229,7 +229,7 @@ public class TemplateComponent { break; case FLEX_TABLE: Table st = (Table) sc.getPossibleContent(); - GenericTable table = new GenericTable(st, presenter, sc.getX(), sc.getY(), TemplateModel.TEMPLATE_WIDTH - 50, 200, sc.isLocked()); + GenericTable table = new GenericTable(st, presenter, sc.getX(), sc.getY(), TemplateModel.TEMPLATE_WIDTH - 50, 200, sc.isLocked(), showClose, owner); this.content = table; break; case ATTRIBUTE_MULTI: diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/GenericTable.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/GenericTable.java index cdee612..f1def2e 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/GenericTable.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/GenericTable.java @@ -13,6 +13,7 @@ import com.extjs.gxt.ui.client.event.MessageBoxEvent; import com.extjs.gxt.ui.client.widget.Info; import com.extjs.gxt.ui.client.widget.MessageBox; import com.google.gwt.core.client.GWT; +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; @@ -59,12 +60,16 @@ public class GenericTable extends Composite { private Button colMerger = new Button("Merge Selected"); private Button cancel = new Button("Cancel"); - private Button resetTabelB = new Button("Reset Table"); + private Button removeB = new Button("Remove Table"); + + private Button resetTabelB = new Button("Reset"); private Button addRowB = new Button("Add Row"); private Button addColB = new Button("Add Col"); private Button deleteRowB = new Button("Del. Row"); private Button deleteColB = new Button("Del. Col"); + + private TextBox titleTB = new TextBox(); private TextBox descTB = new TextBox(); @@ -81,7 +86,7 @@ public class GenericTable extends Composite { * constructor called when reading the model * @param sTable */ - public GenericTable(Table sTable, Presenter presenter, int top, int left, int width, int height, boolean isLocked) { + public GenericTable(Table sTable, Presenter presenter, int top, int left, int width, int height, boolean isLocked, boolean isRemovable, TextTableImage owner) { saveTable(sTable); commonConstructorCode(presenter); this.rows = sTable.getRowCount(); @@ -107,7 +112,7 @@ public class GenericTable extends Composite { } } - HorizontalPanel controlPanel = getControlPanel(); + HorizontalPanel controlPanel = getControlPanel(isRemovable, owner); VerticalPanel attributesPanel = getAttributesPanel(sTable); attributesPanel.setStyleName("tableAttributesPanel"); @@ -126,6 +131,11 @@ public class GenericTable extends Composite { b.addStyleName("tableButton"); } } + if (isRemovable) { + removeB.removeStyleName("tableButton"); + removeB.addStyleName("deleteEntryButton"); + removeB.getElement().getStyle().setMarginRight(10, Unit.PX); + } focusPanel.add(myPanel); initWidget(focusPanel); @@ -196,11 +206,12 @@ public class GenericTable extends Composite { return toReturn; } + /** * * @return */ - private HorizontalPanel getControlPanel() { + private HorizontalPanel getControlPanel(boolean isRemovable, final TextTableImage owner) { final HorizontalPanel toReturn = new HorizontalPanel(); final Listener l = new Listener() { @@ -209,6 +220,16 @@ public class GenericTable extends Composite { } }; + removeB.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + if (owner != null) { + remove(owner); + } + } + }); + + resetTabelB.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { @@ -261,6 +282,8 @@ public class GenericTable extends Composite { } }); + if (isRemovable) + toReturn.add(removeB); //the control buttons toReturn.add(resetTabelB); toReturn.add(addRowB); @@ -626,4 +649,12 @@ public class GenericTable extends Composite { cols = originalTable.getColsNo(); rows = originalTable.getRowCount(); } + /** + * heleper method that removes a table from the texxTableImage 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/TextTableImage.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/TextTableImage.java index 36bdd2b..e598582 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 @@ -5,18 +5,22 @@ import java.util.ArrayList; import org.gcube.portlets.d4sreporting.common.shared.BasicComponent; import org.gcube.portlets.d4sreporting.common.shared.ComponentType; import org.gcube.portlets.d4sreporting.common.shared.RepeatableSequence; +import org.gcube.portlets.d4sreporting.common.shared.Table; +import org.gcube.portlets.d4sreporting.common.shared.TableCell; import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter; import org.gcube.portlets.user.reportgenerator.client.model.TemplateComponent; +import org.gcube.portlets.user.reportgenerator.client.model.TemplateModel; import com.google.gwt.core.client.GWT; +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.user.client.ui.Button; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FocusPanel; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.user.client.ui.Widget; /** * * @author Massimiliano Assante ISTI-CNR @@ -43,6 +47,7 @@ public class TextTableImage extends Composite { */ public TextTableImage(Presenter presenter, boolean isFromTemplate) { this.presenter = presenter; + focusPanel.setStyleName("imageTableTextDelimiter"); mainPanel.setStyleName("imageTableTextPanel"); controlPanel = getControlPanel(); controlPanel.setStyleName("imageTableTextControlPanel"); @@ -59,7 +64,7 @@ public class TextTableImage extends Composite { //construct the first component and add it TemplateComponent toAdd = new TemplateComponent(presenter.getModel(), 0, 0, DEFAULT_WIDTH, height, presenter.getModel().getCurrentPage(), ComponentType.BODY, "", firstText); - add(toAdd); + add(toAdd); } } /** @@ -75,6 +80,7 @@ public class TextTableImage extends Composite { } } } + public void add(TemplateComponent toAdd) { addedComponents.add(toAdd); GWT.log("ToAdd= getType " + toAdd.getType()); @@ -91,7 +97,33 @@ public class TextTableImage extends Composite { } private void addNewTable() { - + Table st = getSerializableTable(); + GenericTable table = new GenericTable(st, presenter, 0, 0, TemplateModel.TEMPLATE_WIDTH - 50, GenericTable.DEFAULT_HEIGHT, false, true, this); + TemplateComponent toAdd = new TemplateComponent(presenter.getModel(), 0, 0, DEFAULT_WIDTH, GenericTable.DEFAULT_HEIGHT, + presenter.getModel().getCurrentPage(), ComponentType.FLEX_TABLE, "", table); + add(toAdd); + } + + /** + * + * @return + */ + private Table getSerializableTable() { + Table toReturn = new Table(GenericTable.DEFAULT_COLS_NUM); + for (int i = 0; i < GenericTable.DEFAULT_ROWS_NUM; i++) { + toReturn.addRow(getRow(i)); + } + + return toReturn; + } + + private ArrayList getRow(int i) { + ArrayList toReturn = new ArrayList(); + int cellWidth = (DEFAULT_WIDTH) / GenericTable.DEFAULT_COLS_NUM; + for (int j = 0; j <2; j++) { + toReturn.add(new TableCell("", 1, cellWidth, 25)); + } + return toReturn; } /** * @@ -117,6 +149,7 @@ public class TextTableImage extends Composite { addTableB.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { + addNewTable(); } }); toReturn.setSpacing(3); @@ -130,7 +163,8 @@ public class TextTableImage extends Composite { for (int i = 0; i < toReturn.getWidgetCount(); i++) { if (toReturn.getWidget(i) instanceof Button) { Button b = (Button) toReturn.getWidget(i); - b.addStyleName("tableButton"); + b.addStyleName("addEntryButton"); + b.getElement().getStyle().setMarginRight(10, Unit.PX); } } return toReturn; @@ -140,11 +174,18 @@ public class TextTableImage extends Composite { return addedComponents; } - public void removeFromParent(D4sRichTextarea d4sRichTextarea) { + public void removeFromParent(Widget w) { for (TemplateComponent tc : addedComponents) { if (tc.getType() == ComponentType.BODY) { D4sRichTextarea toCheck = (D4sRichTextarea) tc.getContent(); - if (toCheck.equals(d4sRichTextarea)) { + if (toCheck.equals(w)) { + addedComponents.remove(tc); + break; + } + } + if (tc.getType() == ComponentType.FLEX_TABLE) { + GenericTable toCheck = (GenericTable) tc.getContent(); + if (toCheck.equals(w)) { addedComponents.remove(tc); break; }