InfoDialog.java

/**
 * Copyright (c) 2012-2013 Nokia Corporation. All rights reserved.
 * Nokia and Nokia Connecting People are registered trademarks of Nokia Corporation.
 * Oracle and Java are trademarks or registered trademarks of Oracle and/or its
 * affiliates. Other product and company names mentioned herein may be trademarks
 * or trade names of their respective owners.
 * See LICENSE.TXT for license information.
 */

package com.nokia.example.amaze.ui;

import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.midlet.MIDlet;

import com.nokia.example.amaze.Main;

/**
 * A dialog for showing information about this application.
 */
public class InfoDialog {
    // Constants
    public static final String LINK_URL = "http://developer.nokia.com";
    private static final int TEXT_WIDTH = 240 - MazeCanvas.MARGIN * 2;

    // Members
    private Image _backgroundImage = null;
    private Font _infoTextFont = null;
    private TextWrapper _textWrapper = null;
    private MIDlet _midlet = null;
    private final String _infoText
        = "This is a Nokia example game application which demonstrates the use "
        + "of Mobile 3D Graphics framework with accelerometer sensor and "
        + "gestures. Guide the marble through the maze by tilting the phone "
        + "before the time runs out.\n\n"
        + "For more information, visit:";
    private int _linkTextY = 0;
    private int _linkTextHeight = 0;

    /**
     * Constructor.
     */
    public InfoDialog(MIDlet midlet) {
        _midlet = midlet;
        _backgroundImage = Main.makeImage("/graphics/dimmed-bg.png");
        
        _infoTextFont = Font.getFont(
            Font.getDefaultFont().getFace(),
            Font.getDefaultFont().getStyle(),
            Main.HAS_ONE_KEY_BACK ? Font.SIZE_SMALL : Font.SIZE_MEDIUM); 
        
        _textWrapper = TextWrapper.instance(_infoTextFont, TEXT_WIDTH);
    }

    /**
     * Paints the info dialog.
     * @param graphics
     */
    public void paint(Graphics graphics) {
        final int topLeft = Graphics.TOP | Graphics.LEFT;
        
        graphics.drawImage(_backgroundImage, 0, 0, topLeft);
        graphics.setColor(MazeCanvas.TEXT_COLOR);
        
        int y = MazeCanvas.MARGIN + 20;
        
        final Font titleFont = Font.getFont(
            Font.getDefaultFont().getFace(),
            Font.STYLE_BOLD,
            Font.SIZE_LARGE);
        graphics.setFont(titleFont);
        graphics.drawString("aMaze " + _midlet.getAppProperty("MIDlet-Version"),
                            MazeCanvas.MARGIN, y, topLeft);
        
        graphics.setFont(_infoTextFont);
        _textWrapper.setWidth(TEXT_WIDTH);
        
        try {
            _textWrapper.setText(_infoText);
            y += MazeCanvas.MARGIN * 2 + 20;
            
            while (_textWrapper.hasMoreLines()) {
                graphics.drawString(_textWrapper.nextLine(),
                        MazeCanvas.MARGIN, y, topLeft);
                y += _textWrapper.lineHeight();
            }
        }
        catch (IllegalArgumentException e) {}
        
        _linkTextY = y + MazeCanvas.MARGIN;
        
        final Font linkFont = Font.getFont(
            _infoTextFont.getFace(),
            Font.STYLE_UNDERLINED,
            _infoTextFont.getSize());
        _linkTextHeight = linkFont.getHeight();
        graphics.setFont(linkFont);
        graphics.drawString(LINK_URL, MazeCanvas.MARGIN, _linkTextY, topLeft);
    }

    /** 
     * @return The Y coordinate of the top of the link text.
     */
    public int linkTextY() {
        return _linkTextY;
    }

    /** 
     * @return The height of the link text in pixels.
     */
    public int linkTextHeight() {
        return _linkTextHeight;
    }
}