/*
* 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);
}
}
}