/**
* Created on Mar 7, 2009
*
* Copyright 2008 Vuze, Inc. All rights reserved.
* 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; version 2 of the License only.
*
* 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.
*
* 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 com.aelitis.azureus.ui.swt.devices;
import java.net.URLEncoder;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.*;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.util.AERunnable;
import org.gudy.azureus2.core3.util.AEThread2;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.components.LinkLabel;
import org.gudy.azureus2.ui.swt.components.shell.ShellFactory;
import org.gudy.azureus2.ui.swt.mainwindow.Colors;
import com.aelitis.azureus.core.devices.DeviceManagerException;
import com.aelitis.azureus.core.devices.DeviceOfflineDownloader;
import com.aelitis.azureus.ui.swt.imageloader.ImageLoader;
import com.aelitis.azureus.util.ConstantsVuze;
/**
* @author TuxPaper
* @created Mar 7, 2009
*
*/
public class
DevicesODFTUX
{
private static final String URL_LEARN_MORE = "/devices/offlinedownloader.start";
private DeviceOfflineDownloader device;
private Display display;
private Shell shell;
private Font boldFont;
private Font titleFont;
private Font subTitleFont;
private Font textInputFont;
private Button turnOnButton;
private Label noSpaceWarning;
private String dev_image_key;
private ImageLoader imageLoader;
protected
DevicesODFTUX(
DeviceOfflineDownloader _device )
throws DeviceManagerException
{
device = _device;
final long avail = device.getSpaceAvailable( false );
Utils.execSWTThread(
new AERunnable()
{
public void
runSupport()
{
open( avail == 0 );
}
});
}
private void
open(
boolean no_space_available )
{
imageLoader = ImageLoader.getInstance();
shell = ShellFactory.createMainShell(SWT.TITLE | SWT.CLOSE | SWT.RESIZE);
shell.setSize(650,400);
Utils.centreWindow(shell);
shell.setMinimumSize(550,400);
display = shell.getDisplay();
Utils.setShellIcon(shell);
createFonts();
shell.setText(MessageText.getString("devices.activation"));
shell.addListener(SWT.Dispose, new Listener() {
public void handleEvent(Event event) {
imageLoader.releaseImage("wizard_header_bg");
if ( dev_image_key != null ){
imageLoader.releaseImage( dev_image_key );
}
if(titleFont != null && !titleFont.isDisposed()) {
titleFont.dispose();
}
if(textInputFont != null && !textInputFont.isDisposed()) {
textInputFont.dispose();
}
if(boldFont != null && !boldFont.isDisposed()) {
boldFont.dispose();
}
if(subTitleFont != null && !subTitleFont.isDisposed()) {
subTitleFont.dispose();
}
}
});
Composite header = new Composite(shell, SWT.NONE);
header.setBackgroundMode(SWT.INHERIT_DEFAULT);
header.setBackgroundImage(imageLoader.getImage("wizard_header_bg"));
Label topSeparator = new Label(shell,SWT.SEPARATOR |SWT.HORIZONTAL);
Composite main = new Composite(shell, SWT.NONE);
main.setBackground( Colors.white );
Label bottomSeparator = new Label(shell,SWT.SEPARATOR |SWT.HORIZONTAL);
Composite footer = new Composite(shell, SWT.NONE);
FormLayout layout = new FormLayout();
shell.setLayout(layout);
FormData data;
data = new FormData();
data.top = new FormAttachment(0,0);
data.left = new FormAttachment(0,0);
data.right = new FormAttachment(100,0);
//data.height = 50;
header.setLayoutData(data);
data = new FormData();
data.top = new FormAttachment(header,0);
data.left = new FormAttachment(0,0);
data.right = new FormAttachment(100,0);
topSeparator.setLayoutData(data);
data = new FormData();
data.top = new FormAttachment(topSeparator,0);
data.left = new FormAttachment(0,0);
data.right = new FormAttachment(100,0);
data.bottom = new FormAttachment(bottomSeparator,0);
main.setLayoutData(data);
data = new FormData();
data.left = new FormAttachment(0,0);
data.right = new FormAttachment(100,0);
data.bottom = new FormAttachment(footer,0);
bottomSeparator.setLayoutData(data);
data = new FormData();
data.bottom = new FormAttachment(100,0);
data.left = new FormAttachment(0,0);
data.right = new FormAttachment(100,0);
footer.setLayoutData(data);
populateHeader(header);
populateMain( main, no_space_available );
populateFooter( footer, no_space_available );
shell.setDefaultButton(turnOnButton);
shell.layout();
Utils.centreWindow(shell);
turnOnButton.setFocus();
shell.open();
}
private void
populateHeader(
Composite header)
{
header.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
Label title = new Label(header, SWT.WRAP);
title.setFont(titleFont);
title.setText( MessageText.getString("devices.turnon.title") );
FillLayout layout = new FillLayout();
layout.marginHeight = 10;
layout.marginWidth = 10;
header.setLayout(layout);
}
private void
populateMain(
Composite main,
boolean no_space_available )
{
String manufacturer = device.getManufacturer();
boolean is_belkin = manufacturer.toLowerCase().contains( "belkin");
Label image_area = new Label(main, SWT.NONE);
String router_text;
if ( is_belkin ){
dev_image_key = "image.device.logo.belkin";
router_text = MessageText.getString( "devices.router" );
}else{
router_text = MessageText.getString( "devices.od" );
}
if ( dev_image_key != null ){
image_area.setImage(imageLoader.getImage( dev_image_key ));
}
Label text1 = new Label(main, SWT.WRAP);
text1.setBackground( Colors.white );
text1.setFont( textInputFont );
text1.setText( MessageText.getString("devices.od.turnon.text1", new String[]{ (is_belkin?"Belkin":"Vuze" ) + " " + router_text }));
Label text2 = new Label(main, SWT.WRAP);
text2.setBackground( Colors.white );
text2.setFont( textInputFont );
text2.setText( MessageText.getString("devices.od.turnon.text2", new String[]{ router_text }));
noSpaceWarning = new Label(main, SWT.WRAP);
noSpaceWarning.setBackground( Colors.white );
noSpaceWarning.setFont( textInputFont );
noSpaceWarning.setText( MessageText.getString("devices.od.turnon.text3", new String[]{ router_text }));
noSpaceWarning.setForeground( Colors.red );
noSpaceWarning.setVisible( no_space_available );
Label link = new Label(main, SWT.WRAP);
link.setBackground( Colors.white );
link.setFont( textInputFont );
link.setText( MessageText.getString("devices.od.turnon.learn") );
String url = URL_LEARN_MORE;
try{
url += "?man=" + URLEncoder.encode( manufacturer, "UTF-8" );
}catch( Throwable e ){
Debug.out( e );
}
url = ConstantsVuze.getDefaultContentNetwork().getExternalSiteRelativeURL(url, true);
LinkLabel.makeLinkedLabel( link, url );
FormLayout layout = new FormLayout();
layout.marginHeight = 5;
layout.marginWidth = 50;
layout.spacing = 5;
main.setLayout(layout);
FormData data;
data = new FormData();
data.top = new FormAttachment(0, 20);
data.left = new FormAttachment(0);
image_area.setLayoutData(data);
data = new FormData();
data.top = new FormAttachment(image_area,10);
data.left = new FormAttachment(0);
data.right = new FormAttachment(100);
text1.setLayoutData(data);
data = new FormData();
data.top = new FormAttachment(text1, 10 );
data.left = new FormAttachment(0);
data.right = new FormAttachment(100);
text2.setLayoutData(data);
data = new FormData();
data.top = new FormAttachment(text2, 10 );
data.left = new FormAttachment(0);
data.right = new FormAttachment(100);
noSpaceWarning.setLayoutData(data);
data = new FormData();
data.top = new FormAttachment(noSpaceWarning, 10 );
data.left = new FormAttachment(0);
link.setLayoutData(data);
}
private void
createFonts()
{
FontData[] fDatas = shell.getFont().getFontData();
for(int i = 0 ; i < fDatas.length ; i++) {
fDatas[i].setStyle(SWT.BOLD);
}
boldFont = new Font(display,fDatas);
for(int i = 0 ; i < fDatas.length ; i++) {
if(org.gudy.azureus2.core3.util.Constants.isOSX) {
fDatas[i].setHeight(12);
} else {
fDatas[i].setHeight(10);
}
}
subTitleFont = new Font(display,fDatas);
for(int i = 0 ; i < fDatas.length ; i++) {
if(org.gudy.azureus2.core3.util.Constants.isOSX) {
fDatas[i].setHeight(17);
} else {
fDatas[i].setHeight(14);
}
}
titleFont = new Font(display,fDatas);
for(int i = 0 ; i < fDatas.length ; i++) {
if(org.gudy.azureus2.core3.util.Constants.isOSX) {
fDatas[i].setHeight(14);
} else {
fDatas[i].setHeight(12);
}
fDatas[i].setStyle(SWT.NONE);
}
textInputFont = new Font(display,fDatas);
}
private void
populateFooter(
Composite footer,
final boolean no_space_available )
{
final Button dont_ask_again = new Button( footer, SWT.CHECK );
dont_ask_again.setText(MessageText.getString("general.dont.ask.again"));
dont_ask_again.setSelection( true );
Button cancelButton = new Button(footer,SWT.PUSH);
cancelButton.setText(MessageText.getString("button.nothanks"));
turnOnButton = new Button(footer,SWT.PUSH);
turnOnButton.setText(MessageText.getString("Button.turnon"));
FormLayout layout = new FormLayout();
layout.marginHeight = 5;
layout.marginWidth = 5;
layout.spacing = 5;
footer.setLayout(layout);
FormData data;
data = new FormData();
data.left = new FormAttachment(0,45);
data.right = new FormAttachment(turnOnButton);
dont_ask_again.setLayoutData(data);
data = new FormData();
data.right = new FormAttachment(100);
data.width = 100;
cancelButton.setLayoutData(data);
data = new FormData();
data.right = new FormAttachment( cancelButton );
data.width = 100;
turnOnButton.setLayoutData(data);
turnOnButton.addListener(
SWT.Selection,
new Listener()
{
public void
handleEvent(
Event arg0 )
{
device.setEnabled( true );
device.setShownFTUX();
shell.close();
}
});
turnOnButton.setEnabled( !no_space_available );
new AEThread2( "scanner", true )
{
private long last_avail = no_space_available?0:Long.MAX_VALUE;
public void
run()
{
while( !shell.isDisposed()){
try{
Thread.sleep(10*1000);
final long avail = device.getSpaceAvailable( true );
if ( avail != last_avail ){
last_avail = avail;
Utils.execSWTThread(
new AERunnable()
{
public void
runSupport()
{
if ( !turnOnButton.isDisposed()){
turnOnButton.setEnabled( avail > 0 );
}
if ( !noSpaceWarning.isDisposed()){
noSpaceWarning.setVisible( avail <= 0 );
}
}
});
}
}catch( Throwable e ){
}
}
}
}.start();
cancelButton.addListener(
SWT.Selection,
new Listener()
{
public void
handleEvent(
Event arg0 )
{
device.setEnabled( false );
if ( dont_ask_again.getSelection()){
device.setShownFTUX();
}
shell.close();
}
});
}
protected void close() {
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
if (shell != null && !shell.isDisposed()) {
shell.dispose();
}
}
});
}
}