From 00486c87fa414821365f11897b7b7309d7689b1e Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Wed, 6 Mar 2013 18:06:42 +0000 Subject: [PATCH] added table support git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/user/reports@70976 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 4 +- .settings/com.google.gdt.eclipse.core.prefs | 4 +- .settings/org.eclipse.wst.common.component | 6 - pom.xml | 4 +- .../client/Presenter/Presenter.java | 8 +- ...ePanel.java => ReportStructureDialog.java} | 4 +- .../client/model/TemplateComponent.java | 2 +- .../targets/ClientRepeatableSequence.java | 10 +- .../client/targets/GenericTable.java | 493 +++++++++++++++++- .../client/targets/SequenceWidget.java | 9 +- .../reportgenerator/ReportGenerator.gwt.xml | 2 +- src/main/webapp/ReportGenerator.css | 27 +- 12 files changed, 534 insertions(+), 39 deletions(-) rename src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/{FimesReportTreePanel.java => ReportStructureDialog.java} (97%) diff --git a/.classpath b/.classpath index 33d28ae..0bc30bd 100644 --- a/.classpath +++ b/.classpath @@ -1,6 +1,6 @@ - + @@ -30,5 +30,5 @@ - + diff --git a/.settings/com.google.gdt.eclipse.core.prefs b/.settings/com.google.gdt.eclipse.core.prefs index d128e75..3533b92 100644 --- a/.settings/com.google.gdt.eclipse.core.prefs +++ b/.settings/com.google.gdt.eclipse.core.prefs @@ -1,5 +1,5 @@ +#Wed Mar 06 18:58:12 CET 2013 eclipse.preferences.version=1 -jarsExcludedFromWebInfLib= -lastWarOutDir=/home/gioia/workspace/reports/target/reports-4.0.1-SNAPSHOT +lastWarOutDir=/Users/massi/Documents/workspace/reports/target/reports-4.1.0-SNAPSHOT warSrcDir=src/main/webapp warSrcDirIsOutput=false diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 7cfe79f..2dc054b 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -5,12 +5,6 @@ - - uses - - - uses - diff --git a/pom.xml b/pom.xml index f0050b7..64861f9 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ org.gcube.portlets.user reports war - 4.0.1-SNAPSHOT + 4.1.0-SNAPSHOT gCube Reports Portlet gCube Reports Portlet. @@ -133,7 +133,7 @@ org.gcube.portlets.user gcube-docx-generator - [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + [1.2.0-SNAPSHOT, 2.0.0-SNAPSHOT) runtime 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 015c833..cad60f9 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 @@ -17,7 +17,7 @@ import org.gcube.portlets.user.reportgenerator.client.ToolboxPanel; import org.gcube.portlets.user.reportgenerator.client.WorkspacePanel; import org.gcube.portlets.user.reportgenerator.client.dialog.AddBiblioEntryDialog; import org.gcube.portlets.user.reportgenerator.client.dialog.DeleteCitationsDialog; -import org.gcube.portlets.user.reportgenerator.client.dialog.FimesReportTreePanel; +import org.gcube.portlets.user.reportgenerator.client.dialog.ReportStructureDialog; import org.gcube.portlets.user.reportgenerator.client.dialog.LoadingPopup; import org.gcube.portlets.user.reportgenerator.client.events.AddBiblioEvent; import org.gcube.portlets.user.reportgenerator.client.events.AddBiblioEventHandler; @@ -166,8 +166,8 @@ public class Presenter { // }); eventBus.addHandler(ItemSelectionEvent.TYPE, new ItemSelectionEventHandler() { + @SuppressWarnings("unchecked") public void onItemSelected(ItemSelectionEvent event) { - // TODO Auto-generated method stub HashMap map = event.getItemSelected(); int sectionIndex = 0, compIndex = 0; if (map != null) { @@ -179,7 +179,7 @@ public class Presenter { sectionIndex = Integer.parseInt((String) ((HashMap) map.get("parent")).get("index")); seekSection(sectionIndex+1); int top = getModel().getSectionComponent(sectionIndex+1).get(compIndex).getContent().getAbsoluteTop(); - ReportGenerator.get().getScrollerPanel().setScrollPosition(top); + ReportGenerator.get().getScrollerPanel().setVerticalScrollPosition(top); } } @@ -1189,7 +1189,7 @@ public class Presenter { public void showReportStructure() { - FimesReportTreePanel panel = new FimesReportTreePanel(eventBus, model.getSerializableModel(), ToolboxPanel.TOOLBOX_WIDTH+"px", ToolboxPanel.TOOLBOX_HEIGHT+"px"); + ReportStructureDialog panel = new ReportStructureDialog(eventBus, model.getSerializableModel(), ToolboxPanel.TOOLBOX_WIDTH+"px", ToolboxPanel.TOOLBOX_HEIGHT+"px"); final com.extjs.gxt.ui.client.widget.Window window = new com.extjs.gxt.ui.client.widget.Window(); window.setTitle("Report Structure"); window.setClosable(true); diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/FimesReportTreePanel.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/ReportStructureDialog.java similarity index 97% rename from src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/FimesReportTreePanel.java rename to src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/ReportStructureDialog.java index fe9fa80..206000c 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/FimesReportTreePanel.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/dialog/ReportStructureDialog.java @@ -23,9 +23,9 @@ import com.google.gwt.user.client.ui.TreeItem; import com.google.gwt.user.client.ui.Widget; -public class FimesReportTreePanel extends ScrollPanel{ +public class ReportStructureDialog extends ScrollPanel{ - public FimesReportTreePanel(final HandlerManager eventBus, final Model report, + public ReportStructureDialog(final HandlerManager eventBus, final Model report, final String height, final String width) { this.setWidth(width); 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 b7d88c7..2fa19b7 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 @@ -257,7 +257,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); + GenericTable table = new GenericTable(st, presenter, sc.getX(), sc.getY(), TemplateModel.TEMPLATE_WIDTH - 50, 200, sc.isLocked()); this.content = table; break; case ATTRIBUTE_MULTI: diff --git a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientRepeatableSequence.java b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientRepeatableSequence.java index a222f23..7ce35e1 100644 --- a/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientRepeatableSequence.java +++ b/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/ClientRepeatableSequence.java @@ -5,6 +5,7 @@ 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.user.reportgenerator.client.ReportGenerator; import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter; import org.gcube.portlets.user.reportgenerator.client.model.TemplateComponent; @@ -31,7 +32,7 @@ public class ClientRepeatableSequence extends Composite { this.p = p; this.repSequence = sRS; this.originalSequence = extractOriginalSequence(sRS); - SequenceWidget seqW = new SequenceWidget(p, this, originalSequence, true); + SequenceWidget seqW = new SequenceWidget(p, this, originalSequence, true, false); myPanel.add(seqW); for (RepeatableSequence repeatSeq : getRepeats()) { @@ -102,7 +103,12 @@ public class ClientRepeatableSequence extends Composite { } protected void addAnother(RepeatableSequence sRS) { - SequenceWidget seqW = new SequenceWidget(p, this, sRS, false); + SequenceWidget seqW = new SequenceWidget(p, this, sRS, false, false); + myPanel.add(seqW); + } + + protected void addNew(RepeatableSequence sRS) { + SequenceWidget seqW = new SequenceWidget(p, this, sRS, false, true); myPanel.add(seqW); } /** 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 91e57a9..e9d45fd 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 @@ -1,46 +1,89 @@ package org.gcube.portlets.user.reportgenerator.client.targets; + + import java.util.ArrayList; 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 com.extjs.gxt.ui.client.event.Listener; +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.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.dom.client.MouseOutEvent; +import com.google.gwt.event.dom.client.MouseOutHandler; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlexTable; +import com.google.gwt.user.client.ui.FocusPanel; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; /** * * @author Massimiliano Assante ISTI-CNR - * @version 1.0 * */ public class GenericTable extends Composite { - private VerticalPanel myPanel; + + public static final int DEFAULT_HEIGHT = 200; + + public static final int DEFAULT_ROWS_NUM = 5; + public static final int DEFAULT_COLS_NUM = 2; + + private FocusPanel focusPanel = new FocusPanel(); + + private VerticalPanel myPanel = new VerticalPanel(); private FlexTable myTable; Presenter presenter; private int rows; private int cols; + + private int width; + + private boolean isEditTableMode = false; + + private Button cellMerger = new Button("Merge Cells"); + private Button colMerger = new Button("Merge Selected"); + private Button cancel = new Button("Cancel"); + + private Button resetTabelB = new Button("Reset Table"); + + 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(); private int cellWidth; private int cellSpacing = 1; private int cellPadding = 0; private GenTableCell selectedCell = null; + + private Table originalTable; /** * constructor called when reading the model * @param sTable */ - public GenericTable(Table sTable, Presenter presenter, int top, int left, int width, int height) { - + public GenericTable(Table sTable, Presenter presenter, int top, int left, int width, int height, boolean isLocked) { + saveTable(sTable); commonConstructorCode(presenter); this.rows = sTable.getRowCount(); this.cols = sTable.getColsNo(); + this.width = width; /** * construct the table @@ -49,7 +92,7 @@ public class GenericTable extends Composite { for (int j = 0; j < sTable.getCellCount(i); j++) { TableCell toPut = sTable.getValue(i, j); int cellWidth = toPut.getCellWidth(); - int cellHeight = toPut.getCellHeight(); + //int cellHeight = toPut.getCellHeight(); int colspan = toPut.getColspan(); GenTableCell toAdd = new GenTableCell(i, j, cellWidth, colspan); toAdd.setText(toPut.getContent()); @@ -57,14 +100,46 @@ public class GenericTable extends Composite { toAdd.setWidth(""+cellWidth+"px"); myTable.setWidget(i, j, toAdd); myTable.getFlexCellFormatter().setColSpan(i, j, colspan); + toAdd.addClickHandler(cellClicker); } } + + HorizontalPanel controlPanel = getControlPanel(); + VerticalPanel attributesPanel = getAttributesPanel(); + attributesPanel.setStyleName("tableAttributesPanel"); + + controlPanel.setStyleName("tableControlPanel"); + myPanel.add(controlPanel); + myPanel.add(myTable); + myPanel.add(attributesPanel); + myPanel.setStyleName("tablePanel"); + + + for (int i = 0; i < controlPanel.getWidgetCount(); i++) { + if (controlPanel.getWidget(i) instanceof Button) { + Button b = (Button) controlPanel.getWidget(i); + b.addStyleName("tableButton"); + } + } + + focusPanel.add(myPanel); + initWidget(focusPanel); + + focusPanel.addMouseOutHandler(new MouseOutHandler() { + @Override + public void onMouseOut(MouseOutEvent event) { + saveStatus(); + } + }); + } + + private void saveTable(Table sTable) { + originalTable = new Table(sTable.getColsNo()); + originalTable.setTable(sTable.getTable()); + } - myPanel = new VerticalPanel(); - myPanel.setWidth(width+"px"); - myPanel.setStyleName("d4sFrame"); - myPanel.add(myTable); - initWidget(myPanel); + private void saveStatus() { + presenter.storeChangeInSession(this); } /** * common Constructors Code @@ -77,7 +152,237 @@ public class GenericTable extends Composite { myTable.setCellPadding(cellPadding); } + /** + * calculate the cell width + * @param cols + * @return + */ + private int getCellWidth(int cols) { + int cellWidth = width / cols; + return cellWidth; + } + private VerticalPanel getAttributesPanel() { + VerticalPanel toReturn = new VerticalPanel(); + + HorizontalPanel hp1 = new HorizontalPanel(); + HTML title = new HTML("Title: ", true); + hp1.add(title); + hp1.add(titleTB); + titleTB.setWidth("135px"); + + HTML desc = new HTML(" Description: ", true); + //desc.setStyleName("attributeArea"); + + hp1.add(desc); + hp1.add(descTB); + descTB.setWidth("435px"); + toReturn.add(hp1); + + AttributeSingleSelection attrSS = new AttributeSingleSelection(presenter, 0, 0, 700, 0, "DisplayType:Token|Inline|Link|Popup"); + toReturn.add(attrSS); + + return toReturn; + } + + /** + * + * @return + */ + private HorizontalPanel getControlPanel() { + final HorizontalPanel toReturn = new HorizontalPanel(); + + final Listener l = new Listener() { + public void handleEvent(MessageBoxEvent ce) { + Info.display("Info", "Table Edit Mode Enabled"); + } + }; + + resetTabelB.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + resetMe(); + } + }); + + addRowB.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + addRow(); + } + }); + + deleteRowB.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + deleteLastRow(); + } + }); + + addColB.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + addColumn(); + } + }); + + deleteColB.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + deleteLastColumn(); + } + }); + + + cellMerger.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + if (! isEditTableMode) { + isEditTableMode = true; + MessageBox.alert("Table Edit Mode Enabled", "Click on the cells you want to merge", null); + myTable.addStyleName("highlight_background"); + cellMerger.setEnabled(false); + + //rowMerger.setVisible(true); + colMerger.setVisible(true); + cancel.setVisible(true); + } + } + }); + + //the control buttons + toReturn.add(resetTabelB); + toReturn.add(addRowB); + toReturn.add(addColB); + toReturn.add(deleteRowB); + toReturn.add(deleteColB); + + toReturn.add(cellMerger); + toReturn.add(colMerger); + toReturn.add(cancel); + + colMerger.setVisible(false); + cancel.setVisible(false); + + toReturn.setSpacing(3); + + + cancel.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + endEditMode(); + } + }); + + + colMerger.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + mergeSelectedCols(); + endEditMode(); + } + }); + return toReturn; + } + + + + /** + * + * End the edit mode + */ + private void endEditMode() { + isEditTableMode = false; + myTable.removeStyleName("highlight_background"); + cellMerger.setEnabled(true); + colMerger.setVisible(false); + cancel.setVisible(false); + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + try { + GenTableCell tc = (GenTableCell) myTable.getWidget(i, j); + if (tc.isSelected()) { + tc.selected = false; + tc.removeStyleName("selectedCell"); + } + }catch (IndexOutOfBoundsException e) { + e.printStackTrace(); + } + } + + } + } + + /** + * merges the contiguos cols per row + */ + private void mergeSelectedCols() { + for_i: for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + try { + GenTableCell tc = (GenTableCell) myTable.getWidget(i, j); + if (tc.isSelected()) { + int nToMerge = checkContiguosColsPerRows(i, j); + if (nToMerge > 1) { + //myTable.removeCells(i, j+1, nToMerge-1); + int cellsData[] = deleteCells(i, j+1, nToMerge-1); + int colSpanDeleted = cellsData[0]; + int deletedCellWidth = cellsData[1]; + tc.setColspan(tc.getColspan()+colSpanDeleted); + GWT.log("i=" + i + " j=" +j + " nTomerge" + nToMerge + " COLSPAN: " + tc.getColspan()); + myTable.getFlexCellFormatter().setColSpan(i, j, tc.getColspan()); + int newWidth = (tc.getWidth() + deletedCellWidth + cellSpacing * tc.getColspan() + tc.getColspan()); + tc.setWidth(newWidth+"px"); + tc.setCellWidth(newWidth); + tc.removeStyleName("selectedCell"); + continue for_i; + } + } + } catch (IndexOutOfBoundsException e) { + e.printStackTrace(); + } + } + } + } + + /** + * + * @param row the row of the cells to be removed + * @column the column of the first cell to be removed + * @num the number of cells to be removed + * @return the total colspan of the cells in [0] is deleting, the total width of cells deleted in [1] + */ + private int[] deleteCells(int row, int col, int num) { + int[] toReturn = new int[2]; + toReturn[0] = 0; + toReturn[1] = 0; + for (int j = col; j < (col+num); j++) { + toReturn[0] += ((GenTableCell) myTable.getWidget(row, j)).getColspan(); + toReturn[1] += ((GenTableCell) myTable.getWidget(row, j)).getCellWidth(); + } + myTable.removeCells(row, col, num); + GWT.log("REMOVED CELL from" + col + " to " + (col+num)); + return toReturn; + } + /** + * + * @return + */ + private int checkContiguosColsPerRows(int i, int j) { + int counter = 1; + GenTableCell next = (GenTableCell) myTable.getWidget(i, j); + j++; + while (j < myTable.getCellCount(i)) { + next = (GenTableCell) myTable.getWidget(i, j); + if (next.isSelected()) + counter++; + else + break; + j++; + } + return counter; + } + public FlexTable getMyTable() { return myTable; @@ -127,19 +432,181 @@ public class GenericTable extends Composite { return toReturn; } - + /** + * + */ + ClickHandler cellClicker = new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + GenTableCell toSelect = (GenTableCell) event.getSource(); + setSelected(toSelect); + if (isEditTableMode) { + + if (! toSelect.isSelected()) { + toSelect.addStyleName("selectedCell"); + toSelect.setSelected(true); + } + else { + toSelect.setSelected(false); + toSelect.removeStyleName("selectedCell"); + } + } + } + }; + + /** + * tells the presenter this tableb is selected + */ + private void setSelected(GenTableCell tc) { + selectedCell = tc; + } + public GenTableCell getSelectedCell() { return selectedCell; } - /** - * adda a column at the left of the selected cell of the selected table + * delete the selected row from the table + */ + public void deleteLastRow() { + deleteRow(rows-1); + rows--; + } + + private void deleteLastColumn() { + deleteColumn(cols-1); + } + /** + * adda a row at the bottom of the tableb + */ + public void addRow() { + + Table sTable = getSerializable(); + //Window.alert("Adding row Above: " + rowIndex + " cells no: " + sTable.getCellCount(rowIndex)); + int rowIndex = myTable.getRowCount(); + for (int j = 0; j < myTable.getCellCount(rowIndex-1); j++) { + TableCell toPut = sTable.getValue(rowIndex-1, j); + int cellWidth = toPut.getCellWidth(); + int cellHeight = toPut.getCellHeight(); + int colspan = toPut.getColspan(); + GenTableCell toAdd = new GenTableCell(rowIndex, j, cellWidth, colspan); + toAdd.setText(toPut.getContent()); + toAdd.setStyleName("tableBorder"); + toAdd.setWidth(""+cellWidth+"px"); + myTable.setWidget(rowIndex, j, toAdd); + myTable.getFlexCellFormatter().setColSpan(rowIndex, j, colspan); + toAdd.addClickHandler(cellClicker); + } + rows += 1; + Info.display("Info", "Table Row added successfully"); + } + /** + * add a column next to the last onw + */ + public void addColumn() { + int colIndex = cols; + int cellWidth = getCellWidth(cols+1); + + for (int i = 0; i < rows; i++) { + GenTableCell toAdd = new GenTableCell(i, colIndex, cellWidth, 1); + toAdd.setStyleName("tableBorder"); + GWT.log("Width=" + cellWidth); + myTable.setWidget(i, colIndex, toAdd); + toAdd.addClickHandler(cellClicker); + } + cols++; + updateCellsWidth(getCellWidth(cols)); + Info.display("Info", "Table Column added successfully"); + } + + + + private void updateCellsWidth(int newWidth) { + Table sTable = getSerializable(); + /** + * construct the table + */ + for (int i = 0; i < rows; i++) { + for (int j = 0; j < sTable.getCellCount(i); j++) { + TableCell toPut = sTable.getValue(i, j); + int cellWidth = newWidth; + //int cellHeight = toPut.getCellHeight(); + int colspan = toPut.getColspan(); + GenTableCell toAdd = new GenTableCell(i, j, cellWidth, colspan); + toAdd.setText(toPut.getContent()); + toAdd.setStyleName("tableBorder"); + toAdd.setWidth(""+cellWidth+"px"); + myTable.setWidget(i, j, toAdd); + myTable.getFlexCellFormatter().setColSpan(i, j, colspan); + toAdd.addClickHandler(cellClicker); + } + } + + } + /** + * adda a column at the left of the selected cell of the selected tableb * TODO: next version */ public void addColumnLeft(int colindex) { // myTable.insertCell(beforeRow, beforeColumn) } + /** + * delete the rowIndex row from the table + */ + public void deleteRow(int rowIndex) { + GWT.log("Removing row: " + rowIndex); + if (rows == 1) { + Info.display("Error", "Only one row left, delete the table"); + } else { + myTable.removeRow(rowIndex); + Info.display("Info", "Table Row removed successfully"); + } + } + /** + * delete the colIndex column from the table + */ + public void deleteColumn(int colIndex) { + GWT.log("Removing column: " + colIndex); + if (cols <= 1) { + Info.display("Error", "Only one column left, delete the table"); + } else { + //check if the column has all rows + for (int i = 0; i < rows; i++) { + try { + myTable.getWidget(i, colIndex); + } + catch (IndexOutOfBoundsException e) { + Info.display("Error", "Table Column cannot be removed as at least one row has merged cells"); + return; + } + } + // at this point you are sure there are no merged cells in the column to be deleted (last one) + for (int i = 0; i < rows; i++) { + myTable.removeCell(i, colIndex); + } + cols--; + updateCellsWidth(getCellWidth(cols)); + //Info.display("Info", "Table Column removed successfully"); + } + } + protected void resetMe() { + myTable.clear(); + /** + * construct the table + */ + for (int i = 0; i < originalTable.getRowCount(); i++) { + for (int j = 0; j < originalTable.getColsNo(); j++) { + TableCell toPut = new TableCell(""); + int cellWidth = toPut.getCellWidth(); + GenTableCell toAdd = new GenTableCell(i, j, cellWidth, 1); + toAdd.setText(""); + toAdd.setStyleName("tableBorder"); + toAdd.setWidth(""+cellWidth+"px"); + myTable.setWidget(i, j, toAdd); + toAdd.addClickHandler(cellClicker); + } + } + } } 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 f856a7d..9054502 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 @@ -31,7 +31,7 @@ public class SequenceWidget extends Composite { private RepeatableSequence repSequence; private ArrayList seqGroupedComponents = new ArrayList(); - public SequenceWidget(Presenter p, ClientRepeatableSequence owner, RepeatableSequence repSequence, boolean isFirst) { + public SequenceWidget(Presenter p, ClientRepeatableSequence owner, RepeatableSequence repSequence, boolean isFirst, boolean isNew) { this.p = p; this.owner = owner; this.repSequence = repSequence; @@ -53,6 +53,10 @@ public class SequenceWidget extends Composite { buttonPanel.add(buttonsWrapperPanel); } + //if isNew and is not locked and is of type BODY then put fields to blank + if (isNew && (!sComp.isLocked()) && (sComp.getType() == ComponentType.BODY || sComp.getType() == ComponentType.BODY_NOT_FORMATTED) ) { + sComp.setPossibleContent(""); + } add(new TemplateComponent(p.getModel(), sComp, p)); } initWidget(myPanel); @@ -100,11 +104,10 @@ public class SequenceWidget extends Composite { } private void addAnother() { - owner.addAnother(repSequence); + owner.addNew(repSequence); } private void removeMe() { owner.removeSeqWidget(this); } - } diff --git a/src/main/resources/org/gcube/portlets/user/reportgenerator/ReportGenerator.gwt.xml b/src/main/resources/org/gcube/portlets/user/reportgenerator/ReportGenerator.gwt.xml index 275b9fe..2176bd5 100644 --- a/src/main/resources/org/gcube/portlets/user/reportgenerator/ReportGenerator.gwt.xml +++ b/src/main/resources/org/gcube/portlets/user/reportgenerator/ReportGenerator.gwt.xml @@ -10,7 +10,7 @@ - + diff --git a/src/main/webapp/ReportGenerator.css b/src/main/webapp/ReportGenerator.css index 3d7d25f..b99d35f 100644 --- a/src/main/webapp/ReportGenerator.css +++ b/src/main/webapp/ReportGenerator.css @@ -40,6 +40,23 @@ width: 600px; } +.tablePanel { + border-bottom: 2px dashed #FFF; + background-color: transparent; + margin: 8px 0px; +} + +.tableControlPanel { + margin-bottom: 5px; +} + +.tableAttributesPanel { + margin: 8px 0px; + font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; + font-size: 14px; + color: #336699; +} + .tableBorder { border: 1px solid #CCC; height: 30px; @@ -48,6 +65,14 @@ color: #333; } +.tableButton { + background-image: none !important; + background-repeat: none !important; + background-color: #fff !important; + color: #666 !important; + margin-right: 10px !important; +} + .selectable { cursor: pointer; cursor: hand; @@ -83,7 +108,7 @@ } tableBorder td { - border: 2px solid #BBBBBB; + border: 1px solid #BBBBBB; padding: 3px; }