List of usage examples for com.google.gwt.safehtml.shared SafeHtmlUtils fromString
public static SafeHtml fromString(String s)
From source file:cc.alcina.framework.gwt.client.widget.dialog.OkCancelDialogBox.java
License:Apache License
public OkCancelDialogBox(String title, Widget widget, PermissibleActionListener listener, HorizontalAlignmentConstant widgetAlign) { this.widget = widget; this.vetoableActionListener = listener; setText(title);/*from w w w .j a va 2 s. c o m*/ setAnimationEnabled(showAnimated()); VerticalPanel vp = new VerticalPanel(); vp.add(widget); vp.setCellHorizontalAlignment(widget, widgetAlign); buttonsPanel = new HorizontalPanel(); cancelButton = new Button("Cancel"); cancelButton.addClickHandler(e -> cancel()); okButton = new Button(SafeHtmlUtils.fromString(getOKButtonName())); okButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { onOkButtonClicked(); } }); buttonsPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); buttonsPanel.setSpacing(8); buttonsPanel.add(okButton); buttonsPanel.add(cancelButton); vp.add(buttonsPanel); vp.setCellHorizontalAlignment(buttonsPanel, HasHorizontalAlignment.ALIGN_CENTER); setWidget(vp); adjustDisplay(); center(); }
From source file:cimav.client.view.nomina.HorasExtrasUI.java
private void initTableColumns() { // id + icon remove Column<HoraExtra, String> iconCol = new Column<HoraExtra, String>( new NomIconInputCell(NomIconInputCell.HORA_EXTRA)) { @Override//from ww w .ja v a 2 s. co m public String getValue(HoraExtra object) { return "" + object.getId(); } }; dataGrid.addColumn(iconCol, ""); dataGrid.setColumnWidth(iconCol, 16, Style.Unit.PX); // Semana Column<HoraExtra, SafeHtml> semanaCol = new Column<HoraExtra, SafeHtml>(new SafeHtmlCell()) { @Override public SafeHtml getValue(HoraExtra object) { SafeHtmlBuilder a = new SafeHtmlBuilder(); a.appendHtmlConstant("<span>" + object.getWeekOfYear() + "</span>"); // if (object.getConcepto().getSuma()) { // a.appendHtmlConstant("<span>" + object.getConcepto().getName() + "</span>"); // } else { // a.appendHtmlConstant("<span style='color: grey; font-style: italic;'>" + object.getConcepto().getName() + "</span>"); // } return a.toSafeHtml(); } }; dataGrid.addColumn(semanaCol, "Semana"); dataGrid.setColumnWidth(semanaCol, 120, Style.Unit.PCT); // Fecha Column<HoraExtra, Date> diaCol = new Column<HoraExtra, Date>(diaCell) { @Override public Date getValue(HoraExtra object) { return object.getDia(); } }; diaCol.setFieldUpdater(new FieldUpdater<HoraExtra, Date>() { @Override public void update(int index, HoraExtra object, Date value) { try { object.setDia(value); //object.ajustar(); getHorasExtrasREST().update(object); } catch (Exception ex) { } diaCell.clearViewData(object); int absRowIndex = index; dataGrid.redrawRow(absRowIndex); } }); dataGrid.addColumn(diaCol, "Da (fecha)"); dataGrid.setColumnWidth(diaCol, 120, Style.Unit.PX); // Horas Column<HoraExtra, String> horasCol = new Column<HoraExtra, String>(horasCell) { @Override public String getValue(HoraExtra object) { Double result = object == null || object.getHoras() == null ? 0 : object.getHoras(); return Double.toString(result); } }; horasCol.setFieldUpdater(new FieldUpdater<HoraExtra, String>() { @Override public void update(int index, HoraExtra object, String value) { try { Double horas = Double.parseDouble(value); object.setHoras(horas); //object.ajustar(); getHorasExtrasREST().update(object); } catch (Exception ex) { } horasCell.clearViewData(object); int absRowIndex = index; dataGrid.redrawRow(absRowIndex); } }); horasCol.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); Header<String> forzarFooter = new Header<String>(new TextCell()) { @Override public String getValue() { return " "; } }; dataGrid.addColumn(horasCol, new SafeHtmlHeader(SafeHtmlUtils.fromString("Horas")), forzarFooter); dataGrid.setColumnWidth(horasCol, 68, Style.Unit.PX); }
From source file:cimav.client.view.nomina.NominaFaltasUI.java
private void initTableColumns() { // id + icon remove Column<Incidencia, String> iconCol = new Column<Incidencia, String>( new NomIconInputCell(NomIconInputCell.FALTA)) { @Override//from w w w .j av a 2 s . co m public String getValue(Incidencia object) { return "" + object.getId(); } }; dataGrid.addColumn(iconCol, ""); dataGrid.setColumnWidth(iconCol, 16, Style.Unit.PX); // Id+Tipo Column<Incidencia, SafeHtml> tipoCol = new Column<Incidencia, SafeHtml>(new SafeHtmlCell()) { @Override public SafeHtml getValue(Incidencia object) { SafeHtmlBuilder sb = new SafeHtmlBuilder(); sb.appendHtmlConstant( "<div style='outline-style:none; white-space: nowrap;'><strong style='font-size: 12px; padding-right: 3px;'>" + object.getCode() + "</strong> " + "<span>" + object.getTipo().getDescripcion() + "</span></div>"); return sb.toSafeHtml(); } }; dataGrid.addColumn(tipoCol, "Tipo"); dataGrid.setColumnWidth(tipoCol, 60, Style.Unit.PCT); // Fecha Column<Incidencia, Date> fechaCol = new Column<Incidencia, Date>(fechaInicioCell) { @Override public Date getValue(Incidencia object) { return object.getFechaInicial(); } }; fechaCol.setFieldUpdater(new FieldUpdater<Incidencia, Date>() { @Override public void update(int index, Incidencia object, Date value) { try { object.setFechaInicial(value); object.ajustar(); getIncidenciasREST().update(object); } catch (Exception ex) { } fechaInicioCell.clearViewData(object); int absRowIndex = index; dataGrid.redrawRow(absRowIndex); } }); dataGrid.addColumn(fechaCol, "Fecha"); dataGrid.setColumnWidth(fechaCol, 120, Style.Unit.PX); // Dias Column<Incidencia, String> diasCol = new Column<Incidencia, String>(diasCell) { @Override public String getValue(Incidencia object) { Integer result = object == null || object.getDias() == null ? 0 : object.getDias(); return Integer.toString(result); } }; diasCol.setFieldUpdater(new FieldUpdater<Incidencia, String>() { @Override public void update(int index, Incidencia object, String value) { try { Integer dias = Integer.parseInt(value); object.setDias(dias); object.ajustar(); getIncidenciasREST().update(object); } catch (Exception ex) { } diasCell.clearViewData(object); int absRowIndex = index; dataGrid.redrawRow(absRowIndex); } }); diasCol.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); dataGrid.addColumn(diasCol, "Das"); dataGrid.setColumnWidth(diasCol, 88, Style.Unit.PX); // Dias Habiles Column<Incidencia, SafeHtml> diasHabilesCols = new Column<Incidencia, SafeHtml>(new SafeHtmlCell()) { @Override public SafeHtml getValue(Incidencia object) { Integer result = object == null || object.getDiasHabiles() == null ? 0 : object.getDiasHabiles(); SafeHtmlBuilder sb = new SafeHtmlBuilder(); sb.appendHtmlConstant( "<div style='outline-style:none; white-space: nowrap;'><strong style='font-size: 12px; padding-right: 6px;'>" + Integer.toString(result) + "</strong></div>"); return sb.toSafeHtml(); } }; diasHabilesCols.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); dataGrid.addColumn(diasHabilesCols, new SafeHtmlHeader(SafeHtmlUtils.fromString("Hbiles"))); dataGrid.setColumnWidth(diasHabilesCols, 68, Style.Unit.PX); // Dias Inhabiles Column<Incidencia, SafeHtml> diasInhabiles = new Column<Incidencia, SafeHtml>(new SafeHtmlCell()) { @Override public SafeHtml getValue(Incidencia object) { Integer result = object == null || object.getDiasInhabiles() == null ? 0 : object.getDiasInhabiles(); SafeHtmlBuilder sb = new SafeHtmlBuilder(); sb.appendHtmlConstant( "<div style='outline-style:none; white-space: nowrap;'><strong style='font-size: 12px; padding-right: 6px;'>" + Integer.toString(result) + "</strong></div>"); return sb.toSafeHtml(); } }; diasInhabiles.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); dataGrid.addColumn(diasInhabiles, new SafeHtmlHeader(SafeHtmlUtils.fromString("Inhbiles"))); dataGrid.setColumnWidth(diasInhabiles, 68, Style.Unit.PX); // Dias Restantes Column<Incidencia, SafeHtml> diasRestantesCol = new Column<Incidencia, SafeHtml>(new SafeHtmlCell()) { @Override public SafeHtml getValue(Incidencia object) { Integer result = object == null || object.getDiasRestantes() == null ? 0 : object.getDiasRestantes(); SafeHtmlBuilder sb = new SafeHtmlBuilder(); sb.appendHtmlConstant( "<div style='outline-style:none; white-space: nowrap;'><strong style='font-size: 12px; padding-right: 6px;'>" + Integer.toString(result) + "</strong></div>"); return sb.toSafeHtml(); } }; diasRestantesCol.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); dataGrid.addColumn(diasRestantesCol, new SafeHtmlHeader(SafeHtmlUtils.fromString("Restantes"))); dataGrid.setColumnWidth(diasRestantesCol, 68, Style.Unit.PX); // Folio Column<Incidencia, String> folioCol = new Column<Incidencia, String>(folioCell) { @Override public String getValue(Incidencia object) { return object.getFolio(); } }; folioCol.setFieldUpdater(new FieldUpdater<Incidencia, String>() { @Override public void update(int index, Incidencia object, String value) { try { object.setFolio(value); getIncidenciasREST().update(object); } catch (Exception ex) { } folioCell.clearViewData(object); int absRowIndex = index; dataGrid.redrawRow(absRowIndex); } }); Header<String> forzarFooter = new Header<String>(new TextCell()) { @Override public String getValue() { return " "; } }; dataGrid.addColumn(folioCol, new SafeHtmlHeader(SafeHtmlUtils.fromString("Folio")), forzarFooter); dataGrid.setColumnWidth(folioCol, 40, Style.Unit.PCT); }
From source file:cimav.client.view.nomina.NominaSaldoUI.java
/** * Add the columns to the table.//from w w w. ja va 2s . c om */ private void initTableColumns() { // id + icon remove Column<Movimiento, String> iconCol = new Column<Movimiento, String>( new NomIconInputCell(NomIconInputCell.SALDO)) { @Override public String getValue(Movimiento object) { return "" + object.getId(); } }; Header<String> forzarFooter = new Header<String>(new TextCell()) { @Override public String getValue() { return " "; } }; dataGrid.addColumn(iconCol, new SafeHtmlHeader(SafeHtmlUtils.fromString("")), forzarFooter); dataGrid.setColumnWidth(iconCol, 16, Style.Unit.PX); // Concepto Column<Movimiento, String> conceptoCol = new Column<Movimiento, String>((new TextCell())) { @Override public String getValue(Movimiento object) { Concepto concepto = object.getConcepto(); return concepto.getName(); } }; dataGrid.addColumn(conceptoCol, "Concepto"); dataGrid.setColumnWidth(conceptoCol, 100, Style.Unit.PCT); // Permanente Column<Movimiento, Boolean> permanenteCol = new Column<Movimiento, Boolean>(permanenteCell) { @Override public Boolean getValue(Movimiento object) { Boolean result = object.getPermanente(); return result; } }; permanenteCol.setFieldUpdater(new FieldUpdater<Movimiento, Boolean>() { @Override public void update(int index, Movimiento object, Boolean value) { try { object.setPermanente(value); getNominaQuincenalsREST().update(object); } catch (Exception e) { } saldoCell.clearViewData(object); int absRowIndex = index; dataGrid.redrawRow(absRowIndex); } }); permanenteCol.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); TextHeader permanenteHeader = new TextHeader(""); permanenteHeader.setHeaderStyleNames("permanenteHeader"); dataGrid.addColumn(permanenteCol, permanenteHeader); dataGrid.setColumnWidth(permanenteCol, 20, Style.Unit.PX); // Pago Column<Movimiento, SafeHtml> pagoCol = new Column<Movimiento, SafeHtml>(new SafeHtmlCell()) { @Override public SafeHtml getValue(Movimiento object) { BigDecimal pago = object == null || object.getPago() == null ? BigDecimal.ZERO : object.getPago(); Utils.formatCantidad(pago); SafeHtmlBuilder a = new SafeHtmlBuilder(); if (object.getPermanente()) { a.appendHtmlConstant( "<span style='padding-right:3px; '>" + Utils.formatCantidad(pago) + "</span>"); } else { a.appendHtmlConstant("<span style='padding-right:3px; color: grey; font-style: italic;'>" + Utils.formatCantidad(pago) + "</span>"); } return a.toSafeHtml(); } }; pagoCol.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); dataGrid.addColumn(pagoCol, "Pago"); dataGrid.setColumnWidth(pagoCol, 90, Style.Unit.PCT); // Saldo Column<Movimiento, String> saldoCol = new Column<Movimiento, String>(saldoCell) { @Override public String getValue(Movimiento object) { BigDecimal result = object == null || object.getSaldo() == null ? BigDecimal.ZERO : object.getSaldo(); return Utils.formatCantidad(result); } }; saldoCol.setFieldUpdater(new FieldUpdater<Movimiento, String>() { @Override public void update(int index, Movimiento object, String value) { BigDecimal nuevoSaldo; try { nuevoSaldo = new BigDecimal(value.trim()); object.setSaldo(nuevoSaldo); getNominaQuincenalsREST().update(object); } catch (Exception e) { } saldoCell.clearViewData(object); int absRowIndex = index; dataGrid.redrawRow(absRowIndex); } }); saldoCol.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); dataGrid.addColumn(saldoCol, "Saldo"); dataGrid.setColumnWidth(saldoCol, 110, Style.Unit.PX); // Quincenas Column<Movimiento, String> quincenasCol = new Column<Movimiento, String>(quincenasCell) { @Override public String getValue(Movimiento object) { Integer result = object == null || object.getNumQuincenas() == null ? 0 : object.getNumQuincenas(); return Integer.toString(result); } }; quincenasCol.setFieldUpdater(new FieldUpdater<Movimiento, String>() { @Override public void update(int index, Movimiento object, String value) { // Push the changes into the MyDTO. At this point, you could send an // asynchronous request to the server to update the database. // value es el valor capturado // si es valido, pasar al object y a la DB // NOTA requiere de un Ajax con icono chiquito // Tiene su propio loading el DataGrid // Intenta convertir el value a Integer // si falla lo deja como estaba // si no falla lo actualiza Integer numQuin = 0; try { numQuin = Integer.parseInt(value.trim()); object.setNumQuincenas(numQuin); getNominaQuincenalsREST().update(object); } catch (NumberFormatException | NullPointerException e) { } quincenasCell.clearViewData(object); int absRowIndex = index; dataGrid.redrawRow(absRowIndex); } }); quincenasCol.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); dataGrid.addColumn(quincenasCol, "Veces"); dataGrid.setColumnWidth(quincenasCol, 68, Style.Unit.PX); }
From source file:cimav.visorglass.client.widgets.PanelesLayout.java
License:Apache License
public PanelesLayout(GWTServiceAsync gwtServiceAsync) { initWidget(uiBinder.createAndBindUi(this)); this.gwtServiceAsync = gwtServiceAsync; // Crea el Modelo arbolModel = new ArbolModel(); // Crea el node Root TreeItem root = new TreeItem(SafeHtmlUtils.fromString("<h2>La Root</h2>")); // Cambia Recursos del Arbol CellTree.Resources cellTreeResources = GWT.create(ICellTreeResources.class); CellTree.CellTreeMessages cellTreeMsgs = GWT.<CellTree.CellTreeMessages>create(ICellTreeMessages.class); // Crea el arbol cellArbol = new CellTree(arbolModel, root, cellTreeResources, cellTreeMsgs); cellArbol.setKeyboardSelectionPolicy(HasKeyboardSelectionPolicy.KeyboardSelectionPolicy.ENABLED); // agrega el arbol a su Panel //flowPanelArbol.add(cellArbol); cellArbol.getElement().getStyle().setPosition(Style.Position.ABSOLUTE); cellArbol.getElement().getStyle().setTop(10, Style.Unit.PX); cellArbol.getElement().getStyle().setLeft(0, Style.Unit.PX); cellArbol.getElement().getStyle().setBottom(0, Style.Unit.PX); cellArbol.getElement().getStyle().setRight(0, Style.Unit.PX); scrollPanelArbol.add(cellArbol);//from w ww . j a v a 2s . co m /* Inyectarle style absolute al Abuelo para que funcione el scroll del cellArbol */ Element divAbue2 = cellArbol.getElement().getParentElement().getParentElement(); divAbue2.getStyle().setPosition(Style.Position.ABSOLUTE); divAbue2.getStyle().setTop(0, Style.Unit.PX); divAbue2.getStyle().setLeft(0, Style.Unit.PX); divAbue2.getStyle().setBottom(0, Style.Unit.PX); divAbue2.getStyle().setRight(0, Style.Unit.PX); // Crea CellList de Documentos, sus resources, su Celda, su SelectionModel y su Listener. documentoSelectionModel = new SingleSelectionModel<Documento>(); CellList.Resources cellListResources = GWT.create(ICellListResources.class); documentosCellList = new CellList<Documento>(new DocumentoCell(documentoSelectionModel), cellListResources); documentosCellList.setKeyboardSelectionPolicy(HasKeyboardSelectionPolicy.KeyboardSelectionPolicy.ENABLED); documentosCellList.setSelectionModel(documentoSelectionModel); documentosCellList.setPageSize(500); // listener documentoSelectionModel.addSelectionChangeHandler(new DocumentoSelectionHandler()); // Style absolute documentosCellList.getElement().getStyle().setPosition(Style.Position.ABSOLUTE); documentosCellList.getElement().getStyle().setTop(0, Style.Unit.PX); documentosCellList.getElement().getStyle().setLeft(0, Style.Unit.PX); documentosCellList.getElement().getStyle().setBottom(0, Style.Unit.PX); documentosCellList.getElement().getStyle().setRight(0, Style.Unit.PX); // Agregarlo a su panel scrollPanelDocumentos.add(documentosCellList); /* Inyectarle style absolute al Abuelo para que funcione el scroll del cellList */ Element divAbue = documentosCellList.getElement().getParentElement().getParentElement(); divAbue.getStyle().setPosition(Style.Position.ABSOLUTE); divAbue.getStyle().setTop(0, Style.Unit.PX); divAbue.getStyle().setLeft(0, Style.Unit.PX); divAbue.getStyle().setBottom(0, Style.Unit.PX); divAbue.getStyle().setRight(0, Style.Unit.PX); // Listener de los Botones de Paneles btnArbol.addClickHandler(new BtnArbolClickHandler()); btnDocumentos.addClickHandler(new BtnDocumentosClickHandler()); btnVisor.addClickHandler(new BtnVisorClickHandler()); // Arega etiquetas flotantes y sus listeners Label arbolLabel = new Label("Arbol"); arbolLabel.setStyleName("jsfiddle_label"); arbolLabel.addMouseOverHandler(new JSFiddlerMouseOver()); arbolLabel.addMouseOutHandler(new JSFiddlerMouseOut()); flowPanelArbol.add(arbolLabel); documentosLabel = new Label("Documentos"); documentosLabel.setStyleName("jsfiddle_label"); documentosLabel.addMouseOverHandler(new JSFiddlerMouseOver()); documentosLabel.addMouseOutHandler(new JSFiddlerMouseOut()); flowPanelDecoratorDocumentos.add(documentosLabel); Label visorLabel = new Label("Visor"); visorLabel.setStyleName("jsfiddle_label"); visorLabel.addMouseOverHandler(new JSFiddlerMouseOver()); visorLabel.addMouseOutHandler(new JSFiddlerMouseOut()); flowPanelDecoratorVisor.add(visorLabel); frameDocViewer.addLoadHandler(new FrameLoadHandler()); reloadIcon = new Icon(IconType.ROTATE_RIGHT); reloadIcon.setSize(IconSize.LARGE); reloadIcon.setMuted(false); reloadIcon.setSpin(false); reloadIcon.getElement().getStyle().setPosition(Style.Position.ABSOLUTE); reloadIcon.getElement().getStyle().setTop(3, Style.Unit.PX); reloadIcon.getElement().getStyle().setLeft(3, Style.Unit.PX); reloadIcon.getElement().getStyle().setColor("gray"); reloadIcon.getElement().getStyle().setCursor(Style.Cursor.POINTER); reloadIcon.addDomHandler(new ReloadGoogleDocMouseDownHandler(), MouseDownEvent.getType()); // flowPanelDecoratorVisor.add(reloadIcon); // NOTE Quitar documentos btnDocumentos.setVisible(false); }
From source file:com.akanoo.client.views.CanvasView.java
License:Apache License
/** * Update note labels of the given representation with the body of the * corresponding note/* ww w.j a v a2 s .c o m*/ * * @param representation */ private void updateNoteLabels(NoteRepresentation representation) { Note note = representation.note; // escape HTML chars SafeHtml bodyHtml = SafeHtmlUtils.fromString(note.getBody() != null ? note.getBody() : ""); SafeHtml backBodyHtml = SafeHtmlUtils.fromString(note.getBackBody() != null ? note.getBackBody() : ""); // replace urls with anchors bodyHtml = SafeHtmlUtils.fromTrustedString(replaceUrlsWithLinks(bodyHtml.asString())); backBodyHtml = SafeHtmlUtils.fromTrustedString(replaceUrlsWithLinks(backBodyHtml.asString())); // update labels representation.bodyLabel.setHTML(bodyHtml); representation.backBodyLabel.setHTML(backBodyHtml); }
From source file:com.bearsoft.gwt.ui.menu.MenuItemCheckBox.java
protected SafeHtml generateHtml() { String ltext = text != null ? text : ""; return MenuItemTemplates.INSTANCE .checkBox(html ? SafeHtmlUtils.fromTrustedString(ltext) : SafeHtmlUtils.fromString(ltext)); }
From source file:com.bearsoft.gwt.ui.menu.MenuItemImageText.java
protected void regenerate() { String ltext = text != null ? text : ""; SafeHtml generated = MenuItemTemplates.INSTANCE.imageText(imageUri != null ? imageUri.asString() : "", html ? SafeHtmlUtils.fromTrustedString(ltext) : SafeHtmlUtils.fromString(ltext)); getElement().setInnerSafeHtml(generated); leftMark = getElement().getFirstChildElement().getFirstChildElement(); field = (Element) getElement().getFirstChildElement().getLastChild(); }
From source file:com.bearsoft.gwt.ui.menu.MenuItemRadioButton.java
@Override protected SafeHtml generateHtml() { String ltext = text != null ? text : ""; return MenuItemTemplates.INSTANCE .radioButton(html ? SafeHtmlUtils.fromTrustedString(ltext) : SafeHtmlUtils.fromString(ltext)); }
From source file:com.bearsoft.gwt.ui.widgets.grid.Grid.java
public Grid(ProvidesKey<T> aKeyProvider) { super();/* w ww.j a v a 2s . c o m*/ getElement().getStyle().setPosition(Style.Position.RELATIVE); getElement().appendChild(tdsStyleElement); getElement().appendChild(cellsStyleElement); getElement().appendChild(oddRowsStyleElement); getElement().appendChild(evenRowsStyleElement); setRowsHeight(25); hive = new FlexTable(); setWidget(hive); hive.setCellPadding(0); hive.setCellSpacing(0); hive.setBorderWidth(0); headerLeft = new GridSection<T>(aKeyProvider); headerLeftContainer = new ScrollPanel(headerLeft); headerRight = new GridSection<T>(aKeyProvider); headerRightContainer = new ScrollPanel(headerRight); frozenLeft = new GridSection<T>(aKeyProvider) { @Override protected void replaceAllChildren(List<T> values, SafeHtml html) { super.replaceAllChildren(values, html); footerLeft.redrawFooters(); } @Override protected void replaceChildren(List<T> values, int start, SafeHtml html) { super.replaceChildren(values, start, html); footerLeft.redrawFooters(); } }; frozenLeftContainer = new ScrollPanel(frozenLeft); frozenRight = new GridSection<T>(aKeyProvider) { @Override protected void replaceAllChildren(List<T> values, SafeHtml html) { super.replaceAllChildren(values, html); footerRight.redrawFooters(); } @Override protected void replaceChildren(List<T> values, int start, SafeHtml html) { super.replaceChildren(values, start, html); footerRight.redrawFooters(); } }; frozenRightContainer = new ScrollPanel(frozenRight); scrollableLeft = new GridSection<T>(aKeyProvider) { @Override protected void replaceAllChildren(List<T> values, SafeHtml html) { super.replaceAllChildren(values, html); footerLeft.redrawFooters(); } @Override protected void replaceChildren(List<T> values, int start, SafeHtml html) { super.replaceChildren(values, start, html); footerLeft.redrawFooters(); } }; scrollableLeftContainer = new ScrollPanel(scrollableLeft); scrollableRight = new GridSection<T>(aKeyProvider) { @Override protected void replaceAllChildren(List<T> values, SafeHtml html) { super.replaceAllChildren(values, html); footerRight.redrawFooters(); } @Override protected void replaceChildren(List<T> values, int start, SafeHtml html) { super.replaceChildren(values, start, html); footerRight.redrawFooters(); } }; scrollableRightContainer = new ScrollPanel(scrollableRight); footerLeft = new GridSection<>(aKeyProvider); footerLeftContainer = new ScrollPanel(footerLeft); footerRight = new GridSection<>(aKeyProvider); footerRightContainer = new ScrollPanel(footerRight); // positioning context / overflow setup // overflow for (Widget w : new Widget[] { headerLeftContainer, headerRightContainer, frozenLeftContainer, frozenRightContainer, scrollableLeftContainer, footerLeftContainer, footerRightContainer }) { w.getElement().getStyle().setOverflow(Style.Overflow.HIDDEN); } // scrollableRightContainer.getElement().getStyle().setOverflow(Style.Overflow.AUTO); // default value // context for (Widget w : new Widget[] { headerLeftContainer, headerRightContainer, frozenLeftContainer, frozenRightContainer, scrollableLeftContainer, scrollableRightContainer, footerLeftContainer, footerRightContainer }) { w.getElement().getFirstChildElement().getStyle().setPosition(Style.Position.ABSOLUTE); } // propagation of some widths headerLeft.setWidthPropagator(new GridWidthPropagator<T>(headerLeft) { @Override public void changed() { super.changed(); propagateHeaderWidth(); } }); for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { headerRight, frozenLeft, frozenRight, scrollableLeft, scrollableRight, footerLeft, footerRight }) { section.setWidthPropagator(new GridWidthPropagator<>(section)); } headerLeft.setColumnsPartners(new AbstractCellTable[] { frozenLeft, scrollableLeft, footerLeft }); headerRight.setColumnsPartners(new AbstractCellTable[] { frozenRight, scrollableRight, footerRight }); ColumnsRemover leftColumnsRemover = new ColumnsRemoverAdapter<T>(headerLeft, frozenLeft, scrollableLeft, footerLeft); ColumnsRemover rightColumnsRemover = new ColumnsRemoverAdapter<T>(headerRight, frozenRight, scrollableRight, footerRight); for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { headerLeft, frozenLeft, scrollableLeft, footerLeft }) { section.setColumnsRemover(leftColumnsRemover); } for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { headerRight, frozenRight, scrollableRight, footerRight }) { section.setColumnsRemover(rightColumnsRemover); } for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { frozenLeft, scrollableLeft, footerLeft }) { section.setHeaderSource(headerLeft); } for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { frozenRight, scrollableRight, footerRight }) { section.setHeaderSource(headerRight); } for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { headerLeft, frozenLeft, scrollableLeft }) { section.setFooterSource(footerLeft); } for (GridSection<T> section : (GridSection<T>[]) new GridSection<?>[] { headerRight, frozenRight, scrollableRight }) { section.setFooterSource(footerRight); } // hive organization hive.setWidget(0, 0, headerLeftContainer); hive.setWidget(0, 1, headerRightContainer); hive.setWidget(1, 0, frozenLeftContainer); hive.setWidget(1, 1, frozenRightContainer); hive.setWidget(2, 0, scrollableLeftContainer); hive.setWidget(2, 1, scrollableRightContainer); hive.setWidget(3, 0, footerLeftContainer); hive.setWidget(3, 1, footerRightContainer); for (Widget w : new Widget[] { headerLeftContainer, headerRightContainer, frozenLeftContainer, frozenRightContainer, scrollableLeftContainer, scrollableRightContainer, footerLeftContainer, footerRightContainer }) { w.setWidth("100%"); w.setHeight("100%"); } // misc for (Widget w : new Widget[] { headerRightContainer, frozenRightContainer, footerRightContainer, scrollableLeftContainer }) { w.getElement().getParentElement().getStyle().setOverflow(Style.Overflow.HIDDEN); } hive.getElement().getStyle().setTableLayout(Style.TableLayout.FIXED); hive.getElement().getStyle().setPosition(Style.Position.RELATIVE); for (CellTable<?> tbl : new CellTable<?>[] { headerLeft, headerRight, frozenLeft, frozenRight, scrollableLeft, scrollableRight, footerLeft, footerRight }) { tbl.setTableLayoutFixed(true); } // header headerLeft.setHeaderBuilder(new ThemedHeaderOrFooterBuilder<T>(headerLeft, false, this)); headerLeft.setFooterBuilder(new NullHeaderOrFooterBuilder<T>(headerLeft, true)); headerRight.setHeaderBuilder(new ThemedHeaderOrFooterBuilder<T>(headerRight, false, this)); headerRight.setFooterBuilder(new NullHeaderOrFooterBuilder<T>(headerRight, true)); // footer footerLeft.setHeaderBuilder(new NullHeaderOrFooterBuilder<T>(footerLeft, false)); footerLeft.setFooterBuilder(new ThemedHeaderOrFooterBuilder<T>(footerLeft, true)); footerRight.setHeaderBuilder(new NullHeaderOrFooterBuilder<T>(footerRight, false)); footerRight.setFooterBuilder(new ThemedHeaderOrFooterBuilder<T>(footerRight, true)); // data bodies for (GridSection<?> section : new GridSection<?>[] { frozenLeft, frozenRight, scrollableLeft, scrollableRight }) { GridSection<T> gSection = (GridSection<T>) section; gSection.setHeaderBuilder(new NullHeaderOrFooterBuilder<T>(gSection, false)); gSection.setFooterBuilder(new NullHeaderOrFooterBuilder<T>(gSection, true)); } for (GridSection<?> section : new GridSection<?>[] { headerLeft, headerRight, frozenLeft, frozenRight, scrollableLeft, scrollableRight, footerLeft, footerRight }) { section.setAutoHeaderRefreshDisabled(true); } for (GridSection<?> section : new GridSection<?>[] { headerLeft, headerRight, footerLeft, footerRight }) { section.setAutoFooterRefreshDisabled(true); } // cells installCellBuilders(); scrollableRightContainer.addScrollHandler(new ScrollHandler() { @Override public void onScroll(ScrollEvent event) { int aimTop = scrollableRightContainer.getElement().getScrollTop(); int aimLeft = scrollableRightContainer.getElement().getScrollLeft(); scrollableLeftContainer.getElement().setScrollTop(aimTop); int factTopDelta = aimTop - scrollableLeftContainer.getElement().getScrollTop(); if (factTopDelta > 0) { scrollableLeftContainer.getElement().getStyle().setBottom(factTopDelta, Style.Unit.PX); } else { scrollableLeftContainer.getElement().getStyle().clearBottom(); } headerRightContainer.getElement().setScrollLeft(aimLeft); int factLeftDelta0 = aimLeft - headerRightContainer.getElement().getScrollLeft(); if (factLeftDelta0 > 0) { headerRightContainer.getElement().getStyle().setRight(factLeftDelta0, Style.Unit.PX); } else { headerRightContainer.getElement().getStyle().clearRight(); } frozenRightContainer.getElement().setScrollLeft(aimLeft); int factLeftDelta1 = aimLeft - frozenRightContainer.getElement().getScrollLeft(); if (factLeftDelta1 > 0) { frozenRightContainer.getElement().getStyle().setRight(factLeftDelta1, Style.Unit.PX); } else { frozenRightContainer.getElement().getStyle().clearRight(); } footerRightContainer.getElement() .setScrollLeft(scrollableRightContainer.getElement().getScrollLeft()); int factLeftDelta2 = aimLeft - footerRightContainer.getElement().getScrollLeft(); if (factLeftDelta2 > 0) { footerRightContainer.getElement().getStyle().setRight(factLeftDelta2, Style.Unit.PX); } else { footerRightContainer.getElement().getStyle().clearRight(); } } }); ghostLine = Document.get().createDivElement(); ghostLine.addClassName(RULER_STYLE); ghostLine.getStyle().setPosition(Style.Position.ABSOLUTE); ghostLine.getStyle().setTop(0, Style.Unit.PX); ghostColumn = Document.get().createDivElement(); ghostColumn.addClassName(COLUMN_PHANTOM_STYLE); ghostColumn.getStyle().setPosition(Style.Position.ABSOLUTE); ghostColumn.getStyle().setTop(0, Style.Unit.PX); addDomHandler(new DragEnterHandler() { @Override public void onDragEnter(DragEnterEvent event) { if (DraggedColumn.instance != null) { if (DraggedColumn.instance.isMove()) { event.preventDefault(); event.stopPropagation(); DraggedColumn<T> target = findTargetDraggedColumn(event.getNativeEvent().getEventTarget()); if (target != null) { showColumnMoveDecorations(target); event.getDataTransfer().<XDataTransfer>cast().setDropEffect("move"); } else { event.getDataTransfer().<XDataTransfer>cast().setDropEffect("none"); } } else { } } else { event.getDataTransfer().<XDataTransfer>cast().setDropEffect("none"); } } }, DragEnterEvent.getType()); addDomHandler(new DragHandler() { @Override public void onDrag(DragEvent event) { if (DraggedColumn.instance != null && DraggedColumn.instance.isResize()) { event.stopPropagation(); /* int newWidth = event.getNativeEvent().getClientX() - DraggedColumn.instance.getCellElement().getAbsoluteLeft(); if (newWidth > MINIMUM_COLUMN_WIDTH) { event.getDataTransfer().<XDataTransfer> cast().setDropEffect("move"); } else { event.getDataTransfer().<XDataTransfer> cast().setDropEffect("none"); } */ } } }, DragEvent.getType()); addDomHandler(new DragOverHandler() { @Override public void onDragOver(DragOverEvent event) { if (DraggedColumn.instance != null) { event.preventDefault(); event.stopPropagation(); if (DraggedColumn.instance.isMove()) { DraggedColumn<T> target = findTargetDraggedColumn(event.getNativeEvent().getEventTarget()); if (target != null) { event.getDataTransfer().<XDataTransfer>cast().setDropEffect("move"); } else { hideColumnDecorations(); event.getDataTransfer().<XDataTransfer>cast().setDropEffect("none"); } } else { Element hostElement = Grid.this.getElement(); int clientX = event.getNativeEvent().getClientX(); int hostAbsX = hostElement.getAbsoluteLeft(); int hostScrollX = hostElement.getScrollLeft(); int docScrollX = hostElement.getOwnerDocument().getScrollLeft(); int relativeX = clientX - hostAbsX + hostScrollX + docScrollX; ghostLine.getStyle().setLeft(relativeX, Style.Unit.PX); ghostLine.getStyle().setHeight(hostElement.getClientHeight(), Style.Unit.PX); if (ghostLine.getParentElement() != hostElement) { hostElement.appendChild(ghostLine); } } } } }, DragOverEvent.getType()); addDomHandler(new DragLeaveHandler() { @Override public void onDragLeave(DragLeaveEvent event) { if (DraggedColumn.instance != null) { event.stopPropagation(); if (DraggedColumn.instance.isMove()) { if (event.getNativeEvent().getEventTarget() == (JavaScriptObject) Grid.this.getElement()) { hideColumnDecorations(); } } } } }, DragLeaveEvent.getType()); addDomHandler(new DragEndHandler() { @Override public void onDragEnd(DragEndEvent event) { event.stopPropagation(); hideColumnDecorations(); DraggedColumn.instance = null; } }, DragEndEvent.getType()); addDomHandler(new DropHandler() { @Override public void onDrop(DropEvent event) { DraggedColumn<?> source = DraggedColumn.instance; DraggedColumn<T> target = targetDraggedColumn; hideColumnDecorations(); DraggedColumn.instance = null; if (source != null) { event.preventDefault(); event.stopPropagation(); if (source.isMove()) { AbstractCellTable<T> sourceSection = (AbstractCellTable<T>) source.getTable(); // target table may be any section in our grid if (target != null) { Header<?> sourceHeader = source.getHeader(); Header<?> targetHeader = target.getHeader(); if (sourceHeader instanceof DraggableHeader<?> && targetHeader instanceof DraggableHeader<?>) { DraggableHeader<T> sourceDH = (DraggableHeader<T>) sourceHeader; DraggableHeader<T> targetDH = (DraggableHeader<T>) targetHeader; moveColumnNode(sourceDH.getHeaderNode(), targetDH.getHeaderNode()); } else { int sourceIndex = source.getColumnIndex(); int targetIndex = target.getColumnIndex(); GridSection<T> targetSection = (GridSection<T>) target.getTable(); boolean isSourceLeft = sourceSection == headerLeft || sourceSection == frozenLeft || sourceSection == scrollableLeft || sourceSection == footerLeft; boolean isTargetLeft = targetSection == headerLeft || targetSection == frozenLeft || targetSection == scrollableLeft || targetSection == footerLeft; sourceSection = isSourceLeft ? headerLeft : headerRight; targetSection = isTargetLeft ? headerLeft : headerRight; int generalSourceIndex = isSourceLeft ? sourceIndex : sourceIndex + frozenColumns; int generalTargetIndex = isTargetLeft ? targetIndex : targetIndex + frozenColumns; Header<?> header = sourceSection.getHeader(sourceIndex); if (header instanceof DraggableHeader) { ((DraggableHeader) header).setTable(targetSection); } if (generalSourceIndex != generalTargetIndex) { Column<T, ?> column = (Column<T, ?>) source.getColumn(); if (!(header instanceof DraggableHeader) || ((DraggableHeader) header).isMoveable()) { moveColumn(generalSourceIndex, generalTargetIndex); } } } } } else { Header<?> header = source.getHeader(); if (!(header instanceof DraggableHeader) || ((DraggableHeader) header).isResizable()) { int newWidth = Math.max( event.getNativeEvent().getClientX() - source.getCellElement().getAbsoluteLeft(), MINIMUM_COLUMN_WIDTH); // Source and target tables are the same, so we can // cast to DraggedColumn<T> with no care setColumnWidthFromHeaderDrag(((DraggedColumn<T>) source).getColumn(), newWidth, Style.Unit.PX); } } } } }, DropEvent.getType()); columnsChevron.getElement().getStyle().setPosition(Style.Position.ABSOLUTE); columnsChevron.getElement().addClassName(COLUMNS_CHEVRON_STYLE); getElement().appendChild(columnsChevron.getElement()); columnsChevron.addDomHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { PopupPanel pp = new PopupPanel(); pp.setAutoHideEnabled(true); pp.setAutoHideOnHistoryEventsEnabled(true); pp.setAnimationEnabled(true); MenuBar columnsMenu = new MenuBar(true); fillColumns(columnsMenu, headerLeft); fillColumns(columnsMenu, headerRight); pp.setWidget(columnsMenu); pp.setPopupPosition(columnsChevron.getAbsoluteLeft(), columnsChevron.getAbsoluteTop()); pp.showRelativeTo(columnsChevron); } private void fillColumns(MenuBar aTarget, final GridSection<T> aSection) { for (int i = 0; i < aSection.getColumnCount(); i++) { Header<?> h = aSection.getHeader(i); final Column<T, ?> column = aSection.getColumn(i); SafeHtml rendered; if (h.getValue() instanceof String) { String hVal = (String) h.getValue(); rendered = hVal.startsWith("<html>") ? SafeHtmlUtils.fromTrustedString(hVal.substring(6)) : SafeHtmlUtils.fromString(hVal); } else { Cell.Context context = new Cell.Context(0, i, h.getKey()); SafeHtmlBuilder sb = new SafeHtmlBuilder(); h.render(context, sb); rendered = sb.toSafeHtml(); } MenuItemCheckBox miCheck = new MenuItemCheckBox(!aSection.isColumnHidden(column), rendered.asString(), true); miCheck.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { if (Boolean.TRUE.equals(event.getValue())) { showColumn(column); } else { hideColumn(column); } Grid.this.onResize(); } }); aTarget.addItem(miCheck); } } }, ClickEvent.getType()); ColumnSortEvent.Handler sectionSortHandler = new ColumnSortEvent.Handler() { @Override public void onColumnSort(ColumnSortEvent event) { boolean isCtrlKey = ((GridSection<?>) event.getSource()).isCtrlKey(); boolean contains = false; int containsAt = -1; for (int i = 0; i < sortList.size(); i++) { if (sortList.get(i).getColumn() == event.getColumn()) { contains = true; containsAt = i; break; } } if (!contains) { if (!isCtrlKey) { sortList.clear(); } sortList.insert(sortList.size(), new ColumnSortList.ColumnSortInfo(event.getColumn(), true)); } else { boolean wasAscending = sortList.get(containsAt).isAscending(); if (!isCtrlKey) { sortList.clear(); if (wasAscending) { sortList.push(new ColumnSortList.ColumnSortInfo(event.getColumn(), false)); } } else { sortList.remove(sortList.get(containsAt)); if (wasAscending) { sortList.insert(containsAt, new ColumnSortList.ColumnSortInfo(event.getColumn(), false)); } } } ColumnSortEvent.fire(Grid.this, sortList); } }; headerLeft.getColumnSortList().setLimit(1); headerLeft.addColumnSortHandler(sectionSortHandler); headerRight.getColumnSortList().setLimit(1); headerRight.addColumnSortHandler(sectionSortHandler); gridColor = PublishedColor.create(211, 211, 211, 255); regenerateDynamicTDStyles(); regenerateDynamicOddRowsStyles(); getElement().<XElement>cast().addResizingTransitionEnd(this); }