List of usage examples for com.google.gwt.safehtml.shared SafeHtmlUtils fromSafeConstant
public static SafeHtml fromSafeConstant(String s)
From source file:com.novartis.pcs.ontology.webapp.client.view.ApproveRejectComposite.java
License:Apache License
@SuppressWarnings("unchecked") protected void setupTable() { table.setWidth("100%"); table.addStyleName("gwt-CellTable"); table.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.DISABLED); /* getValue gets called during update. Need to combine objects * and include a flag that is set when update starts. Using default * functionality with Shit key is better anyway and have include * note to user so they are aware of it. See addWidgets below. Header<Boolean> checkHeader = new Header<Boolean>(new CheckboxCell()) { @Override//ww w . j a v a 2s .c om public Boolean getValue() { return false; //selection.getSelectedSet().containsAll(table.getVisibleItems()); } }; checkHeader.setUpdater(new ValueUpdater<Boolean>() { @Override public void update(Boolean value) { List<T> displayedItems = table.getVisibleItems(); for (T pending : displayedItems) { selection.setSelected(pending, value); } } }); */ if (curator != null && curator.isAuthorised(entity)) { Column<T, Boolean> checkColumn = new Column<T, Boolean>(new DisableableCheckboxCell(true, false)) { @Override public Boolean getValue(T object) { return !object.getCreatedBy().equals(curator) ? selection.isSelected(object) : null; } }; table.addColumn(checkColumn); table.setColumnWidth(checkColumn, 16, Unit.PX); table.setSelectionModel(selection, DefaultSelectionEventManager.<T>createCheckboxManager(0)); } else { table.setSelectionModel(new NoSelectionModel<T>(keyProvider)); } addTableColumns(table); table.addColumn(new CreatedDateColumn(), "Created"); table.addColumn(new CreatedByColumn(), "Created By"); if (curator != null) { IconActionCell.Delegate<T> delegate = new IconActionCell.Delegate<T>() { @Override public void execute(T entity) { editView.setEntity(entity); editView.show(); } }; Column<T, T> editColumn = new Column<T, T>( new IconActionCell<T>(ImageResources.INSTANCE.editIcon(), delegate)) { @Override public T getValue(T entity) { return entity; } }; editColumn.setCellStyleNames("icon-action"); table.addColumn(editColumn, SafeHtmlUtils.fromSafeConstant(" ")); } if (curator != null) { IconActionCell.Delegate<T> delegate = new IconActionCell.Delegate<T>() { @Override public void execute(final T entity) { if (entity != null && curator.equals(entity.getCreatedBy())) { if (errorLabel.isVisible()) { errorLabel.setVisible(false); } if (selection != null) { selection.setSelected(entity, false); } processing.add(entity); busyIndicator.busy(); service.delete(entity, new AsyncCallback<Void>() { @Override public void onFailure(Throwable caught) { GWT.log("Failed to delete pending item", caught); processing.remove(entity); busyIndicator.idle(); if (caught instanceof InvalidEntityException) { InvalidEntityException e = (InvalidEntityException) caught; errorLabel.setText(e.getMessage() + ": " + e.getEntity()); errorLabel.setVisible(true); } else { ErrorView.instance().onUncaughtException(caught); } } @Override public void onSuccess(Void nothing) { processing.remove(entity); dataProvider.getList().remove(entity); busyIndicator.idle(); fireDeleteEvent(entity); } }); } } }; Column<T, T> deleteColumn = new Column<T, T>( new IconActionCell<T>(ImageResources.INSTANCE.deleteIcon(), delegate)) { @Override public T getValue(T entity) { return curator.equals(entity.getCreatedBy()) ? entity : null; } }; deleteColumn.setCellStyleNames("icon-action"); table.addColumn(deleteColumn, SafeHtmlUtils.fromSafeConstant(" ")); } ListHandler<T> sortHandler = new ListHandler<T>(dataProvider.getList()); for (int i = 0; i < table.getColumnCount(); i++) { Column<T, ?> column = table.getColumn(i); if (column.isSortable() && column instanceof Comparator<?>) { sortHandler.setComparator(column, (Comparator<T>) column); } } table.addColumnSortHandler(sortHandler); table.getColumnSortList().push(table.getColumn(curator != null && curator.isAuthorised(entity) ? 2 : 1)); }
From source file:com.novartis.pcs.ontology.webapp.client.view.CrossRefPopup.java
License:Apache License
@SuppressWarnings("unchecked") private void addTableColumns() { /*/*from w ww . j a v a2 s. c om*/ List<String> typeNames = new ArrayList<String>(); for(Synonym.Type type : Synonym.Type.values()) { typeNames.add(type.name()); } Column<ControlledVocabularyTerm, String> typeColumn = new Column<ControlledVocabularyTerm, String>(new SelectionCell(typeNames)) { @Override public String getValue(ControlledVocabularyTerm term) { Synonym.Type type = term.getSynonymType(); if(type == null) { type = Synonym.Type.RELATED; } return type.name(); } }; typeColumn.setFieldUpdater(new FieldUpdater<ControlledVocabularyTerm, String>() { @Override public void update(int index, ControlledVocabularyTerm term, String typeName) { Synonym.Type type = Synonym.Type.valueOf(typeName); term.setSynonymType(type); } }); */ IconActionCell.Delegate<ControlledVocabularyTerm> delegate = new IconActionCell.Delegate<ControlledVocabularyTerm>() { @Override public void execute(ControlledVocabularyTerm term) { eventBus.fireEvent(new SearchEvent(term.getName())); if (selection != null) { selection.clear(); selection.setSelected(term, true); } } }; Column<ControlledVocabularyTerm, ControlledVocabularyTerm> searchColumn = new Column<ControlledVocabularyTerm, ControlledVocabularyTerm>( new IconActionCell<ControlledVocabularyTerm>(ImageResources.INSTANCE.searchIcon(), delegate)) { @Override public ControlledVocabularyTerm getValue(ControlledVocabularyTerm term) { return term; } }; searchColumn.setCellStyleNames("icon-action"); /* Column<ControlledVocabularyTerm, ControlledVocabularyTerm> addColumn = new Column<ControlledVocabularyTerm, ControlledVocabularyTerm>(new IconActionCell<ControlledVocabularyTerm>(ImageResources.INSTANCE.addIcon(), this)) { @Override public ControlledVocabularyTerm getValue(ControlledVocabularyTerm term) { return term; } }; addColumn.setCellStyleNames("icon-action"); // colspans the table header if we use the same Header object Header<String> actionHeader = new Header<String>(new TextCell()) { @Override public String getValue() { return "Action"; } }; */ table.setWidth("100%"); table.setPageSize(10); table.addStyleName("gwt-CellTable"); table.addStyleName("spaced-vert"); //table.setKeyboardPagingPolicy(KeyboardPagingPolicy.CHANGE_PAGE); table.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.DISABLED); if (curator != null) { Column<ControlledVocabularyTerm, Boolean> checkColumn = new Column<ControlledVocabularyTerm, Boolean>( new CheckboxCell(true, false)) { @Override public Boolean getValue(ControlledVocabularyTerm term) { return selection.isSelected(term); } }; table.addColumn(checkColumn, SafeHtmlUtils.fromSafeConstant(" ")); table.setColumnWidth(checkColumn, 16, Unit.PX); table.setSelectionModel(selection, DefaultSelectionEventManager.<ControlledVocabularyTerm>createCheckboxManager(0)); } else { table.setSelectionModel(new NoSelectionModel<ControlledVocabularyTerm>(keyProvider)); } NameColumn nameColumn = new NameColumn(); nameColumn.setFieldUpdater(new FieldUpdater<ControlledVocabularyTerm, String>() { @Override public void update(int index, ControlledVocabularyTerm term, String value) { linkedTermsView.show(term); } }); nameColumn.setCellStyleNames("clickable-text"); table.addColumn(searchColumn, SafeHtmlUtils.fromSafeConstant(" ")); table.addColumn(nameColumn, "Unmapped Term"); table.addColumn(new ContextColumn(), "Context"); table.addColumn(new SourceColumn(), "Source"); table.addColumn(new UsageColumn(), "Usage"); // table.addColumn(typeColumn, "Type"); ListHandler<ControlledVocabularyTerm> sortHandler = new ListHandler<ControlledVocabularyTerm>( dataProvider.getList()); for (int i = 1; i < table.getColumnCount(); i++) { Column<ControlledVocabularyTerm, ?> column = table.getColumn(i); if (column.isSortable() && column instanceof Comparator<?>) { sortHandler.setComparator(column, (Comparator<ControlledVocabularyTerm>) column); } } table.addColumnSortHandler(sortHandler); table.getColumnSortList().push(table.getColumn(table.getColumnCount() - 1)); // Second time to reverse sort order table.getColumnSortList().push(table.getColumn(table.getColumnCount() - 1)); }
From source file:com.novartis.pcs.ontology.webapp.client.view.RelatedTermsView.java
License:Apache License
public void setCurator(final Curator curator) { final ReplaceRelationshipPopup replaceRelationshipView = new ReplaceRelationshipPopup(service, eventBus); IconActionCell.Delegate<Relationship> delegate = new IconActionCell.Delegate<Relationship>() { @Override//from w w w . j a v a2 s . c o m public void execute(final Relationship relationship) { switch (relationship.getStatus()) { case PENDING: service.delete(relationship, new AsyncCallback<Void>() { @Override public void onFailure(Throwable caught) { GWT.log("Failed to delete pending relationship", caught); if (caught instanceof InvalidEntityException) { InvalidEntityException e = (InvalidEntityException) caught; //errorLabel.setText(e.getMessage() + ": " + e.getEntity()); //errorLabel.setVisible(true); } else { ErrorView.instance().onUncaughtException(caught); } } @Override public void onSuccess(Void nothing) { eventBus.fireEvent(new RelationshipDeletedEvent(relationship)); Term term = relationship.getTerm(); Term relatedTerm = relationship.getRelatedTerm(); if (term.equals(currentTerm) || relatedTerm.equals(currentTerm)) { eventBus.fireEvent(new ViewTermEvent(currentTerm)); } } }); break; case APPROVED: replaceRelationshipView.setRelationship(relationship); replaceRelationshipView.show(); /* service.obsoleteRelationship(relationship.getId(), 0, null, new AsyncCallback<Relationship>() { @Override public void onFailure(Throwable caught) { GWT.log("Failed to obsolete relationship", caught); if(caught instanceof InvalidEntityException) { InvalidEntityException e = (InvalidEntityException)caught; //errorLabel.setText(e.getMessage() + ": " + e.getEntity()); //errorLabel.setVisible(true); } else { ErrorView.instance().onUncaughtException(caught); } } @Override public void onSuccess(Relationship relationship) { eventBus.fireEvent(new RelationshipUpdatedEvent(relationship)); Term term = relationship.getTerm(); Term relatedTerm = relationship.getRelatedTerm(); if(term.equals(currentTerm) || relatedTerm.equals(currentTerm)) { eventBus.fireEvent(new ViewTermEvent(currentTerm)); } } }); */ break; } } }; Column<Relationship, Relationship> deleteColumn = new Column<Relationship, Relationship>( new IconActionCell<Relationship>(ImageResources.INSTANCE.deleteIcon(), delegate)) { @Override public Relationship getValue(Relationship relationship) { switch (relationship.getStatus()) { case PENDING: return curator.equals(relationship.getCreatedBy()) ? relationship : null; case APPROVED: return BigDecimal.ONE.equals(curator.getEntityApprovalWeight(Entity.TERM_RELATIONSHIP)) ? relationship : null; } return null; } }; deleteColumn.setCellStyleNames("icon-action"); table.addColumn(deleteColumn, SafeHtmlUtils.fromSafeConstant(" ")); }
From source file:com.novartis.pcs.ontology.webapp.client.view.TermSynonymsView.java
License:Apache License
public void setCurator(final Curator curator) { final ReplaceSynonymPopup replaceSynonymView = new ReplaceSynonymPopup(service, eventBus); IconActionCell.Delegate<Synonym> delegate = new IconActionCell.Delegate<Synonym>() { @Override/* w ww .j a va 2 s. co m*/ public void execute(final Synonym synonym) { switch (synonym.getStatus()) { case PENDING: service.delete(synonym, new AsyncCallback<Void>() { @Override public void onFailure(Throwable caught) { GWT.log("Failed to delete pending synonym", caught); if (caught instanceof InvalidEntityException) { InvalidEntityException e = (InvalidEntityException) caught; //errorLabel.setText(e.getMessage() + ": " + e.getEntity()); //errorLabel.setVisible(true); } else { ErrorView.instance().onUncaughtException(caught); } } @Override public void onSuccess(Void nothing) { eventBus.fireEvent(new SynonymDeletedEvent(synonym)); } }); break; case APPROVED: replaceSynonymView.setSynonym(synonym); replaceSynonymView.show(); /* service.obsoleteSynonym(synonym.getId(), 0, null, new AsyncCallback<Synonym>() { @Override public void onFailure(Throwable caught) { GWT.log("Failed to obsolete synonym", caught); if(caught instanceof InvalidEntityException) { InvalidEntityException e = (InvalidEntityException)caught; //errorLabel.setText(e.getMessage() + ": " + e.getEntity()); //errorLabel.setVisible(true); } else { ErrorView.instance().onUncaughtException(caught); } } @Override public void onSuccess(Synonym synonym) { eventBus.fireEvent(new SynonymUpdatedEvent(synonym)); } }); */ break; } } }; Column<Synonym, Synonym> deleteColumn = new Column<Synonym, Synonym>( new IconActionCell<Synonym>(ImageResources.INSTANCE.deleteIcon(), delegate)) { @Override public Synonym getValue(Synonym synonym) { Datasource datasource = null; if (synonym.getControlledVocabularyTerm() != null) { datasource = synonym.getControlledVocabularyTerm().getControlledVocabulary().getDatasource(); } else if (synonym.getDatasource() != null) { datasource = synonym.getDatasource(); } if (datasource != null && datasource.isInternal()) { switch (synonym.getStatus()) { case PENDING: return curator.equals(synonym.getCreatedBy()) ? synonym : null; case APPROVED: return BigDecimal.ONE.equals(curator.getEntityApprovalWeight(Entity.TERM_SYNONYM)) ? synonym : null; } } return null; } }; deleteColumn.setCellStyleNames("icon-action"); table.addColumn(deleteColumn, SafeHtmlUtils.fromSafeConstant(" ")); }
From source file:com.sencha.gxt.explorer.client.databinding.BindingConverterExample.java
License:sencha.com license
@Override public Widget asWidget() { if (panel == null) { Stock stock = new Stock("wAYNE eNTERPRISES", 93.55, 0.0, 0.0, null, "Manufacturing"); final Driver driver = GWT.create(Driver.class); driver.initialize(this); driver.edit(stock);//from w w w . j a v a 2 s . c o m SafeHtml html = SafeHtmlUtils.fromSafeConstant("<div style=\"" + "padding-bottom: 10px; border-bottom: 1px dashed; margin-bottom: 10px; font-size: small;\">" + "This example illustrates how to perform automatic data conversion between a form field and " + "a backing data model using the GWT Editor framework." + "</div>"); TextButton button = new TextButton("Show Converted Model Value", new SelectHandler() { @Override @SuppressWarnings("deprecation") public void onSelect(SelectEvent event) { Stock s = driver.flush(); if (driver.hasErrors()) { new MessageBox("Please correct the errors before converting.").show(); return; } String modelValue = s.getName(); new MessageBox("Converted Value From Data Model", modelValue != null ? modelValue : " no value ").show(); } }); VerticalLayoutContainer container = new VerticalLayoutContainer(); container.add(new HTML(html), new VerticalLayoutData(1, -1)); container.add(new FieldLabel(nameField, "Name"), new VerticalLayoutData(1, -1)); panel = new ContentPanel(); panel.setHeading("Data Binding Converter"); panel.add(container, new MarginData(10)); panel.addButton(button); } return panel; }
From source file:com.sencha.gxt.explorer.client.grid.WordWrapGridExample.java
License:sencha.com license
@Override public Widget asWidget() { if (fp == null) { fp = new FramedPanel(); fp.setHeadingText("Word Wrap Grid"); fp.getHeader().setIcon(ExampleImages.INSTANCE.table()); fp.setPosition(10, 10);// ww w . ja va2 s .c o m fp.setPixelSize(600, 400); new Resizable(fp, Dir.E, Dir.SE, Dir.S); ToolButton tb = new ToolButton(ToolButton.QUESTION); ToolTipConfig ttc = new ToolTipConfig("Example Info", "This example illustrates word wrap in grid headings and rows."); ttc.setMaxWidth(225); tb.setToolTipConfig(ttc); fp.addTool(tb); List<ColumnConfig<Row, ?>> ccs = new LinkedList<ColumnConfig<Row, ?>>(); for (int i = 0; i < COLUMN_COUNT; i++) { ValueProvider<Row, String> cvp = rvp.getColumnValueProvider(i); SafeHtml sh = wrapString(createDummyText()); ColumnConfig<Row, String> cc = new ColumnConfig<Row, String>(cvp, 200, sh); // Use a custom cell renderer to support word wrap in the grid's cells cc.setCell(new AbstractCell<String>() { @Override public void render(Context context, String value, SafeHtmlBuilder sb) { if (value == null || value.isEmpty()) { sb.appendHtmlConstant(" "); } else { sb.append(wrapString(value)); } } }); ccs.add(cc); } final ColumnModel<Row> cm = new ColumnModel<Row>(ccs); final ListStore<Row> ls = new ListStore<Row>(new RowKeyProvider()); ls.setAutoCommit(true); int columnCount = ccs.size(); for (int i = 0; i < ROW_COUNT; i++) { Row row = new Row(columnCount); for (int j = 0; j < columnCount; j++) { row.setValue(j, createDummyText()); } ls.add(row); } final Grid<Row> g = new Grid<Row>(ls, cm, new WordWrapGridView()); g.getView().setColumnHeader(new WordWrapColumnHeader<Row>(g, cm)); g.getView().setColumnLines(true); final GridInlineEditing<Row> gie = new GridInlineEditing<Row>(g) { protected void onScroll(ScrollEvent event) { // Suppress default action, which may result in canceling edit } }; gie.setClicksToEdit(ClicksToEdit.TWO); gie.addStartEditHandler(new StartEditHandler<Row>() { @Override public void onStartEdit(StartEditEvent<Row> event) { GridCell cell = event.getEditCell(); ColumnConfig<Row, ?> cc = cm.getColumn(cell.getCol()); Field<Object> editor = (Field<Object>) gie.getEditor(cc); Element rowElement = g.getView().getRow(cell.getRow()); // Resize the inline editor to the height of the row and style it to match the text int height = rowElement.getOffsetHeight() - 1; editor.setHeight(height); XElement cellElement = g.getView().getCell(cell.getRow(), cell.getCol()).cast(); Style style = ((TextAreaAppearance) editor.getCell().getAppearance()) .getInputElement(editor.getElement()).getStyle(); String fontSize = cellElement.getComputedStyle("fontSize"); if (fontSize != null) { style.setProperty("fontSize", fontSize); } String fontFamily = cellElement.getComputedStyle("fontFamily"); if (fontFamily != null) { style.setProperty("fontFamily", fontFamily); } style.setOverflow(Overflow.HIDDEN); } }); for (ColumnConfig<Row, ?> cc : ccs) { @SuppressWarnings("unchecked") ColumnConfig<Row, String> scc = (ColumnConfig<Row, String>) cc; final TextArea ta = new TextArea(); ta.setPreventScrollbars(true); ta.addKeyDownHandler(new KeyDownHandler() { @Override public void onKeyDown(KeyDownEvent event) { // Allow the enter key to end grid inline editing if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { Scheduler.get().scheduleFinally(new RepeatingCommand() { @Override public boolean execute() { gie.completeEditing(); ta.clear(); return false; } }); } } }); gie.addEditor(scc, ta); } g.addViewReadyHandler(new ViewReadyHandler() { @Override public void onViewReady(ViewReadyEvent event) { Info.display("onViewReady", "heading width=" + g.getView().getHeader().getOffsetWidth() + ", height=" + g.getView().getHeader().getOffsetHeight()); g.getView().getHeader().addResizeHandler(new ResizeHandler() { @Override public void onResize(ResizeEvent event) { Info.display("onResize", "heading width=" + event.getWidth() + ", height=" + event.getHeight()); } }); } }); fp.setWidget(g); fp.addButton(new TextButton("Set Heading Text", new SelectHandler() { @Override public void onSelect(SelectEvent event) { final Window w = new Window(); w.setHeadingText("Set Heading Text"); w.setPixelSize(300, 200); w.setResizable(false); w.setModal(true); VerticalLayoutContainer vlc = new VerticalLayoutContainer(); w.setWidget(vlc); final IntegerSpinnerField index = new IntegerSpinnerField(); index.setMinValue(0); index.setMaxValue(COLUMN_COUNT - 1); index.setValue(0); index.setAllowBlank(false); index.setSelectOnFocus(true); vlc.add(new FieldLabel(index, "Column Index"), new VerticalLayoutData(1, -1, M1)); final TextArea text = new TextArea(); vlc.add(new FieldLabel(text, "Heading Text"), new VerticalLayoutData(1, 1, M2)); w.addButton(new TextButton("Cancel", new SelectHandler() { @Override public void onSelect(SelectEvent event) { w.hide(); } })); w.addButton(new TextButton("OK", new SelectHandler() { @Override public void onSelect(SelectEvent event) { if (index.validate()) { w.hide(); SafeHtml newHeading; String newText = text.getValue(); if (newText == null) { newHeading = SafeHtmlUtils.fromSafeConstant(" "); } else { newHeading = wrapString(newText); } ColumnModel<Row> columnModel = g.getColumnModel(); columnModel.setColumnHeader(index.getValue(), newHeading); } } })); w.show(); w.setFocusWidget(index); } })); fp.addButton(new TextButton("Set Cell Text", new SelectHandler() { @Override public void onSelect(SelectEvent event) { final Window w = new Window(); w.setHeadingText("Set Cell Text"); w.setPixelSize(300, 200); w.setResizable(false); w.setModal(true); VerticalLayoutContainer vlc = new VerticalLayoutContainer(); w.setWidget(vlc); final IntegerSpinnerField rowIndex = new IntegerSpinnerField(); rowIndex.setMinValue(0); rowIndex.setMaxValue(ROW_COUNT - 1); rowIndex.setValue(0); rowIndex.setAllowBlank(false); rowIndex.setSelectOnFocus(true); vlc.add(new FieldLabel(rowIndex, "Row Index"), new VerticalLayoutData(1, -1, M1)); final IntegerSpinnerField columnIndex = new IntegerSpinnerField(); columnIndex.setMinValue(0); columnIndex.setMaxValue(COLUMN_COUNT - 1); columnIndex.setValue(0); columnIndex.setAllowBlank(false); columnIndex.setSelectOnFocus(true); vlc.add(new FieldLabel(columnIndex, "Column Index"), new VerticalLayoutData(1, -1, M1)); final TextArea text = new TextArea(); vlc.add(new FieldLabel(text, "Cell Text"), new VerticalLayoutData(1, 1, M2)); w.addButton(new TextButton("Cancel", new SelectHandler() { @Override public void onSelect(SelectEvent event) { w.hide(); } })); w.addButton(new TextButton("OK", new SelectHandler() { @Override public void onSelect(SelectEvent event) { if (rowIndex.validate() && columnIndex.validate()) { w.hide(); String newText = text.getValue(); if (newText == null) { newText = ""; } Row row = ls.get(rowIndex.getValue()); row.setValue(columnIndex.getValue(), newText); ls.update(row); } } })); w.show(); w.setFocusWidget(rowIndex); } })); fp.addButton(new TextButton("Set Column Width", new SelectHandler() { @Override public void onSelect(SelectEvent event) { final Window w = new Window(); w.setHeadingText("Set Column Width"); w.setPixelSize(300, 150); w.setResizable(false); w.setModal(true); VerticalLayoutContainer vlc = new VerticalLayoutContainer(); w.setWidget(vlc); final IntegerSpinnerField columnIndex = new IntegerSpinnerField(); columnIndex.setMinValue(0); columnIndex.setMaxValue(COLUMN_COUNT - 1); columnIndex.setValue(0); columnIndex.setAllowBlank(false); columnIndex.setSelectOnFocus(true); vlc.add(new FieldLabel(columnIndex, "Column Index"), new VerticalLayoutData(1, -1, M1)); final IntegerSpinnerField width = new IntegerSpinnerField(); width.setMinValue(0); width.setValue(50); width.setAllowBlank(false); width.setSelectOnFocus(true); vlc.add(new FieldLabel(width, "Column Width"), new VerticalLayoutData(1, -1, M2)); w.addButton(new TextButton("Cancel", new SelectHandler() { @Override public void onSelect(SelectEvent event) { w.hide(); } })); w.addButton(new TextButton("OK", new SelectHandler() { @Override public void onSelect(SelectEvent event) { if (columnIndex.validate() && width.validate()) { w.hide(); g.getColumnModel().setColumnWidth(columnIndex.getValue(), width.getValue()); } } })); w.show(); w.setFocusWidget(columnIndex); } })); fp.addButton(new TextButton("Set Heading Height", new SelectHandler() { @Override public void onSelect(SelectEvent event) { final Window w = new Window(); w.setHeadingText("Set Heading Height"); w.setPixelSize(300, 250); w.setResizable(false); w.setModal(true); VerticalLayoutContainer vlc = new VerticalLayoutContainer(); w.setWidget(vlc); vlc.add(new HTML( "<span style='font: 12px tahoma,arial,verdana,sans-serif;'>Sets the size of the heading to a fixed height. If this height is less than the height of the heading text, the heading text will be truncated.<br><br>To restore automatic sizing, specify a value of -1.<br><br></span>"), new VerticalLayoutData(1, -1, M1)); final IntegerSpinnerField height = new IntegerSpinnerField(); height.setMinValue(-1); height.setValue(50); height.setAllowBlank(false); height.setSelectOnFocus(true); vlc.add(new FieldLabel(height, "Heading Height"), new VerticalLayoutData(1, -1, M2)); w.addButton(new TextButton("Cancel", new SelectHandler() { @Override public void onSelect(SelectEvent event) { w.hide(); } })); w.addButton(new TextButton("OK", new SelectHandler() { @Override public void onSelect(SelectEvent event) { if (height.validate()) { w.hide(); g.getView().getHeader().setHeight(height.getValue()); } } })); w.show(); w.setFocusWidget(height); } })); fp.addButton(new TextButton("Get Heading Height", new SelectHandler() { @Override public void onSelect(SelectEvent event) { int headerHeight = g.getView().getHeader().getOffsetHeight(); Info.display("getHeight", "height=" + headerHeight); } })); final ToggleButton fftb = new ToggleButton("Force Fit"); fftb.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { if (fftb.getValue()) { columnWidths.save(g); g.getView().setForceFit(true); } else { g.getView().setForceFit(false); columnWidths.restore(g); } g.getView().layout(); } }); fp.addButton(fftb); fp.show(); } return fp; }
From source file:com.spshop.admin.client.sample.CwCellTable.java
License:Apache License
/** * Add the columns to the table./* www . j a v a 2s .c o m*/ */ private void initTableColumns(final SelectionModel<ContactInfo> selectionModel, ListHandler<ContactInfo> sortHandler) { // Checkbox column. This table will uses a checkbox column for selection. // Alternatively, you can call cellTable.setSelectionEnabled(true) to enable // mouse selection. Column<ContactInfo, Boolean> checkColumn = new Column<ContactInfo, Boolean>(new CheckboxCell(true, false)) { @Override public Boolean getValue(ContactInfo object) { // Get the value from the selection model. return selectionModel.isSelected(object); } }; cellTable.addColumn(checkColumn, SafeHtmlUtils.fromSafeConstant("<br/>")); cellTable.setColumnWidth(checkColumn, 40, Unit.PX); // First name. Column<ContactInfo, String> firstNameColumn = new Column<ContactInfo, String>(new EditTextCell()) { @Override public String getValue(ContactInfo object) { return object.getFirstName(); } }; firstNameColumn.setSortable(true); sortHandler.setComparator(firstNameColumn, new Comparator<ContactInfo>() { public int compare(ContactInfo o1, ContactInfo o2) { return o1.getFirstName().compareTo(o2.getFirstName()); } }); cellTable.addColumn(firstNameColumn, constants.cwCellTableColumnFirstName()); firstNameColumn.setFieldUpdater(new FieldUpdater<ContactInfo, String>() { public void update(int index, ContactInfo object, String value) { // Called when the user changes the value. object.setFirstName(value); ContactDatabase.get().refreshDisplays(); } }); cellTable.setColumnWidth(firstNameColumn, 20, Unit.PCT); // Last name. Column<ContactInfo, String> lastNameColumn = new Column<ContactInfo, String>(new EditTextCell()) { @Override public String getValue(ContactInfo object) { return object.getLastName(); } }; lastNameColumn.setSortable(true); sortHandler.setComparator(lastNameColumn, new Comparator<ContactInfo>() { public int compare(ContactInfo o1, ContactInfo o2) { return o1.getLastName().compareTo(o2.getLastName()); } }); cellTable.addColumn(lastNameColumn, constants.cwCellTableColumnLastName()); lastNameColumn.setFieldUpdater(new FieldUpdater<ContactInfo, String>() { public void update(int index, ContactInfo object, String value) { // Called when the user changes the value. object.setLastName(value); ContactDatabase.get().refreshDisplays(); } }); cellTable.setColumnWidth(lastNameColumn, 20, Unit.PCT); // Category. final Category[] categories = ContactDatabase.get().queryCategories(); List<String> categoryNames = new ArrayList<String>(); for (Category category : categories) { categoryNames.add(category.getDisplayName()); } SelectionCell categoryCell = new SelectionCell(categoryNames); Column<ContactInfo, String> categoryColumn = new Column<ContactInfo, String>(categoryCell) { @Override public String getValue(ContactInfo object) { return object.getCategory().getDisplayName(); } }; cellTable.addColumn(categoryColumn, constants.cwCellTableColumnCategory()); categoryColumn.setFieldUpdater(new FieldUpdater<ContactInfo, String>() { public void update(int index, ContactInfo object, String value) { for (Category category : categories) { if (category.getDisplayName().equals(value)) { object.setCategory(category); } } ContactDatabase.get().refreshDisplays(); } }); cellTable.setColumnWidth(categoryColumn, 130, Unit.PX); // Address. Column<ContactInfo, String> addressColumn = new Column<ContactInfo, String>(new TextCell()) { @Override public String getValue(ContactInfo object) { return object.getAddress(); } }; addressColumn.setSortable(true); sortHandler.setComparator(addressColumn, new Comparator<ContactInfo>() { public int compare(ContactInfo o1, ContactInfo o2) { return o1.getAddress().compareTo(o2.getAddress()); } }); cellTable.addColumn(addressColumn, constants.cwCellTableColumnAddress()); cellTable.setColumnWidth(addressColumn, 60, Unit.PCT); }
From source file:com.tasktop.c2c.server.tasks.client.widgets.admin.customfields.CustomFieldValuesEditor.java
License:Open Source License
private void initTableColumns() { DelegateCell<String> moveUpCell = new DelegateCell<String>(new DelegateCell.RenderDelegate<String>() { @Override/*from www .j a va 2 s. c o m*/ public SafeHtml render(Cell.Context context, String value, SafeHtmlBuilder sb) { return SafeHtmlUtils.fromSafeConstant("<span class=\"order-control\"><a class=\"up\"/></span>"); } }, new DelegateCell.ActionDelegate<String>() { @Override public void execute(Cell.Context object) { int index = object.getIndex(); if (index > 0) { dataProvider.getList().get(index).setSortkey((short) (index - 1)); dataProvider.getList().get(index - 1).setSortkey((short) index); Collections.sort(dataProvider.getList()); refreshDisplays(); } } }); Column<CustomFieldValue, String> moveUpColumn = new Column<CustomFieldValue, String>(moveUpCell) { @Override public String getValue(CustomFieldValue object) { return null; } @Override public void render(Cell.Context context, CustomFieldValue object, SafeHtmlBuilder sb) { if (context.getIndex() != 0) { super.render(context, object, sb); } } }; cellTable.addColumn(moveUpColumn); cellTable.setColumnWidth(moveUpColumn, 22, Unit.PX); DelegateCell<String> moveDownCell = new DelegateCell<String>(new DelegateCell.RenderDelegate<String>() { @Override public SafeHtml render(Cell.Context context, String value, SafeHtmlBuilder sb) { return SafeHtmlUtils.fromSafeConstant("<span class=\"order-control\"><a class=\"down\"/></span>"); } }, new DelegateCell.ActionDelegate<String>() { @Override public void execute(Cell.Context object) { Short index = (short) object.getIndex(); if (index < dataProvider.getList().size() - 1) { dataProvider.getList().get(index).setSortkey((short) (index + 1)); dataProvider.getList().get(index + 1).setSortkey((short) index); Collections.sort(dataProvider.getList()); refreshDisplays(); } } }); Column<CustomFieldValue, String> moveDownColumn = new Column<CustomFieldValue, String>(moveDownCell) { @Override public String getValue(CustomFieldValue object) { return null; } @Override public void render(Cell.Context context, CustomFieldValue object, SafeHtmlBuilder sb) { if (context.getIndex() != dataProvider.getList().size() - 1) { super.render(context, object, sb); } } }; cellTable.addColumn(moveDownColumn); cellTable.setColumnWidth(moveDownColumn, 22, Unit.PX); Column<CustomFieldValue, String> nameColumn = new Column<CustomFieldValue, String>(new TextInputCell()) { @Override public String getValue(CustomFieldValue value) { return value.getValue(); } }; nameColumn.setFieldUpdater(new FieldUpdater<CustomFieldValue, String>() { @Override public void update(int index, CustomFieldValue customFieldValue, String value) { customFieldValue.setValue(value); } }); cellTable.addColumn(nameColumn); DelegateCell<String> removeCell = new DelegateCell<String>(new DelegateCell.RenderDelegate<String>() { @Override public SafeHtml render(Cell.Context context, String value, SafeHtmlBuilder sb) { final CustomFieldValue referenced = dataProvider.getList().get(context.getIndex()); if (referenced != null && "---".equals(referenced.getValue())) { return SafeHtmlUtils.fromSafeConstant("<a class=\"delete-disabled\"><span/></a>"); } return SafeHtmlUtils.fromSafeConstant("<a class=\"misc-icon cancel\"><span/></a>"); } }, new DelegateCell.ActionDelegate<String>() { @Override public void execute(final Cell.Context object) { final CustomFieldValue toRemove = dataProvider.getList().get(object.getIndex()); if (toRemove == null) { return; } if ("---".equals(toRemove.getValue())) { return; } dataProvider.getList().remove(toRemove); } }); Column<CustomFieldValue, String> removeColumn = new Column<CustomFieldValue, String>(removeCell) { @Override public String getValue(CustomFieldValue object) { return null; } @Override public void render(Cell.Context context, CustomFieldValue object, SafeHtmlBuilder sb) { if (dataProvider.getList().size() == 1) { sb.appendHtmlConstant("<a><span/></a>"); } else { super.render(context, object, sb); } } }; cellTable.addColumn(removeColumn); cellTable.setColumnWidth(removeColumn, 30, Unit.PX); DelegateCell<String> addCell = new DelegateCell<String>(new DelegateCell.RenderDelegate<String>() { @Override public SafeHtml render(Cell.Context context, String value, SafeHtmlBuilder sb) { return SafeHtmlUtils.fromSafeConstant("<a class=\"misc-icon add right\"><span/></a>"); } }, new DelegateCell.ActionDelegate<String>() { @Override public void execute(Cell.Context object) { addNewValue(); } }); Column<CustomFieldValue, String> addColumn = new Column<CustomFieldValue, String>(addCell) { @Override public String getValue(CustomFieldValue object) { return null; } @Override public void render(Cell.Context context, CustomFieldValue object, SafeHtmlBuilder sb) { if (context.getIndex() == dataProvider.getList().size() - 1) { super.render(context, object, sb); } else { sb.appendHtmlConstant("<a><span/></a>"); } } }; cellTable.addColumn(addColumn); cellTable.setColumnWidth(addColumn, 30, Unit.PX); }
From source file:com.tasktop.c2c.server.tasks.client.widgets.admin.products.ProjectAdminTasksEditView.java
License:Open Source License
private void createReleasesTable() { milestoneTable = new CellTable<Milestone>(10, resources); milestoneTable.setWidth("320px", true); DelegateCell<String> moveReleaseUpCell = new DelegateCell<String>( new DelegateCell.RenderDelegate<String>() { @Override//from ww w .j ava 2s . co m public SafeHtml render(Cell.Context context, String value, SafeHtmlBuilder sb) { return SafeHtmlUtils .fromSafeConstant("<span class=\"order-control\"><a class=\"up\"/></span>"); } }, new DelegateCell.ActionDelegate<String>() { @Override public void execute(Cell.Context object) { int index = object.getIndex(); if (index > 0) { milestonesEditor.getList().get(index).setSortkey((short) (index - 1)); milestonesEditor.getList().get(index - 1).setSortkey((short) index); Collections.sort(milestonesEditor.getList()); milestoneTable.setRowData(milestonesEditor.getList()); } } }); Column<Milestone, String> moveReleaseUpColumn = new Column<Milestone, String>(moveReleaseUpCell) { @Override public String getValue(Milestone object) { return null; } @Override public void render(Cell.Context context, Milestone object, SafeHtmlBuilder sb) { if (context.getIndex() != 0) { super.render(context, object, sb); } } }; milestoneTable.addColumn(moveReleaseUpColumn); milestoneTable.setColumnWidth(moveReleaseUpColumn, 22, Unit.PX); DelegateCell<String> moveReleaseDownCell = new DelegateCell<String>( new DelegateCell.RenderDelegate<String>() { @Override public SafeHtml render(Cell.Context context, String value, SafeHtmlBuilder sb) { return SafeHtmlUtils .fromSafeConstant("<span class=\"order-control\"><a class=\"down\"/></span>"); } }, new DelegateCell.ActionDelegate<String>() { @Override public void execute(Cell.Context object) { Short index = (short) object.getIndex(); if (index < milestonesEditor.getList().size() - 1) { milestonesEditor.getList().get(index).setSortkey((short) (index + 1)); milestonesEditor.getList().get(index + 1).setSortkey(index); Collections.sort(milestonesEditor.getList()); milestoneTable.setRowData(milestonesEditor.getList()); } } }); Column<Milestone, String> moveReleaseDownColumn = new Column<Milestone, String>(moveReleaseDownCell) { @Override public String getValue(Milestone object) { return null; } @Override public void render(Cell.Context context, Milestone object, SafeHtmlBuilder sb) { if (context.getIndex() != milestonesEditor.getList().size() - 1) { super.render(context, object, sb); } } }; milestoneTable.addColumn(moveReleaseDownColumn); milestoneTable.setColumnWidth(moveReleaseDownColumn, 22, Unit.PX); DelegateCell<String> moveReleaseToTopCell = new DelegateCell<String>( new DelegateCell.RenderDelegate<String>() { @Override public SafeHtml render(Cell.Context context, String value, SafeHtmlBuilder sb) { return SafeHtmlUtils .fromSafeConstant("<span class=\"order-control\"><a class=\"top\"/></span>"); } }, new DelegateCell.ActionDelegate<String>() { @Override public void execute(Cell.Context object) { int index = object.getIndex(); Milestone topRelease = milestonesEditor.getList().get(index); milestonesEditor.getList().remove(topRelease); milestonesEditor.getList().add(0, topRelease); int i = 0; for (Milestone milestone : milestonesEditor.getList()) { milestone.setSortkey((short) i); i++; } Collections.sort(milestonesEditor.getList()); milestoneTable.setRowData(milestonesEditor.getList()); } }); Column<Milestone, String> moveReleaseToTopColumn = new Column<Milestone, String>(moveReleaseToTopCell) { @Override public String getValue(Milestone object) { return null; } @Override public void render(Cell.Context context, Milestone object, SafeHtmlBuilder sb) { if (context.getIndex() != 0) { super.render(context, object, sb); } } }; milestoneTable.addColumn(moveReleaseToTopColumn); milestoneTable.setColumnWidth(moveReleaseToTopColumn, 22, Unit.PX); Column<Milestone, String> releaseVersionColumn = addColumn( new TextBoxCell(new TextBoxCell.TemplateDelegate() { @Override public SafeHtml getHtml(Context context, String string) { SafeHtml releaseVerHtml = template.releaseVersion(tasksMessages.releaseVersion(), string); String fieldName = "value"; if (ValidationUtils.hasError(context.getKey(), fieldName, errorTable)) { String errorMsg = ValidationUtils.getErrorMessage(context.getKey(), fieldName, errorTable); return template.errorWrapper(releaseVerHtml, SafeHtmlUtils.fromString(errorMsg)); } else { return releaseVerHtml; } } }), new GetValue<Milestone, String>() { @Override public String getValue(Milestone object) { return milestonesEditor.getEditors() .get(milestonesEditor.getList().indexOf(object)).valueEditor.getValue(); } }); releaseVersionColumn.setFieldUpdater(new FieldUpdater<Milestone, String>() { @Override public void update(int index, Milestone object, String value) { Milestone currentDefaultMilestone = productDefaultRelease.getValue(); for (Milestone milestone : presenter.getProduct().getMilestones()) { if (milestone.getId().equals(object.getId())) { milestone.setValue(value); break; } } for (Milestone milestone : presenter.getProduct().getMilestones()) { if (milestone.getId().equals(currentDefaultMilestone.getId())) { productDefaultRelease.asEditor().getValue().setValue(value); break; } } milestonesEditor.getEditors().get(index).valueEditor.setValue(value); productDefaultRelease.setAcceptableValues(presenter.getProduct().getMilestones()); } }); milestoneTable.addColumn(releaseVersionColumn); milestoneTable.setColumnWidth(releaseVersionColumn, 250, Unit.PX); DelegateCell<String> removeReleaseCell = new DelegateCell<String>( new DelegateCell.RenderDelegate<String>() { @Override public SafeHtml render(Cell.Context context, String value, SafeHtmlBuilder sb) { final Milestone referenced = milestonesEditor.getList().get(context.getIndex()); if (referenced != null && "---".equals(referenced.getValue())) { return SafeHtmlUtils.fromSafeConstant("<a class=\"delete-disabled\"><span/></a>"); } return SafeHtmlUtils.fromSafeConstant("<a class=\"misc-icon cancel\"><span/></a>"); } }, new DelegateCell.ActionDelegate<String>() { @Override public void execute(final Cell.Context object) { final Milestone toRemove = milestonesEditor.getList().get(object.getIndex()); if (toRemove == null) { return; } if ("---".equals(toRemove.getValue())) { return; } presenter.deleteMilestone(toRemove.getId(), new ClientCallback<Void>() { @Override public void onReturn(Void aVoid) { for (Milestone milestone : presenter.getProduct().getMilestones()) { if (milestone.getId().equals(toRemove.getId())) { presenter.getProduct().getMilestones().remove(milestone); break; } } productDefaultRelease.setAcceptableValues(presenter.getProduct().getMilestones()); milestonesEditor.getList().remove(toRemove); milestoneTable.setRowData(milestonesEditor.getList()); } }); } }); Column<Milestone, String> removeReleaseColumn = new Column<Milestone, String>(removeReleaseCell) { @Override public String getValue(Milestone object) { return null; } @Override public void render(Cell.Context context, Milestone object, SafeHtmlBuilder sb) { if (milestoneTable.getRowCount() == 1) { sb.appendHtmlConstant("<a><span/></a>"); } else { super.render(context, object, sb); } } }; milestoneTable.addColumn(removeReleaseColumn); milestoneTable.setColumnWidth(removeReleaseColumn, 30, Unit.PX); DelegateCell<String> addReleaseCell = new DelegateCell<String>(new DelegateCell.RenderDelegate<String>() { @Override public SafeHtml render(Cell.Context context, String value, SafeHtmlBuilder sb) { return SafeHtmlUtils.fromSafeConstant("<a class=\"misc-icon add right\"><span/></a>"); } }, new DelegateCell.ActionDelegate<String>() { @Override public void execute(Cell.Context object) { Milestone newMilestone = presenter.createNewTransientMilestone(milestonesEditor.getList()); milestonesEditor.getList().add(newMilestone); milestoneTable.setRowData(milestonesEditor.getList()); presenter.getProduct().getMilestones().add(ProjectAdminTasksUtil.duplicateMilestone(newMilestone)); productDefaultRelease.setAcceptableValues(presenter.getProduct().getMilestones()); } }); Column<Milestone, String> addReleaseColumn = new Column<Milestone, String>(addReleaseCell) { @Override public String getValue(Milestone object) { return null; } @Override public void render(Cell.Context context, Milestone object, SafeHtmlBuilder sb) { if (context.getIndex() == milestoneTable.getRowCount() - 1) { super.render(context, object, sb); } else { sb.appendHtmlConstant("<a><span/></a>"); } } }; milestoneTable.addColumn(addReleaseColumn); milestoneTable.setColumnWidth(addReleaseColumn, 30, Unit.PX); }
From source file:com.tasktop.c2c.server.tasks.client.widgets.admin.products.ProjectAdminTasksEditView.java
License:Open Source License
private void createComponentsTable() { componentsTable = new CellTable<Component>(10, resources); componentListDataProvider.addDataDisplay(componentsTable); componentsTable.setWidth("540px", true); Column<Component, String> nameColumn = addColumn(new TextBoxCell(new TextBoxCell.TemplateDelegate() { @Override//from w w w . j a v a 2 s . c o m public SafeHtml getHtml(Context context, String string) { SafeHtml componentNameHtml = template.componentName(commonProfileMessages.name(), string); String fieldName = "name"; if (ValidationUtils.hasError(context.getKey(), fieldName, errorTable)) { String errorMsg = ValidationUtils.getErrorMessage(context.getKey(), fieldName, errorTable); return template.errorWrapper(componentNameHtml, SafeHtmlUtils.fromString(errorMsg)); } else { return componentNameHtml; } } }), new GetValue<Component, String>() { @Override public String getValue(Component object) { return componentsEditor.getEditors().get(componentsEditor.getList().indexOf(object)).nameEditor .getValue(); } }); nameColumn.setFieldUpdater(new FieldUpdater<Component, String>() { @Override public void update(int index, Component object, String value) { componentsEditor.getEditors().get(index).nameEditor.setValue(value); } }); componentsTable.addColumn(nameColumn, SafeHtmlUtils.fromSafeConstant("<h4>Name</h4>")); componentsTable.setColumnWidth(nameColumn, 250, Unit.PX); Column<Component, String> descriptionColumn = addColumn(new TextBoxCell(new TextBoxCell.TemplateDelegate() { @Override public SafeHtml getHtml(Context context, String string) { SafeHtml componentDescHtml = template.componentDescription(tasksMessages.description(), string); String fieldName = "description"; if (ValidationUtils.hasError(context.getKey(), fieldName, errorTable)) { String errorMsg = ValidationUtils.getErrorMessage(context.getKey(), fieldName, errorTable); return template.errorWrapper(componentDescHtml, SafeHtmlUtils.fromString(errorMsg)); } else { return componentDescHtml; } } }), new GetValue<Component, String>() { @Override public String getValue(Component object) { return componentsEditor.getEditors() .get(componentsEditor.getList().indexOf(object)).descriptionEditor.getValue(); } }); descriptionColumn.setFieldUpdater(new FieldUpdater<Component, String>() { @Override public void update(int index, Component object, String value) { componentsEditor.getEditors().get(index).descriptionEditor.setValue(value); } }); componentsTable.addColumn(descriptionColumn, SafeHtmlUtils.fromSafeConstant("<h4>" + tasksMessages.description() + "</h4>")); componentsTable.setColumnWidth(descriptionColumn, 250, Unit.PX); DelegateCell<String> removeComponentCell = new DelegateCell<String>( new DelegateCell.RenderDelegate<String>() { @Override public SafeHtml render(Cell.Context context, String value, SafeHtmlBuilder sb) { return SafeHtmlUtils.fromSafeConstant("<a class=\"misc-icon cancel\"><span/></a>"); } }, new DelegateCell.ActionDelegate<String>() { @Override public void execute(final Cell.Context object) { presenter.deleteComponent(componentsEditor.getList().get(object.getIndex()).getId(), new ClientCallback<Void>() { @Override public void onReturn(Void aVoid) { componentsEditor.getList().remove(object.getIndex()); componentsTable.setRowData(componentsEditor.getList()); } }); } }); Column<Component, String> removeComponentColumn = new Column<Component, String>(removeComponentCell) { @Override public String getValue(Component object) { return null; } @Override public void render(Cell.Context context, Component object, SafeHtmlBuilder sb) { if (componentsTable.getRowCount() == 1) { sb.appendHtmlConstant("<a><span/></a>"); } else { super.render(context, object, sb); } } }; componentsTable.addColumn(removeComponentColumn); componentsTable.setColumnWidth(removeComponentColumn, 30, Unit.PX); DelegateCell<String> addComponentCell = new DelegateCell<String>(new DelegateCell.RenderDelegate<String>() { @Override public SafeHtml render(Cell.Context context, String value, SafeHtmlBuilder sb) { return SafeHtmlUtils.fromSafeConstant("<a class=\"misc-icon add right\"><span/></a>"); } }, new DelegateCell.ActionDelegate<String>() { @Override public void execute(Cell.Context object) { componentsEditor.getList().add(presenter.createNewTransientComponent(componentsEditor.getList())); componentsTable.setRowData(componentsEditor.getList()); } }); Column<Component, String> addComponentColumn = new Column<Component, String>(addComponentCell) { @Override public String getValue(Component object) { return null; } @Override public void render(Cell.Context context, Component object, SafeHtmlBuilder sb) { if (context.getIndex() == componentsTable.getRowCount() - 1) { super.render(context, object, sb); } else { sb.appendHtmlConstant("<a><span/></a>"); } } }; componentsTable.addColumn(addComponentColumn); componentsTable.setColumnWidth(addComponentColumn, 25, Unit.PX); }