SplashUI.java
上传用户:liming6160
上传日期:2022-06-07
资源大小:785k
文件大小:7k
源码类别:

J2ME

开发平台:

Java

  1. /*
  2.  *    MFRadio - stream radio client for Java 2 Micro Edition
  3.  *    Copyright (C) 2001 - 2007 Mobicom-Kavkaz, Inc
  4.  *    
  5.  *    Visit the project page at: http://mfradio.sourceforge.net
  6.  *
  7.  *    This program is free software; you can redistribute it and/or modify
  8.  *    it under the terms of the GNU General Public License as published by
  9.  *    the Free Software Foundation; either version 2 of the License, or
  10.  *    (at your option) any later version.
  11.  *
  12.  *    This program is distributed in the hope that it will be useful,
  13.  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.  *    GNU General Public License for more details.
  16.  *
  17.  *    You should have received a copy of the GNU General Public License
  18.  *    along with this program; if not, write to the Free Software
  19.  *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20.  *
  21.  *    Java (TM) and all Java (TM)-based marks are a trademark or 
  22.  *    registered trademark of Sun Microsystems, Inc, in the United States 
  23.  *    and other countries.
  24.  */
  25. package ru.mobicomk.mfradio.ui;
  26. import java.io.IOException;
  27. import javax.microedition.lcdui.Canvas;
  28. import javax.microedition.lcdui.Font;
  29. import javax.microedition.lcdui.Graphics;
  30. import javax.microedition.lcdui.Image;
  31. import ru.mobicomk.mfradio.Constants;
  32. import ru.mobicomk.mfradio.iface.ProgressObserver;
  33. /**
  34.  * Splash screen form. This form displays during application start.
  35.  * @author  Roman Bondarenko
  36.  */
  37. public class SplashUI 
  38.     extends Canvas
  39.     implements ProgressObserver {
  40.     
  41.     private Image screen_;
  42.     private String message_;
  43.     
  44.     private Font font_ = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_PLAIN, Font.SIZE_SMALL);
  45.     
  46.     private int messageLeft_;
  47.     private int messageBottom_;
  48.     private int maxMessageWidth_;
  49.     /*
  50.     private int progressStep_;
  51.     private int progressHeight_;
  52.     private int progressLeft_;
  53.     private int progressTop_;
  54.      **/
  55.     private static final int PROGRESS_MAX = 10;
  56.     
  57.     /** 
  58.      * Creates a new instance of <i>Splash</i> form.
  59.      */
  60.     public SplashUI() {
  61.         super();
  62.     }
  63.     
  64.     /**
  65.      * Second-level initialization. 
  66.      * @param message Status message.
  67.      */
  68.     public void init(String message) {
  69.         setMessage(message);
  70.     }
  71.     // ProgressObserver implementation /////////////////////////////////////////
  72.     
  73.     /**
  74.      * Get <i>stoppable</i> flag value.
  75.      * @return <b>true</b> if <i>stoppable</i> flag is set, <b>false</b> othrwise.
  76.      * @see ru.mobicomk.mfradio.ui.ProgressBarUI
  77.      * @see ru.mobicomk.mfradio.iface.ProgressObserver
  78.      * @see ru.mobicomk.mfradio.iface.ProgressObserver#isStoppable
  79.      */
  80.     public boolean isStoppable() {
  81.         return false;
  82.     }
  83.     /**
  84.      * Set <i>stoppable</i> flag to new state. (NOTE: do nothing in this case).
  85.      * @param stoppable New value for <i>stoppable</i> flag.
  86.      * @see ru.mobicomk.mfradio.ui.ProgressBarUI
  87.      * @see ru.mobicomk.mfradio.iface.ProgressObserver
  88.      * @see ru.mobicomk.mfradio.iface.ProgressObserver#setStoppable
  89.      */
  90.     public void setStoppable(boolean stoppable) {
  91.         // do nothing
  92.     }
  93.     /**
  94.      * Check if user select <i>Stop</i> command.
  95.      * @return <b>true</b> if user selects a <i>Stop</i> command, 
  96.      * <b>false</b> in other case.
  97.      * @see ru.mobicomk.mfradio.iface.ProgressObserver
  98.      * @see ru.mobicomk.mfradio.iface.ProgressObserver#isStopped
  99.      */
  100.     public boolean isStopped() {
  101.         return false;
  102.     }
  103.     /**
  104.      * This method called for update long-time operation progress.
  105.      * @see ru.mobicomk.mfradio.iface.ProgressObserver
  106.      * @see ru.mobicomk.mfradio.iface.ProgressObserver#updateProgress
  107.      */
  108.     public void updateProgress() {
  109.     }
  110.     /**
  111.      * Set new progress bar status message.
  112.      * @param message New status message value.
  113.      * @see ru.mobicomk.mfradio.iface.ProgressObserver
  114.      * @see ru.mobicomk.mfradio.iface.ProgressObserver#setMessage
  115.      */
  116.     public void setMessage(String message) {
  117.         message_ = message;
  118.         repaint();
  119.     }
  120.     // Canvas implementation ///////////////////////////////////////////////////
  121.     
  122.     /*
  123.      * {@link Canvas} interface implementaion.
  124.      * @see javax.microedition.lcdui.Canvas
  125.      * @see javax.microedition.lcdui.Canvas#paint
  126.      */
  127.     protected void paint(Graphics graphics) {
  128.         if (screen_ == null) {
  129.             buildScreen(graphics); // prepare not mutable parts
  130.             calcMessageCoords(0, 0, screen_.getWidth(), screen_.getHeight());
  131.         }
  132.         
  133.         // draw not mutable parts
  134.         graphics.drawImage(screen_, 0, 0, Graphics.TOP | Graphics.LEFT);        
  135.         
  136.         // draw mutable parts
  137.         paintMessage(graphics, 0, 0, screen_.getWidth(), screen_.getHeight());
  138.         
  139.         // progress
  140.         //graphics.setColor(Constants.COLOR_GRAY);
  141.         //graphics.fillRect(progressLeft_, progressTop_, progressStep_ * progress_, progressHeight_);
  142.     }
  143.     // Privates ////////////////////////////////////////////////////////////////
  144.     
  145.     private void calcMessageCoords(int x, int y, int width, int height) {
  146.         int x0 = x + Constants.UI_ITEM_MARGIN;
  147.         int y0 = y + height - Constants.UI_ITEM_MARGIN;
  148.         
  149.         messageLeft_ = x0 + Constants.UI_ITEM_SPAN;
  150.         messageBottom_ = y0;
  151.         maxMessageWidth_ = width - ((Constants.UI_ITEM_MARGIN + Constants.UI_ITEM_SPAN) * 2);
  152.     }
  153.     private void buildScreen(Graphics graphics) {
  154.         screen_ = Image.createImage(graphics.getClipWidth(), graphics.getClipHeight());
  155.         int width = screen_.getWidth();
  156.         int height = screen_.getHeight();
  157.         Graphics g = screen_.getGraphics();
  158.         // background
  159.         g.setColor(Constants.COLOR_WHITE);
  160.         g.fillRect(0, 0, width, height);
  161.         
  162.         // logo
  163.         Image imgLogo = null;
  164.         try {
  165.             g.drawImage(Image.createImage("/i/mflogo.png"), width/2, height/2, Graphics.HCENTER | Graphics.VCENTER);
  166.         } catch (IOException ex) { }
  167.         
  168.         // progress
  169.         /*
  170.         progressHeight_ = 2;
  171.         progressLeft_ = Constants.UI_ITEM_MARGIN;
  172.         progressTop_ = height - 2 - progressHeight_;
  173.         progressStep_ = (width - (Constants.UI_ITEM_MARGIN * 2)) / PROGRESS_MAX;
  174.         
  175.         g.setColor(Constants.COLOR_GRAY);
  176.         g.fillRect(progressLeft_, progressTop_, width - (Constants.UI_ITEM_MARGIN * 2) , progressHeight_);
  177.          **/
  178.     }
  179.     private void paintMessage(Graphics g, int x, int y, int width, int height) {
  180.         char[] chars = message_.toCharArray();
  181.         int length = message_.length();
  182.         while (font_.charsWidth(chars, 0, length) > maxMessageWidth_) {
  183.            length--;
  184.         }
  185.         g.setColor(Constants.COLOR_BLACK);
  186.         g.setFont(font_);
  187.         g.drawSubstring(message_, 0, length, messageLeft_, messageBottom_, Graphics.LEFT | Graphics.BOTTOM);
  188.     }
  189. }