fr.putnami.pwt.doc.client.application.DocumentationDisplay.java Source code

Java tutorial

Introduction

Here is the source code for fr.putnami.pwt.doc.client.application.DocumentationDisplay.java

Source

/**
 * This file is part of pwt.
 *
 * pwt is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser
 * General Public License as published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * pwt is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
 * General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License along with pwt. If not,
 * see <http://www.gnu.org/licenses/>.
 */
package fr.putnami.pwt.doc.client.application;

import com.google.common.base.Strings;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;

import fr.putnami.pwt.core.widget.client.Affix;
import fr.putnami.pwt.core.widget.client.OneWidgetPanel;
import fr.putnami.pwt.core.widget.client.binder.UiBinderLocalized;

public class DocumentationDisplay extends Composite implements AcceptsOneWidget {

    interface Binder extends UiBinderLocalized<Widget, DocumentationDisplay> {
        Binder BINDER = GWT.create(Binder.class);
    }

    @UiField
    Affix affixMenu;

    @UiField
    OneWidgetPanel container;

    public DocumentationDisplay() {
        this.initWidget(Binder.BINDER.createAndBindUi(this));

        Window.addResizeHandler(new ResizeHandler() {

            @Override
            public void onResize(ResizeEvent event) {
                DocumentationDisplay.this.redraw(false);
            }
        });

        Scheduler.get().scheduleDeferred(new ScheduledCommand() {

            @Override
            public void execute() {
                DocumentationDisplay.this.redraw(true);
            }
        });
    }

    @Override
    public void setWidget(IsWidget w) {
        if (w != null) {
            this.container.setWidget(w);
            this.redraw(true);
        }
    }

    private void redraw(boolean autoScroll) {
        if (autoScroll) {
            String historyToken = History.getToken();
            if (!Strings.isNullOrEmpty(historyToken)) {
                int top = this.affixMenu.getPinnedOffset();
                Window.scrollTo(Window.getScrollLeft(), top);
            } else {
                Window.scrollTo(Window.getScrollLeft(), 0);
            }
        }
    }

}