ingo@1309: package de.intevation.flys.client.client.ui;
ingo@1309:
ingo@1309: import com.google.gwt.core.client.GWT;
ingo@1309: import com.google.gwt.user.client.rpc.AsyncCallback;
christian@2954: import com.smartgwt.client.types.Alignment;
felix@1499: import com.smartgwt.client.util.SC;
christian@2954: import com.smartgwt.client.widgets.Button;
raimund@2540: import com.smartgwt.client.widgets.Canvas;
christian@2954: import com.smartgwt.client.widgets.Window;
ingo@1309: import com.smartgwt.client.widgets.events.ClickEvent;
ingo@1309: import com.smartgwt.client.widgets.events.ClickHandler;
christian@2954: import com.smartgwt.client.widgets.form.DynamicForm;
ingo@1309: import com.smartgwt.client.widgets.form.events.ItemChangedEvent;
ingo@1309: import com.smartgwt.client.widgets.form.events.ItemChangedHandler;
christian@2954: import com.smartgwt.client.widgets.form.fields.CheckboxItem;
christian@2954: import com.smartgwt.client.widgets.form.fields.ColorPickerItem;
christian@2954: import com.smartgwt.client.widgets.form.fields.FormItem;
christian@2954: import com.smartgwt.client.widgets.form.fields.SelectItem;
christian@2954: import com.smartgwt.client.widgets.form.fields.StaticTextItem;
felix@3352: import com.smartgwt.client.widgets.form.fields.events.BlurEvent;
felix@3352: import com.smartgwt.client.widgets.form.fields.events.BlurHandler;
christian@3384: import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
raimund@2540: import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
christian@3384: import com.smartgwt.client.widgets.form.validator.IsFloatValidator;
christian@2954: import com.smartgwt.client.widgets.layout.HLayout;
christian@2954: import com.smartgwt.client.widgets.layout.VLayout;
raimund@2540:
christian@2954: import de.intevation.flys.client.client.Config;
christian@2954: import de.intevation.flys.client.client.FLYSConstants;
christian@2954: import de.intevation.flys.client.client.services.CollectionItemAttributeService;
christian@2954: import de.intevation.flys.client.client.services.CollectionItemAttributeServiceAsync;
christian@2954: import de.intevation.flys.client.client.services.ThemeListingService;
christian@2954: import de.intevation.flys.client.client.services.ThemeListingServiceAsync;
christian@3384: import de.intevation.flys.client.client.utils.DoubleValidator;
ingo@1309: import de.intevation.flys.client.shared.model.Collection;
ingo@1309: import de.intevation.flys.client.shared.model.CollectionItemAttribute;
christian@2954: import de.intevation.flys.client.shared.model.FacetRecord;
ingo@1309: import de.intevation.flys.client.shared.model.Style;
ingo@1309: import de.intevation.flys.client.shared.model.StyleSetting;
raimund@1326: import de.intevation.flys.client.shared.model.Theme;
ingo@1309:
christian@2954: import java.util.Arrays;
christian@2954: import java.util.Iterator;
christian@2954: import java.util.LinkedHashMap;
christian@2954: import java.util.Map;
christian@2954: import java.util.Set;
ingo@1309:
ingo@1309: /**
christian@3384: * Editor window for styles.
ingo@1309: * @author Raimund Renkert
ingo@1309: */
ingo@1309: public class StyleEditorWindow
ingo@1309: extends Window
ingo@1309: implements ClickHandler
ingo@1309: {
ingo@1309: /** The interface that provides i18n messages. */
ingo@1309: protected FLYSConstants MSG = GWT.create(FLYSConstants.class);
ingo@1309:
felix@1333: /** The collection. */
ingo@1309: protected Collection collection;
ingo@1309:
raimund@1336: /** The parent ThemePanel. */
raimund@1336: protected ThemePanel panel;
ingo@1309:
felix@1333: /** The attributes. */
ingo@1309: protected CollectionItemAttribute attributes;
ingo@1309:
ingo@1309: /** The selected facet. */
ingo@1309: protected FacetRecord facet;
ingo@1309:
felix@1333: /** Main layout. */
ingo@1309: protected VLayout layout;
ingo@1309:
felix@3355: /** The form that contains all the input widgets. */
christian@3384: protected DynamicForm df;
felix@3355:
raimund@2540: protected VLayout properties;
felix@3355:
raimund@2540: protected Canvas container;
raimund@2540:
raimund@2540: protected Map styleGroups;
raimund@2540:
raimund@2540: protected Style current;
raimund@2540:
raimund@2540: protected SelectItem styleChooser;
raimund@2540:
ingo@1309: /** The service used to set collection item attributes. */
ingo@1309: protected CollectionItemAttributeServiceAsync itemAttributeService =
ingo@1309: GWT.create(CollectionItemAttributeService.class);
ingo@1309:
raimund@2540: /** The service used to request a list of themes. */
raimund@2540: protected ThemeListingServiceAsync themeListingService =
raimund@2540: GWT.create(ThemeListingService.class);
felix@1333:
felix@3355:
raimund@1345: /**
raimund@1345: * Setup editor dialog.
raimund@1345: * @param collection The collection the current theme belongs to.
raimund@1345: * @param attributes The collection attributes.
raimund@1345: * @param facet The selected facet.
raimund@1345: */
ingo@1309: public StyleEditorWindow (
ingo@1309: Collection collection,
ingo@1309: CollectionItemAttribute attributes,
ingo@1309: FacetRecord facet)
ingo@1309: {
ingo@1309: this.collection = collection;
ingo@1309: this.attributes = attributes;
ingo@1309: this.facet = facet;
ingo@1309: this.layout = new VLayout();
raimund@2540: this.properties = new VLayout();
raimund@2540: this.container = new Canvas();
raimund@2540: this.styleChooser = new SelectItem("style", "Style");
ingo@1309:
raimund@2540: styleChooser.setTitleStyle("color:#000;");
raimund@2540: styleChooser.setTitleAlign(Alignment.LEFT);
raimund@2540: styleChooser.setValue("aktuell");
raimund@2540: styleChooser.addChangedHandler(new ChangedHandler() {
christian@2954: @Override
raimund@2540: public void onChanged(ChangedEvent ce) {
raimund@2540: String value = ce.getValue().toString();
raimund@2540: Style s = null;
raimund@2540: if (value.equals("aktuell")) {
raimund@2540: s = current;
raimund@2540: }
raimund@2540: else if (styleGroups.containsKey(value)) {
raimund@2540: s = styleGroups.get(value);
raimund@2540: }
raimund@2540:
raimund@2540: if (s != null) {
raimund@2540: setNewStyle(s);
raimund@2540: properties.removeMember(container);
raimund@2540: container = createPropertyGrid(s);
raimund@2540: properties.addMember(container);
raimund@2540: }
raimund@2540: }
raimund@2540: });
raimund@2540:
raimund@2540: DynamicForm f = new DynamicForm();
raimund@2540: f.setFields(styleChooser);
raimund@2540: f.setColWidths("40%", "60%");
raimund@2540:
raimund@2540: layout.addMember(f);
ingo@1309: init();
ingo@1309: initPanels();
ingo@1309: }
ingo@1309:
ingo@1309:
raimund@1345: /**
raimund@1345: * Initialize the window and set the layout.
raimund@1345: */
ingo@1309: protected void init() {
ingo@1309: setTitle(MSG.properties());
ingo@1309: setCanDragReposition(true);
ingo@1309: setCanDragResize(true);
raimund@1381: layout.setMargin(10);
ingo@1309:
ingo@1309: layout.setWidth100();
ingo@1309: layout.setHeight100();
raimund@2540:
raimund@2540: Config config = Config.getInstance();
raimund@2540: String locale = config.getLocale();
raimund@2540:
raimund@2540: Theme theme = facet.getTheme();
raimund@2540: Style style = attributes.getStyle(theme.getFacet(), theme.getIndex());
christian@2954: if(style == null) {
christian@2954: GWT.log("StyleEditorWindow.init(): style == null");
christian@2954: return;
christian@2954: }
raimund@2540: String name = style.getName();
raimund@2540: this.current = style;
raimund@2540:
raimund@2540: themeListingService.list(
raimund@2540: locale,
raimund@2540: name,
raimund@2540: new AsyncCallback