ingo@805: package de.intevation.flys.client.client.ui.map; ingo@805: ingo@805: import com.google.gwt.core.client.GWT; christian@4739: ingo@805: import com.smartgwt.client.types.ListGridFieldType; christian@4064: import com.smartgwt.client.util.BooleanCallback; christian@4064: import com.smartgwt.client.util.SC; ingo@805: import com.smartgwt.client.widgets.grid.ListGridField; ingo@1327: import com.smartgwt.client.widgets.grid.ListGridRecord; christian@4064: import com.smartgwt.client.widgets.grid.events.HeaderDoubleClickEvent; christian@4064: import com.smartgwt.client.widgets.grid.events.HeaderDoubleClickHandler; ingo@805: import com.smartgwt.client.widgets.layout.VLayout; ingo@1377: import com.smartgwt.client.widgets.menu.Menu; ingo@1377: import com.smartgwt.client.widgets.menu.MenuItem; ingo@1377: import com.smartgwt.client.widgets.menu.events.ClickHandler; ingo@1377: import com.smartgwt.client.widgets.menu.events.MenuItemClickEvent; ingo@805: ingo@805: import de.intevation.flys.client.client.FLYSConstants; felix@1555: import de.intevation.flys.client.client.ui.CollectionView; ingo@805: import de.intevation.flys.client.client.ui.ThemePanel; christian@4064: import de.intevation.flys.client.shared.model.AttributedTheme; christian@4064: import de.intevation.flys.client.shared.model.FacetRecord; christian@4064: import de.intevation.flys.client.shared.model.OutputMode; christian@4064: import de.intevation.flys.client.shared.model.Theme; ingo@805: ingo@805: ingo@805: /** ingo@805: * @author Ingo Weinzierl ingo@805: */ ingo@805: public class MapThemePanel extends ThemePanel { ingo@805: ingo@4330: public static final int CELL_HEIGHT = 25; ingo@1327: ingo@1327: ingo@806: public interface ActivateCallback { ingo@806: void activate(Theme theme, boolean activate); ingo@806: } ingo@806: ingo@806: ingo@1303: public interface ThemeMovedCallback { ingo@1303: void onThemeMoved(Theme theme, int oldIdx, int newIdx); ingo@1303: } ingo@1303: ingo@1377: public interface LayerZoomCallback { ingo@1377: void onLayerZoom(Theme theme, String extent); ingo@1377: } ingo@1377: ingo@1303: ingo@806: ingo@805: private FLYSConstants MSG = GWT.create(FLYSConstants.class); ingo@805: ingo@805: ingo@1303: protected ActivateCallback activateCallback; ingo@1303: protected ThemeMovedCallback themeMovedCallback; ingo@1377: protected LayerZoomCallback layerZoomCallback; ingo@806: ingo@1382: protected ListGridRecord[] oldRecords; ingo@1382: ingo@806: ingo@805: public static final String GRID_FIELD_ACTIVE = "active"; ingo@805: public static final String GRID_FIELD_NAME = "name"; ingo@805: ingo@805: ingo@805: protected MapOutputTab mapOut; ingo@805: ingo@805: ingo@806: public MapThemePanel( felix@1555: CollectionView view, ingo@1303: OutputMode mode, ingo@1382: MapOutputTab mapOut, ingo@1303: ActivateCallback activateCallback, ingo@1377: ThemeMovedCallback themeMovedCallback, ingo@1377: LayerZoomCallback layerZoomCallback ingo@1303: ) { felix@1555: super(mode, view); ingo@805: ingo@1382: this.mapOut = mapOut; ingo@1303: this.activateCallback = activateCallback; ingo@1303: this.themeMovedCallback = themeMovedCallback; ingo@1377: this.layerZoomCallback = layerZoomCallback; ingo@806: ingo@805: initGrid(); ingo@805: initLayout(); ingo@805: ingo@805: updateGrid(); ingo@805: } ingo@805: ingo@805: ingo@805: protected void initLayout() { ingo@805: setWidth100(); ingo@805: setHeight100(); ingo@805: ingo@805: VLayout layout = new VLayout(); ingo@805: layout.setWidth100(); ingo@805: layout.setHeight100(); ingo@805: ingo@805: layout.addMember(list); ingo@805: layout.addMember(navigation); ingo@805: ingo@805: addChild(layout); ingo@805: } ingo@805: ingo@805: ingo@805: protected void initGrid() { ingo@805: list.setCanEdit(true); ingo@805: list.setCanSort(false); ingo@805: list.setShowRecordComponents(false); ingo@805: list.setShowRecordComponentsByCell(true); ingo@805: list.setShowHeader(true); ingo@805: list.setShowHeaderContextMenu(false); raimund@2436: list.setCanReorderFields(false); ingo@805: list.setWidth100(); ingo@805: list.setHeight100(); ingo@805: raimund@2436: list.addHeaderDoubleClickHandler(new HeaderDoubleClickHandler() { christian@4064: @Override raimund@2436: public void onHeaderDoubleClick(HeaderDoubleClickEvent event) { raimund@2436: // cancel the event. raimund@2436: return; raimund@2436: } raimund@2436: }); raimund@2436: ingo@1327: list.setCellHeight(CELL_HEIGHT); ingo@1327: list.setShowRecordComponents(true); ingo@1327: list.setShowRecordComponentsByCell(true); ingo@1327: list.setShowAllRecords(true); ingo@1327: ingo@805: list.addEditCompleteHandler(this); ingo@805: ingo@805: ListGridField active = new ListGridField(GRID_FIELD_ACTIVE, " ", 20); ingo@805: active.setType(ListGridFieldType.BOOLEAN); ingo@1327: active.setCanDragResize(false); ingo@1327: ingo@805: ListGridField name = new ListGridField( ingo@805: GRID_FIELD_NAME, MSG.chart_themepanel_header_themes()); ingo@805: name.setType(ListGridFieldType.TEXT); ingo@805: ingo@4330: list.setFields(active, name); ingo@805: } ingo@805: ingo@805: ingo@805: @Override ingo@1382: protected void clearGrid() { ingo@1382: oldRecords = list.getRecords(); ingo@1382: super.clearGrid(); ingo@1382: } ingo@1382: ingo@1382: ingo@1382: @Override ingo@1382: protected void addFacetRecord(FacetRecord rec) { ingo@1382: Theme newTheme = rec.getTheme(); ingo@1382: boolean isNew = true; ingo@1382: ingo@1382: for (ListGridRecord old: getOldRecords()) { ingo@1382: FacetRecord fr = (FacetRecord) old; ingo@1382: ingo@1382: if (newTheme.equals(fr.getTheme())) { ingo@1382: isNew = false; ingo@1382: break; ingo@1382: } ingo@1382: } ingo@1382: ingo@1382: if (isNew && mapOut != null) { ingo@1382: mapOut.addLayer(mapOut.createWMSLayer(newTheme)); ingo@1382: } ingo@1382: ingo@1382: super.addFacetRecord(rec); ingo@1382: } ingo@1382: ingo@1382: ingo@1382: @Override ingo@1377: protected Menu getSingleContextMenu(final ListGridRecord[] records) { ingo@1377: Menu menu = super.getSingleContextMenu(records); ingo@1377: ingo@1377: MenuItem layerZoom = createLayerZoomItem(records); ingo@1377: if (layerZoom != null) { ingo@1377: menu.addItem(layerZoom); ingo@1377: } aheinecke@5792: menu.addItem(createMapURLItem(records)); ingo@1377: ingo@1377: return menu; ingo@1377: } ingo@1377: ingo@1377: christian@4739: protected MenuItem createMapURLItem(final ListGridRecord[] records) { christian@4739: final FacetRecord fr = (FacetRecord) records[0]; christian@4739: final AttributedTheme at = (AttributedTheme) fr.getTheme(); christian@4739: aheinecke@5792: MenuItem item = new MenuItem(MSG.wmsURLMenuItem()); christian@4739: item.addClickHandler(new ClickHandler() { christian@4739: @Override christian@4739: public void onClick(MenuItemClickEvent evt) { aheinecke@5792: String url = getMapOutputTab().wmsUrls().get(at.getAttr("layers")); aheinecke@5792: SC.say(MSG.wmsURLBoxTitle(), url); christian@4739: } christian@4739: }); christian@4739: christian@4739: return item; christian@4739: } christian@4739: christian@4739: ingo@1382: @Override ingo@1382: protected MenuItem createRemoveItem(final ListGridRecord[] records) { ingo@1382: MenuItem item = super.createRemoveItem(records); ingo@1382: item.addClickHandler(new ClickHandler() { ingo@1382: @Override ingo@1382: public void onClick(MenuItemClickEvent evt) { ingo@1422: SC.ask(MSG.askThemeRemove(), new BooleanCallback() { ingo@1422: @Override ingo@1422: public void execute(Boolean value) { ingo@1422: if (value) { ingo@1422: for (ListGridRecord record: records) { ingo@1422: FacetRecord facet = (FacetRecord) record; ingo@1382: ingo@1422: Theme theme = facet.getTheme(); ingo@1422: theme.setVisible(0); ingo@1422: theme.setActive(0); ingo@1382: ingo@1422: AttributedTheme at = (AttributedTheme) theme; ingo@1422: getMapOutputTab().removeLayer(at.getAttr("layers")); ingo@1422: } ingo@1382: ingo@1422: updateCollection(); ingo@1422: } ingo@1422: } ingo@1422: }); ingo@1382: } ingo@1382: }); ingo@1382: ingo@1382: return item; ingo@1382: } ingo@1382: ingo@1382: ingo@1377: protected MenuItem createLayerZoomItem(final ListGridRecord[] recs) { ingo@1377: final FacetRecord fr = (FacetRecord) recs[0]; ingo@1377: final AttributedTheme at = (AttributedTheme) fr.getTheme(); ingo@1377: ingo@1377: final String extent = at.getAttr("extent"); ingo@1377: ingo@1377: if (extent == null || extent.length() == 0) { ingo@1377: return null; ingo@1377: } ingo@1377: ingo@1377: MenuItem zoom = new MenuItem(MSG.zoomToLayer()); ingo@1377: zoom.addClickHandler(new ClickHandler() { ingo@1377: @Override ingo@1377: public void onClick(MenuItemClickEvent evt) { ingo@1377: if (layerZoomCallback != null) { ingo@1377: layerZoomCallback.onLayerZoom(at, extent); ingo@1377: } ingo@1377: } ingo@1377: }); ingo@1377: ingo@1377: return zoom; ingo@1377: } ingo@1377: christian@4064: @Override christian@4064: public String getWidthAsString() { christian@4064: if(!isVisible()) { christian@4064: return "0"; christian@4064: } christian@4064: else { christian@4064: return super.getWidthAsString(); christian@4064: } christian@4064: } ingo@1377: ingo@1377: @Override ingo@805: public void activateTheme(Theme theme, boolean active) { ingo@806: if (activateCallback != null) { ingo@806: activateCallback.activate(theme, active); ingo@806: } ingo@806: ingo@805: theme.setActive(active ? 1 : 0); ingo@805: } ingo@1303: ingo@1303: ingo@1303: @Override ingo@1303: protected void fireThemeMoved(Theme theme, int oldIdx, int newIdx) { ingo@1303: if (themeMovedCallback != null) { ingo@1303: themeMovedCallback.onThemeMoved(theme, oldIdx, newIdx); ingo@1303: } ingo@1303: } ingo@1382: ingo@1382: ingo@1382: protected ListGridRecord[] getOldRecords() { ingo@1382: return oldRecords != null ? oldRecords : new ListGridRecord[0]; ingo@1382: } ingo@1382: ingo@1382: ingo@1382: protected MapOutputTab getMapOutputTab() { ingo@1382: return mapOut; ingo@1382: } ingo@805: } ingo@805: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :