com.google.gwt.gen2.widgetbase.client.Gen2CssInjector.java Source code

Java tutorial

Introduction

Here is the source code for com.google.gwt.gen2.widgetbase.client.Gen2CssInjector.java

Source

/*
 * Copyright 2008 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.gen2.widgetbase.client;

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.StyleInjector;
import com.google.gwt.libideas.resources.client.CssResource;
import com.google.gwt.libideas.resources.client.ImmutableResourceBundle;

/**
 * Helper class to allow developers to easily inject css for their widgets.
 */
public class Gen2CssInjector {
    /**
     * CSS resources for all gen2 widgets.
     */
    static interface DefaultBundle extends ImmutableResourceBundle {
        @Resource("com/google/gwt/gen2/widgetbase/public/CollapsiblePanel_base.css")
        CssResource collapsiblePanelBase();

        @Resource("com/google/gwt/gen2/widgetbase/public/CollapsiblePanel_ltr.css")
        CssResource collapsiblePanelLtr();

        @Resource("com/google/gwt/gen2/widgetbase/public/DropDownDatePicker.css")
        CssResource dropDownDatePicker();

        @Resource("com/google/gwt/gen2/widgetbase/public/DropDownListBox.css")
        CssResource dropDownListBox();

        @Resource("com/google/gwt/gen2/widgetbase/public/FastTree_base.css")
        CssResource fastTreeBase();

        @Resource("com/google/gwt/gen2/widgetbase/public/FastTree_ltr.css")
        CssResource fastTreeLtr();

        @Resource("com/google/gwt/gen2/widgetbase/public/LogHandlers.css")
        CssResource logHandlers();

        @Resource("com/google/gwt/gen2/widgetbase/public/Picker.css")
        CssResource picker();

        @Resource("com/google/gwt/gen2/widgetbase/public/SliderBar.css")
        CssResource sliderBar();
    }

    static class DisabledMode extends Mode {
        @Override
        public DefaultBundle createDefaultBundle() {
            return null;
        }

        @Override
        public void inject(CssResource res) {
        }

        @Override
        protected boolean shouldInject() {
            return false;
        }
    }

    static class Mode {
        public DefaultBundle createDefaultBundle() {
            return GWT.create(DefaultBundle.class);
        }

        public void inject(CssResource res) {
            StyleInjector.injectStylesheet(res.getText());
        }

        protected boolean shouldInject() {
            return true;
        }
    }

    private static Mode m = GWT.create(Mode.class);

    private static DefaultBundle DEFAULT_CSS_FILES = m.createDefaultBundle();

    /**
     * If css dependency injection is enabled, adds the ToggleButton.css file
     * included under public/widget.
     */
    public static void addCollapsiblePanelDefault() {
        if (Gen2CssInjector.isInjectionEnabled()) {
            inject(DEFAULT_CSS_FILES.collapsiblePanelBase(), DEFAULT_CSS_FILES.collapsiblePanelLtr());
        }
    }

    /**
     * If css dependency injection is enabled, adds the default dependencies for
     * DropDownDatePicker.
     */
    public static void addDropDownDatePickerDefault() {
        if (Gen2CssInjector.isInjectionEnabled()) {
            inject(DEFAULT_CSS_FILES.dropDownDatePicker());
            inject(DEFAULT_CSS_FILES.dropDownListBox());
        }
    }

    /**
     * If css dependency injection is enabled, adds the DropDownListBox
     * dependencies.
     */
    public static void addDropDownListBoxDefault() {
        if (Gen2CssInjector.isInjectionEnabled()) {
            inject(DEFAULT_CSS_FILES.dropDownListBox());
        }
    }

    /**
     * If css dependency injection is enabled, adds the FastTree CSS files
     * included under public/widget.
     */
    public static void addFastTreeDefault() {
        if (Gen2CssInjector.isInjectionEnabled()) {
            inject(DEFAULT_CSS_FILES.fastTreeBase(), DEFAULT_CSS_FILES.fastTreeLtr());
        }
    }

    /**
     * Injects the default css used for the log handlers defined in this package.
     */
    public static void addLogHandlerDefault() {
        if (Gen2CssInjector.isInjectionEnabled()) {
            inject(DEFAULT_CSS_FILES.dropDownListBox());
            inject(DEFAULT_CSS_FILES.logHandlers());
        }
    }

    /**
     * If css dependency injection is enabled, adds the Picker.css file
     * included under public/widget.
     */
    public static void addPickerDefault() {
        if (Gen2CssInjector.isInjectionEnabled()) {
            inject(DEFAULT_CSS_FILES.picker());
        }
    }

    /**
     * If css dependency injection is enabled, adds the SliderBar.css file.
     */
    public static void addSliderBarDefault() {
        if (Gen2CssInjector.isInjectionEnabled()) {
            inject(DEFAULT_CSS_FILES.sliderBar());
        }
    }

    /**
     * Injects the given css resource into the program when DebugCss is not
     * included.
     */
    public static <CssType extends CssResource> CssType inject(CssType b) {
        m.inject(b);
        return b;
    }

    /**
     * Can any css resources be injected?
     */
    public static boolean isInjectionEnabled() {
        return m.shouldInject();
    }

    // Inject multiple style sheets
    private static void inject(CssResource car, CssResource... cdr) {
        inject(car);
        for (CssResource resource : cdr) {
            inject(resource);
        }
    }
}