raimund@1287: package de.intevation.flys.client.client.ui.chart;
raimund@1287:
raimund@1287: import com.google.gwt.core.client.GWT;
raimund@1292: import com.google.gwt.user.client.rpc.AsyncCallback;
raimund@1287:
raimund@1287: import com.smartgwt.client.widgets.Window;
raimund@1287: import com.smartgwt.client.widgets.layout.VLayout;
raimund@1287: import com.smartgwt.client.widgets.layout.HLayout;
raimund@1287: import com.smartgwt.client.widgets.Button;
raimund@1290: import com.smartgwt.client.widgets.form.DynamicForm;
raimund@1290: import com.smartgwt.client.widgets.form.fields.FormItem;
raimund@1290: import com.smartgwt.client.widgets.form.fields.CheckboxItem;
raimund@1290: import com.smartgwt.client.widgets.form.fields.SpinnerItem;
raimund@1290: import com.smartgwt.client.widgets.form.fields.ColorPickerItem;
raimund@1290: import com.smartgwt.client.widgets.form.fields.ComboBoxItem;
raimund@1292: import com.smartgwt.client.widgets.form.fields.TextItem;
raimund@1287:
raimund@1287: import com.smartgwt.client.widgets.events.ClickEvent;
raimund@1287: import com.smartgwt.client.widgets.events.ClickHandler;
raimund@1292: import com.smartgwt.client.widgets.form.events.ItemChangedEvent;
raimund@1292: import com.smartgwt.client.widgets.form.events.ItemChangedHandler;
raimund@1290: import com.smartgwt.client.types.Alignment;
raimund@1287:
raimund@1287: import de.intevation.flys.client.shared.model.Collection;
raimund@1287: import de.intevation.flys.client.shared.model.CollectionItemAttribute;
raimund@1290: import de.intevation.flys.client.shared.model.Style;
raimund@1290: import de.intevation.flys.client.shared.model.StyleSetting;
raimund@1292: import de.intevation.flys.client.shared.model.FacetRecord;
raimund@1292:
raimund@1292: import de.intevation.flys.client.client.services.CollectionItemAttributeServiceAsync;
raimund@1292: import de.intevation.flys.client.client.services.CollectionItemAttributeService;
raimund@1287: import de.intevation.flys.client.client.ui.CollectionView;
raimund@1287:
raimund@1287: import de.intevation.flys.client.client.FLYSConstants;
raimund@1292: import de.intevation.flys.client.client.Config;
raimund@1287:
raimund@1287: /**
raimund@1287: * @author Raimund Renkert
raimund@1287: */
raimund@1287: public class StyleEditorWindow
raimund@1287: extends Window
raimund@1287: implements ClickHandler
raimund@1287: {
raimund@1287: /** The interface that provides i18n messages. */
raimund@1287: protected FLYSConstants MSG = GWT.create(FLYSConstants.class);
raimund@1287:
raimund@1287: /** The collection */
raimund@1287: protected Collection collection;
raimund@1287:
raimund@1287: /** The parent collection view */
raimund@1287: protected CollectionView view;
raimund@1287:
raimund@1287: /** The attributes */
raimund@1287: protected CollectionItemAttribute attributes;
raimund@1287:
raimund@1292: /** The selected facet. */
raimund@1292: protected FacetRecord facet;
raimund@1292:
raimund@1287: /** Main layout */
raimund@1287: protected VLayout layout;
raimund@1287:
raimund@1292: /** The service used to set collection item attributes. */
raimund@1292: protected CollectionItemAttributeServiceAsync itemAttributeService =
raimund@1292: GWT.create(CollectionItemAttributeService.class);
raimund@1287:
raimund@1287: public StyleEditorWindow (
raimund@1287: Collection collection,
raimund@1292: CollectionItemAttribute attributes,
raimund@1292: FacetRecord facet)
raimund@1287: {
raimund@1287: this.collection = collection;
raimund@1287: this.attributes = attributes;
raimund@1292: this.facet = facet;
raimund@1287: this.layout = new VLayout();
raimund@1287:
raimund@1287: init();
raimund@1287: initPanels();
raimund@1287: }
raimund@1287:
raimund@1287:
raimund@1287: protected void init() {
raimund@1287: setTitle(MSG.properties());
raimund@1290: setWidth(270);
raimund@1290: setHeight(200);
raimund@1287: setCanDragReposition(true);
raimund@1287: setCanDragResize(true);
raimund@1287: setKeepInParentRect(true);
raimund@1287:
raimund@1287: layout.setWidth100();
raimund@1287: layout.setHeight100();
raimund@1287:
raimund@1287: }
raimund@1287:
raimund@1287:
raimund@1287: protected void initPanels() {
raimund@1287: HLayout buttons = new HLayout();
raimund@1287: Button accept = new Button(MSG.label_ok());
raimund@1287: Button cancel = new Button(MSG.label_cancel());
raimund@1287: cancel.addClickHandler(this);
raimund@1290: accept.addClickHandler(new ClickHandler() {
raimund@1290: public void onClick(ClickEvent e) {
raimund@1292: saveStyle();
raimund@1290: }
raimund@1290: });
raimund@1287:
raimund@1287: buttons.addMember(accept);
raimund@1287: buttons.addMember(cancel);
raimund@1290: buttons.setAlign(Alignment.RIGHT);
raimund@1290:
raimund@1292: layout.addMember(createPropertyGrid());;
raimund@1287: layout.addMember(buttons);
raimund@1287: addItem(layout);
raimund@1287: }
raimund@1287:
raimund@1287:
raimund@1287: public void setCollectionView (CollectionView view) {
raimund@1287: this.view = view;
raimund@1287: setParentElement(this.view.getParentElement());
raimund@1287: }
raimund@1287:
raimund@1287:
raimund@1287: public void onClick(ClickEvent event) {
raimund@1287: this.hide();
raimund@1287: }
raimund@1290:
raimund@1290:
raimund@1292: protected VLayout createPropertyGrid() {
raimund@1290: VLayout properties = new VLayout();
raimund@1290:
raimund@1292: Style s = attributes.getStyle(facet.getTheme().getFacet());
raimund@1292:
raimund@1292: TextItem name = new TextItem("name", "Name");
raimund@1292: name.setValue(facet.getName());
raimund@1292: name.setTitleStyle("color:#000; width:120px");
raimund@1292: name.setTitleAlign(Alignment.LEFT);
raimund@1292: name.setDisabled(true);
raimund@1292: name.setShowDisabled(false);
raimund@1292: DynamicForm f = new DynamicForm();
raimund@1292: f.setFields(name);
raimund@1292: properties.addMember(f);
raimund@1290:
raimund@1290: for (int i = 0; i < s.getNumSettings(); i ++) {
raimund@1290: final StyleSetting set = s.getSetting(i);
raimund@1290: DynamicForm property = createPropertyUI(
raimund@1290: set.getDisplayName(),
raimund@1290: set.getName(),
raimund@1290: set.getType(),
raimund@1290: set.getDefaultValue());
raimund@1290: properties.addMember(property);
raimund@1290: }
raimund@1290: return properties;
raimund@1290: }
raimund@1290:
raimund@1290: protected DynamicForm createPropertyUI(
raimund@1290: String dname,
raimund@1290: String name,
raimund@1290: String type,
raimund@1290: String value)
raimund@1290: {
raimund@1290: DynamicForm df = new DynamicForm();
raimund@1290:
raimund@1290: FormItem f;
raimund@1290: if(type.equals("int")) {
raimund@1290: SpinnerItem s = new SpinnerItem(name, dname);
raimund@1290: s.setMin(1);
raimund@1290: s.setMax(10);
raimund@1291: s.setValue(value);
raimund@1290: f = s;
raimund@1290: }
raimund@1290: else if (type.equals("boolean")) {
raimund@1290: CheckboxItem c = new CheckboxItem(name, dname);
raimund@1290: if(value.equals("true")) {
raimund@1290: c.setValue(true);
raimund@1290: }
raimund@1290: else {
raimund@1290: c.setValue(false);
raimund@1290: }
raimund@1290: c.setLabelAsTitle(true);
raimund@1290: f = c;
raimund@1290: }
raimund@1290: else if (type.equals("Color")) {
raimund@1291: ColorPickerItem c = new ColorPickerItem(name, dname);
raimund@1291: c.setValue(rgbToHtml(value));
raimund@1291: f = c;
raimund@1290: }
raimund@1290: else if (type.equals("Dash")) {
raimund@1290: f = new ComboBoxItem(name, dname);
raimund@1291: f.setValue(value);
raimund@1290: }
raimund@1290: else {
raimund@1290: f = new FormItem();
raimund@1290: }
raimund@1290: f.setTitleStyle("color:#000; width:120px");
raimund@1290: f.setTitleAlign(Alignment.LEFT);
raimund@1290: df.setFields(f);
raimund@1292: df.addItemChangedHandler(new ItemChangedHandler() {
raimund@1292: public void onItemChanged(ItemChangedEvent e) {
raimund@1292: String name = e.getItem().getName();
raimund@1292: String newValue = e.getNewValue().toString();
raimund@1292: GWT.log("changed: " + name);
raimund@1292: setNewValue(name, newValue);
raimund@1292: }
raimund@1292: });
raimund@1290:
raimund@1290: return df;
raimund@1290: }
raimund@1291:
raimund@1291: protected String rgbToHtml(String rgb) {
raimund@1291: String[] parts = rgb.split(",");
raimund@1291: int values[] = new int[parts.length];
raimund@1291: for (int i = 0; i < parts.length; i++) {
raimund@1291: parts[i] = parts[i].trim();
raimund@1291: try {
raimund@1291: values[i] = Integer.parseInt(parts[i]);
raimund@1291: }
raimund@1291: catch(NumberFormatException nfe) {
raimund@1291: return "#000000";
raimund@1291: }
raimund@1291: }
raimund@1291: String hex = "#";
raimund@1291: for (int i = 0; i < values.length; i++) {
raimund@1292: if (values[i] < 16) {
raimund@1292: hex += "0";
raimund@1292: }
raimund@1292: hex += Integer.toHexString(values[i]);
raimund@1291: }
raimund@1291: return hex;
raimund@1291: }
raimund@1291:
raimund@1291: protected String htmlToRgb(String html) {
raimund@1291: if (!html.startsWith("#")) {
raimund@1291: return "0, 0, 0";
raimund@1291: }
raimund@1291:
raimund@1291: int r = Integer.valueOf(html.substring(1, 3), 16);
raimund@1291: int g = Integer.valueOf(html.substring(3, 5), 16);
raimund@1291: int b = Integer.valueOf(html.substring(5, 7), 16);
raimund@1291:
raimund@1291: return r + ", " + g + ", " + b;
raimund@1291: }
raimund@1291:
raimund@1292: protected void saveStyle () {
raimund@1292: GWT.log("StyleEditorWindow.saveStyle()");
raimund@1292: Config config = Config.getInstance();
raimund@1292: String url = config.getServerUrl();
raimund@1292: String locale = config.getLocale();
raimund@1292:
raimund@1292: itemAttributeService.setCollectionItemAttribute(
raimund@1292: this.collection,
raimund@1292: attributes.getArtifact(),
raimund@1292: url,
raimund@1292: locale,
raimund@1292: attributes,
raimund@1292: new AsyncCallback() {
raimund@1292: public void onFailure (Throwable caught) {
raimund@1292: GWT.log("Could not set Collection item attributes.");
raimund@1292: }
raimund@1292: public void onSuccess(Void v) {
raimund@1292: GWT.log("Successfully saved collection item attributes.");
raimund@1292: }
raimund@1292: });
raimund@1292:
raimund@1292:
raimund@1292: this.hide();
raimund@1292: }
raimund@1292:
raimund@1292: protected final void setNewValue(String name, String value) {
raimund@1292: Style s = attributes.getStyle(facet.getTheme().getFacet());
raimund@1292: StyleSetting set = s.getSetting(name);
raimund@1292: if(name.equals("linecolor")) {
raimund@1292: value = htmlToRgb(value);
raimund@1292: }
raimund@1292: set.setDefaultValue(value);
raimund@1292: }
raimund@1287: }
raimund@1290: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :