All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.gwt.cell.client.AbstractCell Maven / Gradle / Ivy

There is a newer version: 2.12.1
Show newest version
/*
 * Copyright 2010 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.google.gwt.cell.client;

import com.google.gwt.dom.client.BrowserEvents;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

/**
 * A default implementation of the {@link Cell} interface.
 * 
 * 

*

Examples

*
*
Read only cell
*
{@example com.google.gwt.examples.cell.CellExample}
*
Cell with events
*
{@example com.google.gwt.examples.cell.CellWithEventsExample}
*
Interactive cell
*
{@example com.google.gwt.examples.cell.InteractionCellExample}
*
Editable cell
*
{@example com.google.gwt.examples.cell.EditableCellExample}
*
*

* * @param the type that this Cell represents */ public abstract class AbstractCell implements Cell { /** * The unmodifiable set of events consumed by this cell. */ private Set consumedEvents; /** * Construct a new {@link AbstractCell} with the specified consumed events. * The input arguments are passed by copy. * * @param consumedEvents the {@link com.google.gwt.dom.client.BrowserEvents * events} that this cell consumes * * @see com.google.gwt.dom.client.BrowserEvents */ public AbstractCell(String... consumedEvents) { Set events = null; if (consumedEvents != null && consumedEvents.length > 0) { events = new HashSet(); for (String event : consumedEvents) { events.add(event); } } init(events); } /** * Construct a new {@link AbstractCell} with the specified consumed events. * * @param consumedEvents the events that this cell consumes */ public AbstractCell(Set consumedEvents) { init(consumedEvents); } public boolean dependsOnSelection() { return false; } public Set getConsumedEvents() { return consumedEvents; } public boolean handlesSelection() { return false; } /** * Returns false. Subclasses that support editing should override this method * to return the current editing status. */ public boolean isEditing(Context context, Element parent, C value) { return false; } /** * {@inheritDoc} * *

* If you override this method to add support for events, remember to pass the * event types that the cell expects into the constructor. *

*/ public void onBrowserEvent(Context context, Element parent, C value, NativeEvent event, ValueUpdater valueUpdater) { String eventType = event.getType(); // Special case the ENTER key for a unified user experience. if (BrowserEvents.KEYDOWN.equals(eventType) && event.getKeyCode() == KeyCodes.KEY_ENTER) { onEnterKeyDown(context, parent, value, event, valueUpdater); } } public abstract void render(Context context, C value, SafeHtmlBuilder sb); /** * {@inheritDoc} * *

* This method is a no-op and returns false. If your cell is editable or can * be focused by the user, override this method to reset focus when the * containing widget is refreshed. *

*/ public boolean resetFocus(Context context, Element parent, C value) { return false; } public void setValue(Context context, Element parent, C value) { SafeHtmlBuilder sb = new SafeHtmlBuilder(); render(context, value, sb); parent.setInnerSafeHtml(sb.toSafeHtml()); } /** * Called when the user triggers a keydown event with the ENTER * key while focused on the cell. If your cell interacts with the user, you * should override this method to provide a consistent user experience. Your * widget must consume keydown events for this method to be * called. * * @param context the {@link Context} of the cell * @param parent the parent Element * @param value the value associated with the cell * @param event the native browser event * @param valueUpdater a {@link ValueUpdater}, or null if not specified */ protected void onEnterKeyDown(Context context, Element parent, C value, NativeEvent event, ValueUpdater valueUpdater) { } /** * Initialize the cell. * * @param consumedEvents the events that the cell consumes */ private void init(Set consumedEvents) { if (consumedEvents != null) { this.consumedEvents = Collections.unmodifiableSet(consumedEvents); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy