felix@858: package de.intevation.flys.client.client.ui.chart; felix@858: felix@858: import com.google.gwt.core.client.GWT; felix@858: felix@858: import com.smartgwt.client.types.Alignment; felix@858: import com.smartgwt.client.widgets.Canvas; felix@858: import com.google.gwt.user.client.rpc.AsyncCallback; felix@858: import com.smartgwt.client.types.ListGridFieldType; felix@858: import com.smartgwt.client.widgets.grid.ListGrid; felix@858: import com.smartgwt.client.widgets.grid.ListGridField; felix@858: import com.smartgwt.client.widgets.grid.ListGridRecord; felix@858: import com.smartgwt.client.widgets.layout.HLayout; felix@858: import com.smartgwt.client.widgets.form.fields.SpinnerItem; felix@858: import com.smartgwt.client.widgets.form.DynamicForm; felix@858: import com.smartgwt.client.widgets.form.fields.events.ChangedEvent; felix@858: import com.smartgwt.client.widgets.form.fields.events.ChangedHandler; felix@858: felix@858: import de.intevation.flys.client.client.Config; felix@858: import de.intevation.flys.client.shared.model.Artifact; felix@858: import de.intevation.flys.client.shared.model.Collection; felix@858: import de.intevation.flys.client.shared.model.OutputMode; felix@858: felix@858: import de.intevation.flys.client.shared.model.Data; felix@858: import de.intevation.flys.client.shared.model.DataItem; felix@858: import de.intevation.flys.client.shared.model.DefaultArtifact; felix@858: import de.intevation.flys.client.shared.model.DefaultData; felix@858: import de.intevation.flys.client.shared.model.DefaultDataItem; felix@858: import de.intevation.flys.client.shared.model.FacetRecord; felix@858: felix@1379: import de.intevation.flys.client.client.services.FeedServiceAsync; felix@1379: felix@858: felix@858: /** felix@858: * ThemePanel much like ChartThemePanel, but shows an "Actions" column, felix@858: * needed for interaction in the CrossSection Charts. felix@858: */ felix@858: public class CrossSectionChartThemePanel felix@858: extends ChartThemePanel { felix@858: felix@858: /** felix@858: * Trivial constructor. felix@858: */ felix@858: public CrossSectionChartThemePanel( felix@858: Collection collection, felix@858: OutputMode mode) felix@858: { felix@858: super(collection, mode); felix@858: } felix@858: felix@858: felix@858: /** felix@1379: * Create the handler for ChangeEvents on the Spinner in the felix@1379: * facets that control km of cross section. felix@1379: * felix@1379: * @param feedService The FeedService to send (changed) data to. felix@1379: * @param facetRecord The FacetRecord (~row in table) where this felix@1379: * handler is added to (to a child, to be exact). felix@1379: */ felix@1379: public final ChangedHandler createSpinnerHandler( felix@1379: final FeedServiceAsync feedService, felix@1379: final FacetRecord facetRecord) felix@1379: { felix@1379: Config config = Config.getInstance(); felix@1379: final String locale = config.getLocale(); felix@1379: felix@1379: ChangedHandler handler = new ChangedHandler() felix@1379: { felix@1379: @Override felix@1379: public void onChanged(ChangedEvent ce) { felix@1379: if (ce.getValue() == null) { felix@1379: return; felix@1379: } felix@1379: DefaultDataItem kmItem = new DefaultDataItem( felix@1379: "cross_section.km", felix@1379: "cross_section.km", felix@1379: ce.getValue().toString()); felix@1379: DefaultData km = new DefaultData( felix@1379: "cross_section.km", felix@1379: null, felix@1379: null, felix@1379: new DataItem[] {kmItem}); felix@1379: Data[] feedData = new Data[] {km}; raimund@1425: feedService.feed( felix@1379: locale, felix@1379: new DefaultArtifact( felix@1379: facetRecord.getTheme().getArtifact(), felix@1379: "TODO:hash"), felix@1379: feedData, felix@1379: new AsyncCallback() { felix@1379: public void onFailure(Throwable caught) { felix@1379: GWT.log("Could not feed artifact " + caught.getMessage()); felix@1379: // TODO SC.warn felix@1379: } felix@1379: public void onSuccess(Artifact artifact) { felix@1379: GWT.log("Successfully fed"); felix@1379: // TODO: Also update content of spinnerbox felix@1379: requestRedraw(); felix@1379: } felix@1379: }); felix@1379: } felix@1379: }; felix@1379: return handler; felix@1379: } felix@1379: felix@1379: felix@1379: /** felix@858: * Create and configure the Grid to display. felix@858: */ felix@858: @Override felix@858: protected ListGrid createGrid() { felix@858: ListGrid list = new ListGrid() { felix@858: @Override felix@1379: protected Canvas createRecordComponent( felix@1379: final ListGridRecord record, felix@1379: Integer colNum) felix@1379: { felix@861: // Only cross_section Facets display an action widget. felix@861: final FacetRecord facetRecord = (FacetRecord) record; felix@861: if (!facetRecord.getTheme().getFacet().equals( felix@1379: "cross_section")) felix@1379: { felix@861: return null; felix@861: } felix@858: felix@858: String fieldName = this.getFieldName(colNum); felix@858: felix@888: if (fieldName.equals(GRID_FIELD_ACTIONS)) { felix@858: HLayout recordCanvas = new HLayout(3); felix@858: recordCanvas.setHeight(22); felix@858: recordCanvas.setAlign(Alignment.CENTER); felix@858: // TODO Refactor in createSpinner(data, artifact) felix@858: SpinnerItem spinnerItem = new SpinnerItem(); felix@858: spinnerItem.setShowTitle(false); felix@858: spinnerItem.setTitle("Waterlevel-Spinner"); felix@861: spinnerItem.setWidth(45); felix@858: // TODO actually get the value from artifact felix@858: // TODO actually get the range from artifact (or river?) felix@858: spinnerItem.setDefaultValue(0); felix@858: spinnerItem.setMin(0); felix@858: spinnerItem.setMax(1000); felix@858: spinnerItem.setStep(5f); felix@890: spinnerItem.setChangeOnKeypress(true); felix@858: felix@1379: spinnerItem.addChangedHandler( felix@1379: createSpinnerHandler( felix@1379: feedService, felix@1379: facetRecord)); felix@858: felix@858: DynamicForm formWrap = new DynamicForm(); felix@858: formWrap.setFields(spinnerItem); felix@858: formWrap.setTitlePrefix(""); felix@858: formWrap.setTitleSuffix(""); felix@858: recordCanvas.addMember(formWrap); felix@858: return recordCanvas; felix@858: } felix@858: else { felix@858: return null; felix@858: } felix@858: } felix@858: }; felix@858: list.setCanResizeFields(true); felix@858: list.setShowRecordComponents(true); felix@858: list.setShowRecordComponentsByCell(true); felix@858: list.setShowAllRecords(true); felix@1378: list.setShowHeaderContextMenu(false); felix@858: return list; felix@858: } felix@858: felix@858: felix@858: /** felix@858: * Initializes the components (columns) of the theme grid. felix@858: */ felix@858: @Override felix@858: protected void initGrid() { felix@858: list.setCanEdit(true); felix@858: list.setCanSort(false); felix@858: list.setShowRecordComponents(true); felix@858: list.setShowRecordComponentsByCell(true); felix@858: list.setShowHeader(true); felix@858: //list.setShowHeaderContextMenu(false); felix@858: list.setWidth100(); felix@858: list.setHeight100(); felix@858: felix@858: list.addEditCompleteHandler(this); felix@858: felix@858: ListGridField active = new ListGridField(GRID_FIELD_ACTIVE, " ", 20); felix@858: active.setType(ListGridFieldType.BOOLEAN); felix@858: felix@858: ListGridField name = new ListGridField( felix@858: GRID_FIELD_NAME, MSG.chart_themepanel_header_themes()); felix@858: name.setType(ListGridFieldType.TEXT); felix@858: felix@858: ListGridField actions = new ListGridField(GRID_FIELD_ACTIONS, felix@891: MSG.chart_themepanel_header_actions(), 50); felix@858: felix@858: list.setFields(active, name, actions); felix@858: } felix@858: } felix@858: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :