com.goodow.wave.client.wavepanel.blip.TrangleButtonCell.java Source code

Java tutorial

Introduction

Here is the source code for com.goodow.wave.client.wavepanel.blip.TrangleButtonCell.java

Source

/*
 * Copyright 2012 Goodow.com
 * 
 * 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.goodow.wave.client.wavepanel.blip;

import com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.cell.client.ValueUpdater;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.BrowserEvents;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.EventTarget;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.safehtml.client.SafeHtmlTemplates;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;

public class TrangleButtonCell<T> extends AbstractCell<T> {

    public static interface Delegate<T> {
        void execute(T object);
    }

    interface Bundle extends ClientBundle {
        ImageResource trangleButton();

        ImageResource trangleButtoned();
    }

    interface Template extends SafeHtmlTemplates {

        @SafeHtmlTemplates.Template("<div class='{0}' tabIndex='0'></div>")
        SafeHtml div(String style);
    }

    // private static Bundle bundle = GWT.create(Bundle.class);
    private static Template template = GWT.create(Template.class);

    // private static SafeHtml TRANGLE_BUTTON = AbstractImagePrototype.create(bundle.trangleButton())
    // .getSafeHtml();
    // private static SafeHtml TRANGLE_BUTTONED = AbstractImagePrototype
    // .create(bundle.trangleButtoned()).getSafeHtml();

    private boolean isClick = false;
    private TrangleComboBoxPopupPanel pp;

    private Delegate<T> delegate = new TrangleButtonCell.Delegate<T>() {

        @Override
        public void execute(final T object) {
            if (pp == null) {
                pp = new TrangleComboBoxPopupPanel();
            }
            pp.show();
            Style style = pp.getElement().getStyle();
            style.setTop(imageElm.getAbsoluteTop() + 15, Unit.PX);
            style.setLeft(imageElm.getAbsoluteLeft() - pp.getOffsetWidth(), Unit.PX);
            // if (isClick) {
            // pp.show();
            // Style style = pp.getElement().getStyle();
            // style.setTop(imageElm.getAbsoluteTop() + 15, Unit.PX);
            // style.setLeft(imageElm.getAbsoluteLeft() - pp.getOffsetWidth(), Unit.PX);
            // } else {
            // pp.hide();
            // }
        }
    };

    private Element imageElm;

    public TrangleButtonCell() {
        super(BrowserEvents.CLICK, BrowserEvents.BLUR);
    }

    @Override
    public boolean isEditing(final com.google.gwt.cell.client.Cell.Context context, final Element parent,
            final T value) {
        return false;
    }

    @Override
    public void onBrowserEvent(final com.google.gwt.cell.client.Cell.Context context, final Element parent,
            final T value, final NativeEvent event, final ValueUpdater<T> valueUpdater) {
        boolean clickEvent = event.getType().equals(BrowserEvents.CLICK);
        boolean blurEvent = event.getType().equals(BrowserEvents.BLUR);
        // boolean focusEvent = event.getType().equals(BrowserEvents.FOCUS);
        imageElm = parent;
        if (clickEvent || blurEvent) {
            EventTarget eventTarget = event.getEventTarget();
            if (!Element.is(eventTarget)) {
                return;
            }

            // if (blurEvent) {
            // isClick = false;
            // setValue(context, parent.getParentElement(), value);
            // onEnterKeyDown(context, parent, value, event, valueUpdater);
            // parent.removeAttribute("tabindex");
            // }

            if (parent.isOrHasChild(Element.as(eventTarget))) {
                // int parentLeft = parent.getAbsoluteLeft();
                // int parentTop = parent.getAbsoluteTop();
                // int parentHeight = parent.getClientHeight();
                // int parentWidth = parent.getClientWidth();
                // int parentX = parentLeft + parentWidth;
                // int parentY = parentTop + parentHeight;
                // int clientX = event.getClientX();
                // int clientY = event.getClientY();
                if (!isClick) {
                    isClick = true;
                    parent.focus();
                    onEnterKeyDown(context, parent, value, event, valueUpdater);
                } else {
                    parent.blur();
                    isClick = false;
                }
                // imageElm.getParentElement().removeAttribute("tabindex");
                // imageElm.setTabIndex(1);
                // parent.focus();
                // // parent.setAttribute("tabindex", "0");
                // setValue(context, parent.getParentElement(), value);
                // }
                // if (!isClick) {
                // parent.addClassName(TrangleResources.css().trangleCelled());
                // parent.removeClassName(TrangleResources.css().trangleCell());
                // isClick = true;
                // } else {
                // parent.addClassName(TrangleResources.css().trangleCell());
                // parent.removeClassName(TrangleResources.css().trangleCelled());
                // isClick = false;
                // }
            }
        }
    }

    @Override
    public void render(final com.google.gwt.cell.client.Cell.Context context, final T value,
            final SafeHtmlBuilder sb) {

        // if (value != null && !isClick) {
        sb.append(template.div(TrangleResources.css().trangleCell()));
        // sb.append(SafeHtmlUtils
        // .fromTrustedString("<div style='float: right;opacity: 0.2;:hover{opacity: 0.5;}'>"));
        // sb.append(TRANGLE_BUTTON);
        // sb.append(SafeHtmlUtils.fromTrustedString("</div>"));
        // } else {
        // sb.append(template.div(TrangleResources.css().trangleCell()));
        // sb.append(SafeHtmlUtils.fromTrustedString("<div style='float: right;opacity: 0.2;'>"));
        // sb.append(TRANGLE_BUTTONED);
        // sb.append(SafeHtmlUtils.fromTrustedString("</div>"));
        // }
    }

    @Override
    protected void onEnterKeyDown(final com.google.gwt.cell.client.Cell.Context context, final Element parent,
            final T value, final NativeEvent event, final ValueUpdater<T> valueUpdater) {
        delegate.execute(value);
    }

}