/******************************************************************************* * Copyright (c) 2011-2012 Nokia Corporation * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Comarch team - initial API and implementation *******************************************************************************/ package org.ned.client.view.renderer; import com.sun.lwuit.Component; import com.sun.lwuit.Display; import com.sun.lwuit.Graphics; import com.sun.lwuit.Label; import com.sun.lwuit.List; import com.sun.lwuit.layouts.BoxLayout; import com.sun.lwuit.plaf.Style; import java.util.Vector; import org.ned.client.Content; import org.ned.client.IContent; import org.ned.client.utils.MediaTypeResolver; import org.ned.client.utils.NedIOUtils; import org.ned.client.view.style.NEDStyleToolbox; /** * * @author damian.janicki */ public class ItemAnimatedListCellRenderer extends ListCellRendererBase { private static final int ICON_FIT_SIZE = 36; private static final int ICON_WIDTH = 32; private int position = 0; private int displayW; private String text = null; private String animatedText = ""; private Label mMediaType; private Vector fileLists = null; public ItemAnimatedListCellRenderer() { super(); if ( com.sun.lwuit.Display.getInstance().isTouchScreenDevice() ) { getStyle().setPadding( 10, 10, 2, 2 ); getSelectedStyle().setPadding( 10, 10, 2, 2 ); } if ( getPreferredH() < ICON_FIT_SIZE ) { setPreferredH( ICON_FIT_SIZE ); } displayW = Display.getInstance().getDisplayWidth(); setLayout( new BoxLayout( BoxLayout.X_AXIS ) ); setWidth( displayW ); setFocusable( true ); mMediaType = new Label( " " );//must set some text to render properly final Style mediaTypeStyle = mMediaType.getStyle(); final Style mediaTypeSelectedStyle = mMediaType.getSelectedStyle(); mediaTypeStyle.setPadding( 0, 0, 0, 0 ); mediaTypeStyle.setMargin( 0, 0, 0, 0 ); mediaTypeStyle.setAlignment( Label.LEFT ); mediaTypeStyle.setBgTransparency( 0 ); mediaTypeSelectedStyle.setPadding( 0, 0, 0, 0 ); mediaTypeSelectedStyle.setMargin( 0, 0, 0, 0 ); mediaTypeSelectedStyle.setAlignment( Label.LEFT ); mMediaType.setPreferredW( ICON_WIDTH ); mMediaType.setCellRenderer( true ); mTitle.setPreferredW( displayW - 2 * ICON_WIDTH ); removeComponent( mTitle ); addComponent( mMediaType ); addComponent( mTitle ); } public Component getListCellRendererComponent( List list, Object value, int index, boolean isSelected ) { IContent content = (IContent)value; mMediaType.setText( "" ); mMediaType.setIcon( null ); mMediaType.setIcon( MediaTypeResolver.getTypeIcon( content.getType() ) ); if ( text == null || !text.equals( content.getText() ) ) { text = content.getText(); mTitle.setText( text ); } if ( content instanceof Content ) { if ( fileLists == null ) { fileLists = NedIOUtils.directoryListing( ((Content)content).getMediaFilePath() ); } } if ( isSelected ) { setFocus( true ); mTitle.getStyle().setFgColor( NEDStyleToolbox.WHITE ); getStyle().setBgPainter( mSelectedPainter ); } else { setFocus( false ); mTitle.getStyle().setFgColor( NEDStyleToolbox.MAIN_FONT_COLOR ); getStyle().setBgPainter( mUnselectedPainter ); } return this; } public void setAnimatedText() { int width = mTitle.getStyle().getFont().stringWidth( text ); if ( hasFocus() && (mTitle.getWidth() <= width) ) { animatedText = text + " "; if ( position < animatedText.length() ) { String currentText = animatedText.substring( position ); if ( mTitle.getStyle().getFont().stringWidth( currentText ) < mTitle.getWidth() ) { currentText += text; } mTitle.setText( currentText ); mTitle.setEndsWith3Points( false ); } } else { mTitle.setEndsWith3Points( true ); } } public void paint( Graphics g ) { setAnimatedText(); super.paint( g ); } public void resetPosition() { position = 0; } public void incrementPosition() { if ( position >= animatedText.length() ) { resetPosition(); } position += 1; } }