Package com.aelitis.azureus.ui.swt.devices

Source Code of com.aelitis.azureus.ui.swt.devices.TranscodeChooser

/**
* Created on Mar 1, 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.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.*;
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.Debug;
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.shells.MessageBoxShell;

import com.aelitis.azureus.core.devices.*;
import com.aelitis.azureus.core.devices.Device;
import com.aelitis.azureus.core.messenger.config.PlatformDevicesMessenger;
import com.aelitis.azureus.ui.swt.UIFunctionsManagerSWT;
import com.aelitis.azureus.ui.swt.imageloader.ImageLoader;
import com.aelitis.azureus.ui.swt.imageloader.ImageLoader.ImageDownloaderListener;
import com.aelitis.azureus.ui.swt.skin.*;
import com.aelitis.azureus.ui.swt.skin.SWTSkinButtonUtility.ButtonListenerAdapter;
import com.aelitis.azureus.ui.swt.utils.ColorCache;
import com.aelitis.azureus.ui.swt.utils.FontUtils;
import com.aelitis.azureus.ui.swt.views.skin.SkinnedDialog;

/**
* @author TuxPaper
* @created Mar 1, 2009
*
*/
public abstract class TranscodeChooser
{
  private static final String skinFile = "skin3_transcodechooser";

  private static final String shellSkinObjectID = "shell";

  private Shell shell;

  private SWTSkin skin;

  private Font fontDevice;

  protected TranscodeTarget selectedTranscodeTarget;

  protected TranscodeProfile selectedProfile;

  protected DeviceTemplate selectedDeviceTemplate;

  private SWTSkinObjectContainer soList;

  private Shell mainShell;

  private SWTSkinObjectContainer soBottomContainer;

  private Button btnNoPrompt;

  private int transcodeRequirement;

  private java.util.List<String> listImageIDsToRelease = new ArrayList<String>();

  private SWTSkinObjectText soInfoTitle;

  private SWTSkinObjectText soInfoText;

  private Font fontDeviceDesc;

  private TranscodeProfile[] transcodeProfiles;

  public TranscodeChooser() {
    this((TranscodeTarget) null);
  }

  public TranscodeChooser(TranscodeTarget tt) {
    selectedTranscodeTarget = tt;
  }

  public TranscodeChooser(TranscodeProfile[] transcodeProfiles) {
    this.transcodeProfiles = transcodeProfiles;
  }

  public void show( Runnable fire_on_install ) {
    // Check if plugin is installed
    if (!DevicesFTUX.ensureInstalled( fire_on_install )) {
      return;
    }

    mainShell = UIFunctionsManagerSWT.getUIFunctionsSWT().getMainShell();
    shell = ShellFactory.createShell(mainShell, SWT.DIALOG_TRIM | SWT.RESIZE);

    Utils.setShellIcon(shell);

    skin = SWTSkinFactory.getNonPersistentInstance(
        SkinnedDialog.class.getClassLoader(), "com/aelitis/azureus/ui/skin/",
        skinFile + ".properties");

    skin.initialize(shell, shellSkinObjectID);

    shell.addTraverseListener(new TraverseListener() {
      public void keyTraversed(TraverseEvent e) {
        if (e.detail == SWT.TRAVERSE_ESCAPE) {
          shell.close();
        }
      }
    });

    shell.addDisposeListener(new DisposeListener() {
      public void widgetDisposed(DisposeEvent e) {
        closed();
      }
    });

    skin.layout();

    SWTSkinObject soBottom = skin.getSkinObject("bottom");
    if (soBottom instanceof SWTSkinObjectContainer) {
      soBottomContainer = (SWTSkinObjectContainer) soBottom;

      soBottomContainer.addListener(new SWTSkinObjectListener() {

        public Object eventOccured(SWTSkinObject skinObject, int eventType,
            Object params) {
          if (eventType == EVENT_SHOW) {
            skinObject.removeListener(this);
            initBottom();
          }
          return null;
        }
      });
      soBottomContainer.setVisible(selectedTranscodeTarget != null);
    }

    soList = (SWTSkinObjectContainer) skin.getSkinObject("list");
    if (soList != null) {
      if (transcodeProfiles != null) {
        createProfileList(soList, "drop");
      } else if (selectedTranscodeTarget == null) {
        createDeviceList(soList);
      } else {
        transcodeProfiles = selectedTranscodeTarget.getTranscodeProfiles();
        createProfileList(soList, "drop");
      }
    }

    // we may have disposed of shell during device/profile list building
    // (ex. no devices avail)
    if (shell.isDisposed()) {
      return;
    }

    shell.addDisposeListener(new DisposeListener() {
      public void widgetDisposed(DisposeEvent e) {
        Utils.disposeSWTObjects(new Object[] {
          fontDevice,
          fontDeviceDesc
        });
        for (String id : listImageIDsToRelease) {
          ImageLoader.getInstance().releaseImage(id);
        }
      }
    });
    Utils.verifyShellRect(shell, true);
    shell.open();
  }

