Package org.gudy.azureus2.ui.swt.help

Source Code of org.gudy.azureus2.ui.swt.help.AboutWindow

/*
* File    : AboutWindow.java
* Created : 18 d�c. 2003}
* By      : Olivier
*
* Azureus - a Java Bittorrent client
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details ( see the LICENSE file ).
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
package org.gudy.azureus2.ui.swt.help;

import java.util.Properties;

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;

import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.util.*;
import org.gudy.azureus2.ui.swt.Messages;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.components.shell.ShellFactory;
import org.gudy.azureus2.ui.swt.mainwindow.*;
import org.gudy.azureus2.update.CorePatchLevel;

import com.aelitis.azureus.ui.swt.imageloader.ImageLoader;

/**
* @author Olivier
*
*/
public class AboutWindow {
  private final static String IMG_SPLASH = "azureus_splash";

  static Image image;
  static AEMonitor  class_mon  = new AEMonitor( "AboutWindow" );
  private static Shell instance;
  private static Image imgSrc;
  private static int paintColorTo = 0;

  public static void show() {
    Utils.execSWTThread(new AERunnable() {
      public void runSupport() {
        _show();
      }
    });
  }

  private static void _show() {
    if(instance != null)
    {
        instance.open();
        return;
    }
   
    paintColorTo = 0;

    Properties properties = new Properties();
    try {
      properties.load(AboutWindow.class.getClassLoader().getResourceAsStream("org/gudy/azureus2/ui/swt/about.properties"));
    }
    catch (Exception e1) {
      Debug.printStackTrace( e1 );
      return;
    }
       
    final Shell window = ShellFactory.createMainShell((Constants.isOSX)
        ? SWT.DIALOG_TRIM : (SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL));
    Utils.setShellIcon(window);
    final Display display = window.getDisplay();

    window.setText(MessageText.getString("MainWindow.about.title") + " " + Constants.AZUREUS_VERSION); //$NON-NLS-1$
    GridData gridData;
    window.setLayout(new GridLayout(3, false));

    ImageLoader imageLoader = ImageLoader.getInstance();
    imgSrc = imageLoader.getImage(IMG_SPLASH);
    if (imgSrc != null) {
      int w = imgSrc.getBounds().width;
      int ow = w;
      if (w > 350) {
        w = 350;
      }
      int h = imgSrc.getBounds().height;
     
      Image imgGray = new Image(display, imageLoader.getImage(IMG_SPLASH),
          SWT.IMAGE_GRAY);
      imageLoader.releaseImage(IMG_SPLASH);
      GC gc = new GC(imgGray);
      if (Constants.isOSX) {
        gc.drawImage(imgGray, (w - ow) / 2, 0);
      } else {
        gc.copyArea(0, 0, ow, h, (w - ow) / 2, 0);
      }
      gc.dispose();
     
      Image image2 = new Image(display, w, h);
      gc = new GC(image2);
      gc.setBackground(window.getBackground());
      gc.fillRectangle(image2.getBounds());
      gc.dispose();
      image = Utils.renderTransparency(display, image2, imgGray, new Point(0, 0), 180);
      image2.dispose();
      imgGray.dispose();
    }
   
    Group gDevelopers = new Group(window, SWT.NULL);
    gDevelopers.setLayout(new GridLayout());
    Messages.setLanguageText(gDevelopers, "MainWindow.about.section.developers"); //$NON-NLS-1$
    gridData = new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL);
    gDevelopers.setLayoutData(gridData);
   
    Label label = new Label(gDevelopers, SWT.LEFT);
    label.setText(properties.getProperty("developers")); //$NON-NLS-1$ //$NON-NLS-2$
    label.setLayoutData(gridData = new GridData());
   
    final Canvas labelImage = new Canvas(window, SWT.DOUBLE_BUFFERED);
    //labelImage.setImage(image);
    gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
    Rectangle imgBounds = image.getBounds();
    gridData.widthHint = 300;
    labelImage.setLayoutData(gridData);
    labelImage.addPaintListener(new PaintListener() {
      public void paintControl(PaintEvent e) {
        Rectangle boundsColor = imgSrc.getBounds();
        int ofs = (labelImage.getSize().x - boundsColor.width) / 2;
        if (paintColorTo > 0) {
          e.gc.drawImage(imgSrc, 0, 0, paintColorTo, boundsColor.height, ofs, 20, paintColorTo, boundsColor.height);
        }
        Rectangle imgBounds = image.getBounds();
        if (imgBounds.width - paintColorTo - 1 > 0) {
          e.gc.drawImage(image,
              paintColorTo + 1, 0, imgBounds.width - paintColorTo - 1, imgBounds.height,
              paintColorTo + 1 + ofs, 20, imgBounds.width - paintColorTo - 1, imgBounds.height);
        }
      }
    });
 
