TickerTextControl.java
上传用户:luxiaowei
上传日期:2022-06-06
资源大小:58k
文件大小:6k
源码类别:

J2ME

开发平台:

Java

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package com.framework;
  6. import javax.microedition.lcdui.Graphics;
  7. import javax.microedition.lcdui.Image;
  8. /**
  9.  *
  10.  * @author swaroop
  11.  */
  12. public class TickerTextControl extends UIControl implements TimerInterface{
  13.     String text[];
  14.     GTantra font;
  15.     
  16.     
  17.     int tickerX = 0;
  18.     int stringWidth;
  19.     boolean always = false;
  20.     int pallet = 0;
  21.     int titlePallet = 0;
  22.     int allignment = GTantra.TEXT_HCENTER;
  23.     int charHeight;
  24.     private Image icon;
  25.     private int iconAllignment;
  26.     private static final int PADDING = 2;
  27.     BaseTimer timer;
  28.     public void setIcon(Image icon,int allignment)
  29.     {
  30.         this.icon = icon;
  31.         this.iconAllignment = allignment;
  32.         resize();
  33.     }
  34.     public void setPallet(int pallet) {
  35.         this.pallet = pallet;
  36.     }
  37.     public void setAlways(boolean always) {
  38.         this.always = always;
  39.     }
  40.    
  41.     public TickerTextControl(String str,GTantra font) {
  42.        
  43.         if(str == null)
  44.             str = "";
  45.         this.font = font;
  46.         text = new String[]{str};
  47.         charHeight =Util.getMaxCharHeight(font, str);
  48.         resize();
  49.     }
  50.     public void setWidth(int width) {
  51.         super.setWidth(width);
  52.         parse();
  53.     }
  54.     
  55.     public void resize()
  56.     {
  57.        width = font.getStringWidth(text[0]) + (PADDING << 1);
  58.        height = charHeight + (PADDING << 1);
  59.        if(icon != null)
  60.        {
  61.            width += PADDING + icon.getWidth();
  62.            if(icon.getHeight() + (PADDING << 1) > height)
  63.            {
  64.                height = icon.getHeight() + (PADDING << 1);
  65.            }
  66.        }
  67.        parse();
  68.     }
  69.    
  70.     public void resizeNSetBgImage(Image image)
  71.     {
  72.         setBgImage(Util.resizeImage(image, width + (PADDING << 1), height + (PADDING << 1)));
  73.     }
  74.    public void parse()
  75.    {
  76.        String str = text[0];
  77.        int pWidth = width - (PADDING);
  78.        if(icon != null)
  79.        {
  80.            pWidth -= (icon.getWidth() + (PADDING << 1));
  81.        }
  82.        String data = Util.getEllipsisString(text[0] , pWidth,font);
  83.         if(data != null)
  84.         {
  85.             text = new String[2];
  86.             text[0] = str;
  87.             text[1] = data;
  88.         }else
  89.         {
  90.            text = new String[]{str};
  91.         }
  92.         stringWidth = font.getStringWidth( text[0]);
  93.         charHeight =Util.getMaxCharHeight(font, str);
  94.    }
  95.    
  96.     public void setSelected(boolean selected) {
  97.        
  98.         parse();
  99.         if(selected && text.length > 1 && (!isSelected()) && !always)
  100.         {
  101.             tickerX = 0;
  102.             super.setSelected(selected);
  103.         }
  104.         else
  105.             super.setSelected(selected);
  106.         checkTickerStatus();
  107.         
  108.     }
  109.     public void showNotify() {
  110.         if(always)
  111.         {
  112.             tickerX = 0;
  113.         }
  114.         checkTickerStatus();
  115.         super.showNotify();
  116.     }
  117.     private void checkTickerStatus()
  118.     {
  119.          if(text.length > 1)
  120.          {
  121.              if( (always || selected))
  122.              {
  123.                  if(timer == null)
  124.                     timer = BaseTimer.schedule(150, 150, this , 0);
  125.              }else if(timer != null)
  126.              {
  127.                  timer.cancel();
  128.                  timer = null;
  129.              }
  130.          }else if(timer != null)
  131.          {
  132.              timer.cancel();
  133.              timer = null;
  134.          }
  135.     }
  136.      public String getText()
  137.      {
  138.          return text[0];
  139.      }
  140.     public void hideNotify() {
  141.        
  142.         if(timer != null)
  143.          {
  144.              timer.cancel();
  145.              timer = null;
  146.          }
  147.         super.hideNotify();
  148.     }
  149.     public Image getIcon() {
  150.         return icon;
  151.     }
  152.     
  153.     
  154.     public void paint(Graphics g) {
  155.        
  156.         font.setCurrentPallete(pallet);
  157.         
  158.         if (text.length == 1) {
  159.             drawText(g,text[0]);
  160.              
  161.          } else {
  162.             if (isSelected() || (always)) {
  163.                  int startX = (PADDING);
  164.                  int pWidth = width - (PADDING << 1) ;
  165.                  if(icon != null)
  166.                  {
  167.                      if(iconAllignment == Graphics.LEFT)
  168.                      {
  169.                          startX += (PADDING << 1) + icon.getWidth();
  170.                          pWidth -= ((PADDING << 1) + icon.getWidth());
  171.                      }else
  172.                      {
  173.                          pWidth -= ((PADDING << 1) + icon.getWidth());
  174.                      }
  175.                  }
  176.                Util.setClipNSave(startX, 0, pWidth, height, g);
  177.                font.drawString(g, text[0], tickerX, (height - charHeight) >> 1, GTantra.TEXT_LEFT);
  178.                Util.restoreSetClip(g);  
  179.              } else {
  180.                 drawText(g,text[1]);
  181.             }
  182.         }
  183.         if(icon != null)
  184.         {
  185.             if(iconAllignment == Graphics.LEFT)
  186.             {
  187.                 g.drawImage(icon, PADDING, (height - icon.getHeight()) >> 1, 0);
  188.             }else if(iconAllignment == Graphics.RIGHT)
  189.             {
  190.                 g.drawImage(icon, width - icon.getWidth() - PADDING, (height - icon.getHeight()) >> 1, 0);
  191.             }
  192.         }
  193.     }
  194.     private void drawText(Graphics g,String str)
  195.     {
  196.         int startOffset = PADDING;
  197.         int strWidth = font.getStringWidth(str);
  198.         if(icon != null && allignment == iconAllignment)
  199.         {
  200.             startOffset += icon.getWidth() + PADDING;
  201.         }
  202.         if( allignment == Graphics.HCENTER)
  203.         {
  204.             font.drawString(g, str, (width - strWidth) >> 1, (height - charHeight) >> 1, GTantra.TEXT_LEFT);
  205.         }else if(allignment == Graphics.LEFT)
  206.         {
  207.             font.drawString(g, str, startOffset, (height - charHeight) >> 1, GTantra.TEXT_LEFT);
  208.         }else if(allignment == Graphics.RIGHT)
  209.         {
  210.             font.drawString(g, str, width - strWidth - startOffset, (height - charHeight) >> 1, GTantra.TEXT_LEFT);
  211.         }
  212.     }
  213.     public void setText(String str) {
  214.         String data = Util.getEllipsisString(str, width, font);
  215.         if (data == null) {
  216.             text = new String[]{str};
  217.         } else {
  218.             text = new String[2];
  219.             text[0] = str;
  220.             text[1] = data;
  221.         }
  222.         checkTickerStatus();
  223.     }
  224.     public void setAllignment(int allignment) {
  225.         this.allignment = allignment;
  226.     }
  227.   
  228.     public void task(int data) {
  229.         tickerX -= 2;
  230.         if (stringWidth + tickerX < 0) {
  231.             tickerX = width - 2;
  232.         }
  233.         DisplayManager.getInst().invalidate();
  234.     }
  235.     
  236. }