  /**
   * @param soBottomContainer2
   *
   * @since 4.1.0.5
   */
  protected void initBottom() {
    Composite composite = soBottomContainer.getComposite();
    btnNoPrompt = new Button(composite, SWT.CHECK);
    Messages.setLanguageText(btnNoPrompt, "option.rememberthis");

    Label lblXCode = new Label(composite, SWT.NONE);
    lblXCode.setText(MessageText.getString("device.xcode"));

    final Combo cmbXCode = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);

    cmbXCode.add(MessageText.getString("device.xcode.whenreq"));
    cmbXCode.add(MessageText.getString("device.xcode.always"));
    cmbXCode.add(MessageText.getString("device.xcode.never"));
    transcodeRequirement = selectedTranscodeTarget.getTranscodeRequirement();
    switch (transcodeRequirement) {
      case TranscodeTarget.TRANSCODE_ALWAYS:
        cmbXCode.select(1);
        break;

      case TranscodeTarget.TRANSCODE_NEVER:
        cmbXCode.select(2);
        break;

      case TranscodeTarget.TRANSCODE_WHEN_REQUIRED:
      default:
        cmbXCode.select(0);
        break;
    }

    cmbXCode.addSelectionListener(new SelectionListener() {
      public void widgetSelected(SelectionEvent e) {
        int i = cmbXCode.getSelectionIndex();
        switch (i) {
          case 0:
            transcodeRequirement = TranscodeTarget.TRANSCODE_WHEN_REQUIRED;
            break;

          case 1:
            transcodeRequirement = TranscodeTarget.TRANSCODE_ALWAYS;
            break;

          case 2:
            transcodeRequirement = TranscodeTarget.TRANSCODE_NEVER;
            break;
        }
      }

      public void widgetDefaultSelected(SelectionEvent e) {
      }
    });

    FormData fd;

    fd = new FormData();
    fd.left = new FormAttachment(0, 10);
    fd.top = new FormAttachment(cmbXCode, 0, SWT.CENTER);
    btnNoPrompt.setLayoutData(fd);

    fd = new FormData();
    fd.right = new FormAttachment(100, -10);
    fd.top = new FormAttachment(0, 5);
    fd.bottom = new FormAttachment(100, -5);
    cmbXCode.setLayoutData(fd);

    fd = new FormData();
    fd.right = new FormAttachment(cmbXCode, -5);
    fd.top = new FormAttachment(cmbXCode, 0, SWT.CENTER);
    lblXCode.setLayoutData(fd);

    int userMode = COConfigurationManager.getIntParameter("User Mode");
    if (userMode == 0) {
      lblXCode.setVisible(false);
      cmbXCode.setVisible(false);
    }

