/**
* Created on Jul 16, 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.add;
import java.util.Arrays;
import java.util.Comparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.*;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.shells.MessageBoxShell;
import com.aelitis.azureus.core.devices.DeviceTemplate;
import com.aelitis.azureus.core.devices.DeviceManager.DeviceManufacturer;
import com.aelitis.azureus.ui.swt.UIFunctionsManagerSWT;
import com.aelitis.azureus.ui.swt.devices.TranscodeChooser;
import com.aelitis.azureus.ui.swt.skin.*;
import com.aelitis.azureus.ui.swt.views.skin.SkinnedDialog;
import com.aelitis.azureus.ui.swt.views.skin.SkinnedDialog.SkinnedDialogClosedListener;
/**
* @author TuxPaper
* @created Jul 16, 2009
*
*/
public class DeviceTemplateChooser
{
private DeviceTemplateClosedListener listener;
private SkinnedDialog skinnedDialog;
private DeviceTemplate selectedDeviceTemplate;
private DeviceManufacturer mf;
private SWTSkinObjectContainer soList;
/**
*
*/
public DeviceTemplateChooser(DeviceManufacturer mf) {
this.mf = mf;
}
public void open(DeviceTemplateClosedListener l) {
this.listener = l;
skinnedDialog = new SkinnedDialog("skin3_dlg_deviceadd_mfchooser",
"shell", SWT.TITLE | SWT.BORDER);
skinnedDialog.addCloseListener(new SkinnedDialogClosedListener() {
public void skinDialogClosed(SkinnedDialog dialog) {
if (listener != null) {
listener.deviceTemplateChooserClosed(selectedDeviceTemplate);
}
}
});
SWTSkin skin = skinnedDialog.getSkin();
SWTSkinObject so= skin.getSkinObject("list");
if (so instanceof SWTSkinObjectContainer) {
soList = (SWTSkinObjectContainer) so;
createDeviceTemplateList2(soList);
}
skinnedDialog.open();
}
private void createDeviceTemplateList2(SWTSkinObjectContainer soList) {
DeviceTemplate[] devices = mf.getDeviceTemplates();
if (devices.length == 0) {
noDevices();
return;
}
Arrays.sort(devices, new Comparator<DeviceTemplate>() {
public int compare(DeviceTemplate o1, DeviceTemplate o2) {
return o1.getName().compareToIgnoreCase(o2.getName());
}
});
Composite parent = soList.getComposite();
if (parent.getChildren().length > 0) {
Utils.disposeComposite(parent, false);
}
SWTSkin skin = skinnedDialog.getSkin();
SWTSkinObjectText soInfoTitle = (SWTSkinObjectText) skin.getSkinObject("info-title");
SWTSkinObjectText soInfoText = (SWTSkinObjectText) skin.getSkinObject("info-text");
RowLayout layout = new RowLayout(SWT.HORIZONTAL);
layout.spacing = 0;
layout.marginLeft = layout.marginRight = 0;
layout.wrap = true;
layout.justify = true;
layout.fill = true;
parent.setLayout(layout);
Listener clickListener = new Listener() {
boolean down = false;
public void handleEvent(Event event) {
if (event.type == SWT.MouseDown) {
down = true;
} else if (event.type == SWT.MouseUp && down) {
Widget widget = (event.widget instanceof Label)
? ((Label) event.widget).getParent() : event.widget;
selectedDeviceTemplate = (DeviceTemplate) widget.getData("obj");
if (selectedDeviceTemplate == null) {
Debug.out("selectedDeviceTemplate is null!");
}
skinnedDialog.close();
down = false;
}
}
};
GridData gridData;
for (DeviceTemplate deviceTemplate : devices) {
if (deviceTemplate.isAuto()) {
continue;
}
String iconURL = null; // deviceTemplate.getIconURL();
TranscodeChooser.addImageBox(parent, clickListener, null, deviceTemplate,
iconURL, deviceTemplate.getName());
}
SWTSkinObjectText soTitle = (SWTSkinObjectText) skin.getSkinObject("title");
if (soTitle != null) {
soTitle.setTextID("devices.choose.device.title");
}
SWTSkinObjectText soSubTitle = (SWTSkinObjectText) skin.getSkinObject("subtitle");
if (soSubTitle != null) {
soSubTitle.setTextID("label.clickone");
}
Point computeSize = skinnedDialog.getShell().computeSize(600, SWT.DEFAULT, true);
skinnedDialog.getShell().setSize(computeSize);
Shell mainShell = UIFunctionsManagerSWT.getUIFunctionsSWT().getMainShell();
Utils.centerWindowRelativeTo(skinnedDialog.getShell(), mainShell);
}
/**
*
*
* @since 4.1.0.5
*/
private void noDevices() {
new MessageBoxShell(
SWT.OK,
"No Devices Found",
"We couldn't find any devices. Maybe you didn't install the Vuze Transcoder Plugin?").open(null);
skinnedDialog.close();
}
public static interface DeviceTemplateClosedListener {
public void deviceTemplateChooserClosed(DeviceTemplate deviceTemplate);
}
}