    Group gTranslators = new Group(window, SWT.NULL);
    GridLayout gl = new GridLayout();
    gl.marginHeight = 2;
    gl.marginWidth = 0;
    gTranslators.setLayout(gl);
    Messages.setLanguageText(gTranslators, "MainWindow.about.section.translators"); //$NON-NLS-1$
    gridData = new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL);
    gTranslators.setLayoutData(gridData);
 
    Text txtTrans = new Text(gTranslators, SWT.READ_ONLY | SWT.MULTI | SWT.WRAP | SWT.NO_FOCUS);
    txtTrans.setText(properties.getProperty("translators")); //$NON-NLS-1$ //$NON-NLS-2$
    gridData = new GridData(GridData.FILL_BOTH);
    gridData.heightHint = txtTrans.computeSize(SWT.DEFAULT, SWT.DEFAULT).y + 10;
    txtTrans.setLayoutData(gridData);
    txtTrans.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
   
    Group gInternet = new Group(window, SWT.NULL);
    GridLayout gridLayout = new GridLayout();
    gridLayout.numColumns = 2;
    gridLayout.makeColumnsEqualWidth = true;
    gInternet.setLayout(gridLayout);
    Messages.setLanguageText(gInternet, "MainWindow.about.section.internet"); //$NON-NLS-1$
    gridData = new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL);
    gridData.horizontalSpan = 2;
    gInternet.setLayoutData(gridData);
 
    Group gSys = new Group(window, SWT.NULL);
    gSys.setLayout(new GridLayout());
    Messages.setLanguageText(gSys, "MainWindow.about.section.system"); //$NON-NLS-1$
    gridData = new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL);
    gridData.verticalSpan = 1;
    gSys.setLayoutData(gridData);

    Text txtSysInfo = new Text(gSys, SWT.READ_ONLY | SWT.MULTI | SWT.WRAP);
    txtSysInfo.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
    txtSysInfo.setText("Java " + System.getProperty("java.version") + "\n "
        + System.getProperty("java.vendor") + "\n"
        + "SWT v" + SWT.getVersion() + ", " + SWT.getPlatform() + "\n"
        + System.getProperty("os.name") + " v"
        + System.getProperty("os.version") + ", "
        + System.getProperty("os.arch") + "\n"
        + Constants.APP_NAME.charAt(0) + Constants.AZUREUS_VERSION + (Constants.AZUREUS_SUBVER.length()==0?"":("-"+Constants.AZUREUS_SUBVER)) + "/" + CorePatchLevel.getCurrentPatchLevel() + " "
        + COConfigurationManager.getStringParameter("ui"));
    txtSysInfo.setLayoutData(gridData = new GridData(GridData.FILL_BOTH));
    if (window.getCaret() != null)
      window.getCaret().setVisible(false);

    final String[][] link =
      { { "homepage", "sourceforge", "sourceforgedownloads", "bugreports", "forumdiscussion", "wiki" }, {
          "http://www.vuze.com",
          "http://azureus.sourceforge.net",
          "http://sourceforge.net/project/showfiles.php?group_id=84122",
          "http://forum.vuze.com/category.jspa?categoryID=3",
          "http://forum.vuze.com",
          Constants.AZUREUS_WIKI }
    };
 
    for (int i = 0; i < link[0].length; i++) {
      final CLabel linkLabel = new CLabel(gInternet, SWT.NULL);
      linkLabel.setText(MessageText.getString("MainWindow.about.internet." + link[0][i]));
      linkLabel.setData(link[1][i]);
      linkLabel.setCursor(display.getSystemCursor(SWT.CURSOR_HAND));
      linkLabel.setForeground(Colors.blue);
      gridData = new GridData(GridData.FILL_HORIZONTAL);
      gridData.horizontalSpan = 1;
      linkLabel.setLayoutData(gridData);
      linkLabel.addMouseListener(new MouseAdapter() {
        public void mouseDoubleClick(MouseEvent arg0) {
          Utils.launch((String) ((CLabel) arg0.widget).getData());
        }
        public void mouseDown(MouseEvent arg0) {
          Utils.launch((String) ((CLabel) arg0.widget).getData());
        }
      });
    }
   
    Listener keyListener =  new Listener() {
      public void handleEvent(Event e) {
        if(e.character == SWT.ESC) {
          window.dispose();               
        }
      }
    };
   
    window.addListener(SWT.KeyUp,keyListener);
 
    window.pack();
    txtSysInfo.setFocus();
    Utils.centreWindow(window);
    window.open();

    instance = window;
    window.addDisposeListener(new DisposeListener() {
        public void widgetDisposed(DisposeEvent event) {
            instance = null;
            disposeImage();
        }
    });

    AEThread2 updater =  new AEThread2("Splash Screen Updater", true) {
      public void run() {       
        if(image == null || image.isDisposed())
          return;
       
        final int maxX = image.getBounds().width;
        final int maxY = image.getBounds().height;
        while(paintColorTo < maxX) {
          if(image == null || image.isDisposed()) {
            paintColorTo = maxX;
            break;
          }
          if(display.isDisposed()) {
            paintColorTo = maxX;
            break;
          }
          Utils.execSWTThread(new AERunnable() {
            public void runSupport() {
              if(labelImage.isDisposed())
                return;
              paintColorTo++;
              Rectangle boundsColor = imgSrc.getBounds();
              int ofs = (labelImage.getSize().x - boundsColor.width) / 2;
              labelImage.redraw(paintColorTo - 1 + ofs, 20, 2, maxY, true);
            }
          });
          try {
            Thread.sleep(30);
          }catch(Exception e) {
            Debug.printStackTrace( e );
          }
      }
    }};
    updater.start();
  }
 
  public static void
  disposeImage()
  {
    try{
      class_mon.enter();
      if(image != null && ! image.isDisposed()) {
        image.dispose();
      }
      ImageLoader imageLoader = ImageLoader.getInstance();
      imageLoader.releaseImage(IMG_SPLASH);
      image = null;
      imgSrc = null;
    }finally{
     
      class_mon.exit();
    }
  }

  public static void main(String[] args) {
    try {
      new Display();
      Colors.getInstance();
      SWTThread.createInstance(null);
      show();
    } catch (SWTThreadAlreadyInstanciatedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}
TOP

Related Classes of org.gudy.azureus2.ui.swt.help.AboutWindow

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.