    Point computeSize = shell.computeSize(shell.getClientArea().width,
        SWT.DEFAULT, true);
    shell.setSize(computeSize);
  }

  /**
   * @param soList
   *
   * @since 4.1.0.5
   */
  private void createProfileList(SWTSkinObjectContainer soList,
      String source) {
    if (selectedTranscodeTarget == null && selectedDeviceTemplate == null) {
      new MessageBoxShell(SWT.OK, "No Device", "No Device Selected!?").open(null);
      shell.dispose();
      return;
    }

    if (selectedTranscodeTarget != null) {
      try {
        TranscodeProfile defaultProfile = selectedTranscodeTarget.getDefaultTranscodeProfile();
        if (defaultProfile != null) {
          // user chose not to ask
         
          if ( selectedTranscodeTarget.getTranscodeRequirement() == TranscodeTarget.TRANSCODE_NEVER ){
              // take note of never-xcode override
            selectedProfile = selectedTranscodeTarget.getBlankProfile();
          }else{
            selectedProfile = defaultProfile;
          }
          shell.dispose();
          return;
        }
      } catch (TranscodeException e) {
      }
    }

    if (transcodeProfiles.length == 0 || selectedTranscodeTarget.getTranscodeRequirement() == TranscodeTarget.TRANSCODE_NEVER ){
      if ( selectedTranscodeTarget != null ){
        selectedProfile = selectedTranscodeTarget.getBlankProfile();
        shell.dispose();
        return;
      }
      new MessageBoxShell(SWT.OK, "No Profiles", "No Profiles for "
          + selectedTranscodeTarget.getDevice().getName()).open(null);
      shell.dispose();
      return;
    }

    if (transcodeProfiles.length == 1) {
      selectedProfile = transcodeProfiles[0];
     
      shell.dispose();
      return;
    }

    Arrays.sort(transcodeProfiles, new Comparator<TranscodeProfile>() {
      public int compare(TranscodeProfile o1, TranscodeProfile o2) {
        int i1 = o1.getIconIndex();
        int i2 = o2.getIconIndex();
       
        if ( i1 == i2 ){
       
          return o1.getName().compareToIgnoreCase(o2.getName());
        }else{
         
          return( i1 - i2 );
        }
      }
    });

    Composite parent = soList.getComposite();
    if (parent.getChildren().length > 0) {
      Utils.disposeComposite(parent, false);
    }

    soInfoTitle = (SWTSkinObjectText) skin.getSkinObject("info-title");
    soInfoText = (SWTSkinObjectText) skin.getSkinObject("info-text");
    resetProfileInfoBox(false);

    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 listenerMouseInout = new Listener() {
      public void handleEvent(Event event) {
        Widget widget = (event.widget instanceof Canvas)
            ? ((Canvas) event.widget).getParent() : event.widget;

        Composite c = TranscodeChooser.this.soList.getComposite();
        Rectangle bounds = c.getClientArea();
        c.redraw(bounds.x, bounds.y, bounds.width, bounds.height, true);

        TranscodeProfile profile = (TranscodeProfile) widget.getData("obj");
        if (profile == null) {
          return;
        }
        if (event.type == SWT.MouseEnter) {
          String description = profile.getDescription();
          if (description == null || description.length() == 0) {
            resetProfileInfoBox(true);
          } else {
            if (soInfoTitle != null) {
              soInfoTitle.setTextID(
                  "devices.choose.profile.info.title.selected", new String[] {
                    profile.getName()
                  });
            }
            if (soInfoText != null) {
              soInfoText.setText(description);
              Point computeSize = shell.computeSize(
                  shell.getClientArea().width, SWT.DEFAULT, true);
              if (computeSize.y > shell.getSize().y) {
                shell.setSize(computeSize);
              }
            }
          }
        }
      }
    };

    parent.addListener(SWT.MouseEnter, new Listener() {
      public void handleEvent(Event event) {
        resetProfileInfoBox(true);
      }
    });

    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;
          selectedProfile = (TranscodeProfile) widget.getData("obj");
          if (selectedProfile == null) {
            Debug.out("profile is null!");
          } else {
            if (btnNoPrompt != null) {
              if (btnNoPrompt.getSelection()) {
                if ( transcodeRequirement == TranscodeTarget.TRANSCODE_NEVER ){
                  selectedTranscodeTarget.setTranscodeRequirement( TranscodeTarget.TRANSCODE_NEVER );
                }else{
                  selectedTranscodeTarget.setDefaultTranscodeProfile(selectedProfile);
                }
              }
            }
          }
          shell.dispose();
          down = false;
        }
      }
    };

    GridData gridData;
    for (TranscodeProfile profile : transcodeProfiles) {
      addImageBox(parent, clickListener, listenerMouseInout, profile,
          profile.getIconURL(), profile.getName());
    }
    SWTSkinObjectText soTitle = (SWTSkinObjectText) skin.getSkinObject("title");
    if (soTitle != null) {
      soTitle.setTextID("devices.choose.profile.title");
    }

    SWTSkinObjectText soSubTitle = (SWTSkinObjectText) skin.getSkinObject("subtitle");
    if (soSubTitle != null) {
      soSubTitle.setTextID("label.clickone");
    }

    if (soBottomContainer != null) {
      soBottomContainer.setVisible(true);
    }

    SWTSkinObjectContainer soButtonBottomArea = (SWTSkinObjectContainer) skin.getSkinObject("button-bottom");
    if (soButtonBottomArea != null) {
      soButtonBottomArea.setVisible(false);
    }

    Point computeSize = shell.computeSize(600, SWT.DEFAULT, true);
    shell.setSize(computeSize);
    Utils.centerWindowRelativeTo(shell, mainShell);
  }

  /**
   *
   *
   * @since 4.1.0.5
   */
  public static void addImageBox(Composite parent, Listener clickListener,
      Listener listenerMouseInout, Object obj, String iconURL, String name) {
    GridData gridData;
    final Shell shell = parent.getShell();
    final Composite c = new Composite(parent, SWT.NONE);
    GridLayout clayout = new GridLayout();
    clayout.marginWidth = clayout.horizontalSpacing = 0;
    c.setLayout(clayout);
    c.setCursor(c.getDisplay().getSystemCursor(SWT.CURSOR_HAND));
    c.addListener(SWT.MouseUp, clickListener);
    c.addListener(SWT.MouseDown, clickListener);
    c.setData("obj", obj);

    if (listenerMouseInout != null) {
      c.addListener(SWT.MouseEnter, listenerMouseInout);
      c.addListener(SWT.MouseExit, listenerMouseInout);
    }

    final Canvas lblImage = new Canvas(c, SWT.DOUBLE_BUFFERED);
    if (listenerMouseInout != null) {
      lblImage.addListener(SWT.MouseEnter, listenerMouseInout);
      lblImage.addListener(SWT.MouseExit, listenerMouseInout);
    }
    lblImage.addListener(SWT.MouseUp, clickListener);
    lblImage.addListener(SWT.MouseDown, clickListener);
    lblImage.setData("obj", obj);
    lblImage.addListener(SWT.Paint, new Listener() {
      public void handleEvent(Event event) {
        Image image = (Image) lblImage.getData("Image");
        if (image != null) {
          Rectangle bounds = image.getBounds();
          Rectangle area = lblImage.getBounds();
          Rectangle carea = c.getBounds();

          Point ptInDisplay = c.toDisplay(0, 0);

          event.gc.setAdvanced(true);
          event.gc.setAntialias(SWT.ON);
          event.gc.setLineWidth(2);

          if (new Rectangle(ptInDisplay.x, ptInDisplay.y, carea.width,
              carea.height).contains(event.display.getCursorLocation())) {
            //if (event.display.getCursorControl() == lblImage) {

            Color color1 = ColorCache.getColor(event.gc.getDevice(), 252, 253,
                255);
            Color color2 = ColorCache.getColor(event.gc.getDevice(), 169, 195,
                252);
            Pattern pattern = new Pattern(event.gc.getDevice(), 0, 0, 0,
                area.height, color1, 0, color2, 200);
            event.gc.setBackgroundPattern(pattern);

            event.gc.fillRoundRectangle(0, 0, area.width - 1, area.height - 1,
                20, 20);

            event.gc.setBackgroundPattern(null);
            pattern.dispose();

            pattern = new Pattern(event.gc.getDevice(), 0, 0, 0, area.height,
                color2, 50, color2, 255);
            event.gc.setForegroundPattern(pattern);

            event.gc.drawRoundRectangle(0, 0, area.width - 1, area.height - 1,
                20, 20);

            event.gc.setForegroundPattern(null);
            pattern.dispose();
          }

          event.gc.drawImage(image, bounds.x, bounds.y, bounds.width,
              bounds.height, 8, 5, bounds.width, bounds.height);

        } else {
          Rectangle ca = lblImage.getClientArea();
          event.gc.setAdvanced(true);
          event.gc.setAntialias(SWT.ON);
          event.gc.drawRoundRectangle(ca.x, ca.y, ca.width - 1, ca.height - 1, 20, 20);
        }
      }
    });
    gridData = new GridData(GridData.FILL_VERTICAL);
    gridData.heightHint = 50;
    gridData.widthHint = 100;
    if (iconURL != null) {
      ImageLoader imageLoader = ImageLoader.getInstance();
      Image image = imageLoader.getUrlImage(iconURL,
          new ImageDownloaderListener() {
            public void imageDownloaded(Image image, boolean returnedImmediately) {
              if (!returnedImmediately) {
                if (lblImage.isDisposed()) {
                  return;
                }
                lblImage.setData("Image", image);
                Rectangle bounds = image.getBounds();
                GridData gridData = (GridData) lblImage.getLayoutData();
                gridData.heightHint = bounds.height + 10;
                gridData.widthHint = bounds.width + 16;
                lblImage.setLayoutData(gridData);
                lblImage.getShell().layout(new Control[] {
                  lblImage
                });
                Point computeSize = shell.computeSize(600, SWT.DEFAULT, true);
                shell.setSize(computeSize);
              }
            }
          });
      if (image != null) {
        lblImage.setData("Image", image);
        Rectangle bounds = image.getBounds();
        gridData.heightHint = bounds.height + 10;
        gridData.widthHint = bounds.width + 16;
      }
    }
    lblImage.setLayoutData(gridData);

    Label label = new Label(c, SWT.WRAP | SWT.CENTER);
    if (listenerMouseInout != null) {
      label.addListener(SWT.MouseEnter, listenerMouseInout);
    }
    label.addListener(SWT.MouseUp, clickListener);
    label.addListener(SWT.MouseDown, clickListener);
    gridData = new GridData(GridData.FILL_HORIZONTAL);
    label.setLayoutData(gridData);
    String s = name;
    //s += " (via " + profile.getProvider().getName() + ")";
    label.setText(s);
    label.setCursor(c.getDisplay().getSystemCursor(SWT.CURSOR_HAND));
  }

  /**
   *
   *
   * @param layout
   * @since 4.1.0.5
   */
  protected void resetProfileInfoBox(boolean layout) {
    if (soInfoTitle != null) {
      soInfoTitle.setTextID("devices.choose.profile.info.title");
    }
    if (soInfoText != null) {
      soInfoText.setTextID("devices.choose.profile.info.text");
      if (layout) {
        Point computeSize = shell.computeSize(shell.getClientArea().width,
            SWT.DEFAULT, true);
        shell.setSize(computeSize);
      }
    }
  }

  private void createDeviceList(SWTSkinObjectContainer soDeviceList) {
    Composite parent = soDeviceList.getComposite();
    parent.setBackgroundMode(SWT.INHERIT_FORCE);
    FormLayout layout = new FormLayout();
    layout.marginLeft = 10;
    layout.marginHeight = 15;
    parent.setLayout(layout);

    DeviceManager device_manager = DeviceManagerFactory.getSingleton();
    Device[] devices = device_manager.getDevices();

    if (devices.length == 0) {
      noDevices();
      return;
    }

    Arrays.sort(devices, new Comparator<Device>() {
      public int compare(Device o1, Device o2) {
        return o1.getName().compareToIgnoreCase(o2.getName());
      }
    });

    fontDevice = FontUtils.getFontWithHeight(parent.getFont(), null, 16, SWT.BOLD);
    fontDeviceDesc = FontUtils.getFontWithHeight(parent.getFont(), null, 16,
        SWT.NONE);

    /**
    PaintListener paintListener = new PaintListener() {
      public void paintControl(PaintEvent e) {
        Rectangle ca = ((Composite) e.widget).getClientArea();
        e.gc.setForeground(e.display.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW));
        e.gc.setBackground(e.display.getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
        e.gc.setAntialias(SWT.ON);
        e.gc.fillRoundRectangle(ca.x, ca.y, ca.width - 1, ca.height - 1, 10, 10);
        e.gc.drawRoundRectangle(ca.x, ca.y, ca.width - 1, ca.height - 1, 10, 10);
      }
    };
    **/

    boolean hide_generic = COConfigurationManager.getBooleanParameter(
        DeviceManagerUI.CONFIG_VIEW_HIDE_REND_GENERIC, true);

    int numDevices = 0;
    Button lastButton = null;
    for (Device device : devices) {
      if (device.getType() != Device.DT_MEDIA_RENDERER || device.isHidden()
          || !(device instanceof DeviceMediaRenderer)) {
        continue;
      }

      DeviceMediaRenderer renderer = (DeviceMediaRenderer) device;

      if (hide_generic && renderer.isNonSimple()) {
        continue;
      }

      TranscodeTarget transcodeTarget = (TranscodeTarget) device;

      if (transcodeTarget.getTranscodeProfiles().length == 0) {
       
        if ( transcodeTarget.getTranscodeRequirement() != TranscodeTarget.TRANSCODE_NEVER ){
       
          continue;
        }
      }

      String imageID = null;
      if (device instanceof DeviceMediaRenderer) {
        imageID = "image.sidebar.device." + DeviceManagerUI.getDeviceImageID( device ) + ".big";
      }

      lastButton = createDeviceButton(parent, device, device.getName(),
          device.getShortDescription(), imageID, lastButton);
      numDevices++;
    }

    if (numDevices == 0) {
      noDevices();
      return;
    }

    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.setText("");
    }

    SWTSkinObjectContainer soButtonBottomArea = (SWTSkinObjectContainer) skin.getSkinObject("button-bottom");
    if (soButtonBottomArea != null) {
      soButtonBottomArea.setVisible(true);

      SWTSkinObjectButton soOk = (SWTSkinObjectButton) skin.getSkinObject("ok");
      if (soOk != null) {
        shell.setDefaultButton(soOk.getButton());
        soOk.addSelectionListener(new ButtonListenerAdapter() {
          public void pressed(SWTSkinButtonUtility buttonUtility,
              SWTSkinObject skinObject, int stateMask) {
            transcodeProfiles = selectedTranscodeTarget.getTranscodeProfiles();
            createProfileList(soList, "chooser");
          }
        });
      }

      SWTSkinObjectButton soCancel = (SWTSkinObjectButton) skin.getSkinObject("cancel");
      if (soCancel != null) {
        soCancel.addSelectionListener(new ButtonListenerAdapter() {
          public void pressed(SWTSkinButtonUtility buttonUtility,
              SWTSkinObject skinObject, int stateMask) {
            shell.close();
          }
        });
      }
    }

    if (soBottomContainer != null) {
      soBottomContainer.setVisible(false);
    }

    //shell.pack();
    Point computeSize = shell.computeSize(400, SWT.DEFAULT, true);
    shell.setSize(computeSize);
    shell.layout(true);
    Utils.centerWindowRelativeTo(shell, mainShell);
  }

  private Button createDeviceButton(Composite parent, Object deviceObj,
      String name, String shortDescription, String imageID, Button lastButton) {
    Button button = new Button(parent, SWT.LEFT | SWT.RADIO);
    StringBuffer sb = new StringBuffer(name);
    button.setFont(fontDevice);
    button.setData("Device", deviceObj);
    button.addSelectionListener(new SelectionListener() {

      public void widgetSelected(SelectionEvent e) {
        Object device = e.widget.getData("Device");
        if (device instanceof TranscodeTarget) {
          selectedTranscodeTarget = (TranscodeTarget) device;
        } else if (device instanceof DeviceTemplate) {
          selectedDeviceTemplate = (DeviceTemplate) device;
        }
      }

      public void widgetDefaultSelected(SelectionEvent e) {
      }
    });
    if (lastButton == null) {
      button.setSelection(true);
      if (deviceObj instanceof TranscodeTarget) {
        selectedTranscodeTarget = (TranscodeTarget) deviceObj;
      }
    }

    Image imgRenderer = null;
    if (imageID != null) {
      listImageIDsToRelease.add(imageID);
      imgRenderer = ImageLoader.getInstance().getImage(imageID);
    }

    if (ImageLoader.isRealImage(imgRenderer)) {
      button.setImage(imgRenderer);

      // buttons are center when they have an image..
      // fill with a bunch of spaces so it left aligns
      //char[] c = new char[100];
      //Arrays.fill(c, ' ');
      //sb.append(c);
    } else {
      sb.insert(0, ' ');
    }

    button.setText(sb.toString());

    FormData fd = new FormData();
    fd.left = new FormAttachment(0, 0);
    if (lastButton == null) {
      fd.top = new FormAttachment(0, 0);
    } else {
      fd.top = new FormAttachment(lastButton, 15);
    }
    button.setLayoutData(fd);

    if (shortDescription != null && shortDescription.length() > 0) {
      Label label = new Label(parent, SWT.None);
      label.setText("(" + shortDescription + ")");

      fd = new FormData();
      fd.top = new FormAttachment(button, 0, SWT.CENTER);
      fd.left = new FormAttachment(button, 5);
      label.setLayoutData(fd);
    }

    return button;
  }

  /**
   *
   *
   * @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);
    shell.dispose();
  }

  public abstract void closed();

  public int getTranscodeRequirement() {
    return transcodeRequirement;
  }
}
TOP

Related Classes of com.aelitis.azureus.ui.swt.devices.TranscodeChooser

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.