ingo@523: package de.intevation.flys.client.client.ui.chart; ingo@523: ingo@523: import com.google.gwt.core.client.GWT; raimund@1286: import com.google.gwt.user.client.rpc.AsyncCallback; ingo@523: ingo@523: import com.smartgwt.client.types.ListGridFieldType; ingo@523: import com.smartgwt.client.widgets.grid.ListGridField; ingo@523: import com.smartgwt.client.widgets.layout.VLayout; raimund@1286: import com.smartgwt.client.widgets.grid.events.RowContextClickEvent; raimund@1286: import com.smartgwt.client.widgets.grid.events.RowContextClickHandler; raimund@1286: import com.smartgwt.client.widgets.menu.Menu; raimund@1286: import com.smartgwt.client.widgets.menu.MenuItem; raimund@1286: import com.smartgwt.client.widgets.menu.events.MenuItemClickEvent; raimund@1286: import com.smartgwt.client.widgets.menu.events.ClickHandler; ingo@523: ingo@523: import de.intevation.flys.client.shared.model.Collection; ingo@524: import de.intevation.flys.client.shared.model.Theme; ingo@805: import de.intevation.flys.client.shared.model.OutputMode; raimund@1286: import de.intevation.flys.client.shared.model.FacetRecord; raimund@1286: import de.intevation.flys.client.shared.model.CollectionItemAttribute; ingo@523: ingo@523: import de.intevation.flys.client.client.FLYSConstants; ingo@805: import de.intevation.flys.client.client.ui.ThemePanel; raimund@1286: import de.intevation.flys.client.client.Config; raimund@1287: import de.intevation.flys.client.client.ui.CollectionView; ingo@523: felix@854: import de.intevation.flys.client.client.services.FeedService; felix@854: import de.intevation.flys.client.client.services.FeedServiceAsync; raimund@1286: import de.intevation.flys.client.client.services.CollectionItemAttributeService; raimund@1286: import de.intevation.flys.client.client.services.CollectionItemAttributeServiceAsync; ingo@523: ingo@523: /** ingo@523: * @author Ingo Weinzierl ingo@523: */ ingo@805: public class ChartThemePanel extends ThemePanel { ingo@805: ingo@523: /** The interface that provides i18n messages. */ felix@858: protected FLYSConstants MSG = GWT.create(FLYSConstants.class); ingo@526: raimund@1286: /** The collection */ raimund@1286: protected Collection collection; raimund@1286: raimund@1287: /** The collection view*/ raimund@1287: protected CollectionView view; raimund@1287: raimund@1286: /** The service used to get collection item attributes. */ raimund@1286: protected CollectionItemAttributeServiceAsync itemAttributeService = raimund@1286: GWT.create(CollectionItemAttributeService.class); raimund@1286: felix@854: public static final String GRID_FIELD_ACTIVE = "active"; felix@854: public static final String GRID_FIELD_NAME = "name"; felix@854: public static final String GRID_FIELD_ACTIONS = "actions"; ingo@523: felix@854: FeedServiceAsync feedService = GWT.create( felix@854: de.intevation.flys.client.client.services.FeedService.class); ingo@523: ingo@523: public ChartThemePanel(Collection collection, OutputMode mode) { ingo@805: super(collection, mode); raimund@1286: this.collection = collection; ingo@523: ingo@523: initGrid(); ingo@523: initLayout(); ingo@523: ingo@523: updateGrid(); ingo@523: } ingo@523: ingo@523: ingo@523: /** ingo@523: * Initializes the layout of this panel. ingo@523: */ ingo@523: protected void initLayout() { ingo@523: setWidth100(); ingo@523: setHeight100(); ingo@523: ingo@523: VLayout layout = new VLayout(); ingo@523: layout.setWidth100(); ingo@523: layout.setHeight100(); ingo@523: ingo@523: layout.addMember(list); ingo@527: layout.addMember(navigation); ingo@523: ingo@523: addChild(layout); ingo@523: } ingo@523: ingo@523: ingo@523: /** ingo@523: * Initializes the components (columns) of the theme grid. ingo@523: */ ingo@523: protected void initGrid() { ingo@523: list.setCanEdit(true); ingo@523: list.setCanSort(false); felix@858: list.setShowRecordComponents(false); ingo@523: list.setShowRecordComponentsByCell(true); ingo@523: list.setShowHeader(true); ingo@523: list.setShowHeaderContextMenu(false); ingo@523: list.setWidth100(); ingo@523: list.setHeight100(); ingo@523: ingo@523: list.addEditCompleteHandler(this); raimund@1286: list.addRowContextClickHandler(new RowContextClickHandler() { raimund@1286: public void onRowContextClick(RowContextClickEvent event) { raimund@1286: FacetRecord record = (FacetRecord) event.getRecord(); raimund@1286: raimund@1286: Menu menu = createContextMenu(record); raimund@1286: list.setContextMenu(menu); raimund@1286: menu.showContextMenu(); raimund@1286: raimund@1286: event.cancel(); raimund@1286: } raimund@1286: }); ingo@523: ingo@1288: ListGridField active = new ListGridField(GRID_FIELD_ACTIVE, " ", 20); ingo@523: active.setType(ListGridFieldType.BOOLEAN); ingo@523: ingo@523: ListGridField name = new ListGridField( ingo@523: GRID_FIELD_NAME, MSG.chart_themepanel_header_themes()); ingo@523: name.setType(ListGridFieldType.TEXT); ingo@523: felix@858: list.setFields(active, name); ingo@523: } ingo@523: ingo@523: raimund@1286: protected Menu createContextMenu(final FacetRecord record) { raimund@1286: Menu menu = new Menu(); raimund@1286: raimund@1286: MenuItem properties = new MenuItem(MSG.properties()); raimund@1286: properties.addClickHandler(new ClickHandler() { raimund@1286: public void onClick(MenuItemClickEvent evt) { raimund@1286: GWT.log("clicked properties"); raimund@1286: getItemAttributes(record); raimund@1286: } raimund@1286: }); raimund@1286: menu.addItem(properties); raimund@1286: return menu; raimund@1286: } raimund@1286: raimund@1286: ingo@805: @Override ingo@805: public void activateTheme(Theme theme, boolean active) { ingo@805: theme.setActive(active ? 1 : 0); ingo@527: } raimund@1286: raimund@1286: raimund@1292: protected void getItemAttributes(final FacetRecord record) { raimund@1286: Config config = Config.getInstance(); raimund@1286: String url = config.getServerUrl(); raimund@1286: String locale = config.getLocale(); raimund@1286: raimund@1286: String artifact = record.getTheme().getArtifact(); raimund@1286: raimund@1286: itemAttributeService.getCollectionItemAttribute( raimund@1286: this.collection, raimund@1286: artifact, raimund@1286: url, raimund@1286: locale, raimund@1286: new AsyncCallback() { raimund@1286: public void onFailure (Throwable caught) { raimund@1286: GWT.log("Could not get Collection item attributes."); raimund@1286: } raimund@1286: public void onSuccess(CollectionItemAttribute cia) { raimund@1286: GWT.log("Successfully loaded collectionitem attributes."); raimund@1287: StyleEditorWindow win = new StyleEditorWindow( raimund@1287: collection, raimund@1292: cia, raimund@1292: record); raimund@1287: win.setCollectionView(view); raimund@1287: win.show(); raimund@1286: } raimund@1286: }); raimund@1286: } raimund@1287: raimund@1287: raimund@1287: public void setCollectionView (CollectionView view) { raimund@1287: this.view = view; raimund@1287: } ingo@523: } ingo@523: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :