/*
* Ext GWT - Ext for GWT
* Copyright(c) 2007-2009, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/
package com.extjs.gxt.ui.client.widget.custom;
import com.extjs.gxt.ui.client.GXT;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.FieldEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.util.Theme;
import com.extjs.gxt.ui.client.util.ThemeManager;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.google.gwt.user.client.Element;
/**
* A combo box for selecting the GXT themes. Changing themes will cause the
* application to be reloaded.
*/
public class ThemeSelector extends ComboBox<Theme> {
private Theme last;
/**
* Creates a new theme selector.
*/
public ThemeSelector() {
setEditable(false);
setDisplayField("name");
setWidth(100);
setTriggerAction(TriggerAction.ALL);
}
@Override
protected void beforeRender() {
super.beforeRender();
ListStore<Theme> store = new ListStore<Theme>();
store.add(ThemeManager.getThemes());
setStore(store);
String theme = GXT.getThemeId();
if (theme == null) {
setValue(Theme.BLUE);
} else {
for (Theme t : store.getModels()) {
if (theme.equals(t.getId().toLowerCase())) {
setValue(t);
break;
}
}
}
last = getValue();
}
@Override
protected void onRender(Element parent, int index) {
super.onRender(parent, index);
Listener<FieldEvent> l = new Listener<FieldEvent>() {
public void handleEvent(FieldEvent be) {
Theme c = getValue();
if (c != last) {
last = c;
GXT.switchTheme(c);
}
}
};
addListener(Events.Change, l);
addListener(Events.Collapse, l);
}
}