/*
* 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 org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.util.*;
import org.gudy.azureus2.ui.swt.ImageRepository;
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.Colors;
import org.gudy.azureus2.ui.swt.mainwindow.Cursors;
import java.util.Properties;
/**
* @author Olivier
*
*/
public class AboutWindow {
static Image image;
static AEMonitor class_mon = new AEMonitor( "AboutWindow" );
private static Shell instance;
public static void show(final Display display) {
if(instance != null)
{
instance.open();
return;
}
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);
window.setText(MessageText.getString("MainWindow.about.title") + " " + Constants.AZUREUS_VERSION); //$NON-NLS-1$
GridData gridData;
window.setLayout(new GridLayout(3, false));
image = new Image(display,ImageRepository.getImage("azureus_splash"),SWT.IMAGE_GRAY);
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 Label labelImage = new Label(window, SWT.NONE);
labelImage.setImage(image);
gridData = new GridData(GridData.HORIZONTAL_ALIGN_CENTER);
labelImage.setLayoutData(gridData);
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);
if (window.getCaret() != null)
window.getCaret().setVisible(false);
final String[][] link =
{ { "homepage","forumdiscussion", "wiki" }, {
"http://oneswarm.org/",
"http://forum.oneswarm.org/",
"http://wiki.oneswarm.org/"}
};
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(Cursors.handCursor);
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();
}
});
Thread updater = new AEThread("Splash Screen Updater") {
public void runSupport() {
if(image == null || image.isDisposed())
return;
final boolean finished[] = new boolean[1];
final int[] x = new int[1];
final int maxX = image.getBounds().width;
final int maxY = image.getBounds().height;
final Image imgSrc = ImageRepository.getImage("azureus_splash");
while(!finished[0]) {
if(image == null || image.isDisposed()) {
finished[0] = true;
break;
}
if(display == null || display.isDisposed()) {
finished[0] = true;
break;
}
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
if(labelImage.isDisposed())
return;
GC gcImage = new GC(labelImage);
gcImage.setClipping(x[0],0,1,maxY);
gcImage.drawImage(imgSrc,0,0);
gcImage.dispose();
x[0]++;
if(x[0] >= maxX) {
finished[0] = true;
labelImage.setImage(imgSrc);
}
}
});
try {
Thread.sleep(30);
}catch(Exception e) {
Debug.printStackTrace( e );
}
}
}};
updater.start();
}
public static void
disposeImage()
{
try{
class_mon.enter();
ImageRepository.unloadImage("azureus_splash");
if(image != null && ! image.isDisposed())
image.dispose();
image = null;
}finally{
class_mon.exit();
}
}
}