/* * Copyright 2011 SWM Services GmbH. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package de.swm.commons.mobile.client.widgets; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.uibinder.client.UiConstructor; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import de.swm.commons.mobile.client.SWMMobile; /** * A ListItem with an Image. * <p/> * <pre> * new DecoratedListItem(resources.gear3(), "Command Panel", "Sub Label "); * </pre> */ public class DecoratedListItem extends ListItem { protected final Image img; protected final Label titleLabel; protected final Label subtitleLabel; protected final HorizontalPanel mainPanel; protected final VerticalPanel vPanel; protected Object userObject; /** * Default constructor. */ public DecoratedListItem() { this.mainPanel = new HorizontalPanel(); this.img = new Image(); this.mainPanel.add(this.img); this.vPanel = new VerticalPanel(); this.vPanel.addStyleName(SWMMobile.getTheme().getMGWTCssBundle().getDecoratedListItemCss().decoratedListItemVPanel()); this.titleLabel = new Label(); this.titleLabel.addStyleName(SWMMobile.getTheme().getMGWTCssBundle().getDecoratedListItemCss() .decoratedListItemTitle()); this.vPanel.add(this.titleLabel); this.subtitleLabel = new Label(); this.subtitleLabel.addStyleName(SWMMobile.getTheme().getMGWTCssBundle().getDecoratedListItemCss() .decoratedListItemSubtitle()); this.vPanel.add(this.subtitleLabel); this.mainPanel.add(this.vPanel); add(this.mainPanel); } /** * Default constructor. * * @param image image od the text box * @param title title * @param subtitle subtitle */ @UiConstructor public DecoratedListItem(ImageResource image, String title, String subtitle) { this(); this.img.setUrlAndVisibleRect(image.getSafeUri(), image.getLeft(), image.getTop(), image.getWidth(), image.getHeight()); this.titleLabel.setText(title); this.subtitleLabel.setText(subtitle); } /** * Default constructor. * * @param image image od the text box * @param title title * @param subtitle subtitle */ public DecoratedListItem(ImageResource image, int width, int height, String title, String subtitle) { this(); this.img.setUrlAndVisibleRect(image.getSafeUri(), image.getLeft(), image.getTop(), width, height); this.titleLabel.setText(title); this.subtitleLabel.setText(subtitle); } public Object getUserObject() { return userObject; } public void setUserObject(Object userObject) { this.userObject = userObject; } /** * Disabled/enables the widget. * * @param disabled true if disabled. */ @Override public void setDisabled(boolean disabled) { super.setDisabled(disabled); if (myDisabled) { this.titleLabel.removeStyleName(SWMMobile.getTheme().getMGWTCssBundle().getDecoratedListItemCss() .decoratedListItemTitle()); this.titleLabel.removeStyleName("gwt-Label"); this.titleLabel.addStyleName(SWMMobile.getTheme().getMGWTCssBundle().getListPanelCss().disabled()); } else { this.titleLabel.addStyleName(SWMMobile.getTheme().getMGWTCssBundle().getDecoratedListItemCss() .decoratedListItemTitle()); this.titleLabel.addStyleName("gwt-Label"); titleLabel.removeStyleName(SWMMobile.getTheme().getMGWTCssBundle().getListPanelCss().disabled()); } } /** * Sets an image. * * @param image the image */ public void setImage(ImageResource image) { this.img.setResource(image); } /** * Sets an image. * * @param image the image */ public void addImage(ImageResource image) { Image toAdd = new Image(); toAdd.setResource(image); this.mainPanel.add(toAdd); } /** * Sets an title. * * @param title the title */ public void setTitle(String title) { this.titleLabel.setText(title); } @Override public String getTitle() { return this.titleLabel.getText(); } /** * Sets the subtitle. * * @param subtitle subtitle */ public void setSubtitle(String subtitle) { this.subtitleLabel.setText(subtitle); } public String getSubtitle() { return this.subtitleLabel.getText(); } public Label getTitleLabel() { return titleLabel; } public Label getSubtitleLabel() { return subtitleLabel; } public Image getImage() { return img; } public HorizontalPanel getMainPanel() { return mainPanel; } /** * Register a handler which processes clicks on the embedded image. * * @param handler the handler * @return the handle registration */ public HandlerRegistration addImageClickHandler(ClickHandler handler) { return this.img.addClickHandler(handler); } /** * Adds a new line to the list item in the style of the subtitle. * * @param newLine . */ public void addLine(String newLine) { Label newLineLabel = new Label(newLine); newLineLabel.addStyleName(SWMMobile.getTheme().getMGWTCssBundle().getDecoratedListItemCss() .decoratedListItemSubtitle()); this.vPanel.add(newLineLabel); } /** * Adds a new line to the list item in the style of the subtitle and a given color. * * @param newLine . * @param color . */ public void addLine(String newLine, String color) { Label newLineLabel = new Label(newLine); newLineLabel.addStyleName(SWMMobile.getTheme().getMGWTCssBundle().getDecoratedListItemCss() .decoratedListItemSubtitle()); newLineLabel.getElement().getStyle().setColor(color); this.vPanel.add(newLineLabel); } }