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

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

/**
* Created on Feb 24, 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.*;

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;

import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.pluginsimpl.local.PluginInitializer;
import org.gudy.azureus2.ui.swt.IconBarEnabler;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.shells.MessageBoxShell;
import org.gudy.azureus2.ui.swt.views.table.impl.TableViewSWTImpl;

import com.aelitis.azureus.core.*;
import com.aelitis.azureus.core.devices.*;
import com.aelitis.azureus.ui.UIFunctions;
import com.aelitis.azureus.ui.UIFunctionsManager;
import com.aelitis.azureus.ui.UserPrompterResultListener;
import com.aelitis.azureus.ui.common.ToolBarEnabler;
import com.aelitis.azureus.ui.common.table.*;
import com.aelitis.azureus.ui.common.table.impl.TableColumnManager;
import com.aelitis.azureus.ui.common.updater.UIUpdatable;
import com.aelitis.azureus.ui.selectedcontent.SelectedContentManager;
import com.aelitis.azureus.ui.swt.UIFunctionsManagerSWT;
import com.aelitis.azureus.ui.swt.columns.torrent.ColumnThumbnail;
import com.aelitis.azureus.ui.swt.devices.columns.*;
import com.aelitis.azureus.ui.swt.mdi.MdiEntrySWT;
import com.aelitis.azureus.ui.swt.mdi.MultipleDocumentInterfaceSWT;
import com.aelitis.azureus.ui.swt.skin.SWTSkinObject;
import com.aelitis.azureus.ui.swt.views.skin.SkinView;

import org.gudy.azureus2.plugins.ui.UIManager;
import org.gudy.azureus2.plugins.ui.tables.*;


public class
SBC_DevicesODView
  extends SkinView
  implements UIUpdatable, ToolBarEnabler
{
  public static final String TABLE_RCM = "DevicesOD";

  private static boolean columnsAdded = false;
 
  private DeviceOfflineDownloader    device;
 
  private TableViewSWTImpl<DeviceOfflineDownload> tv_downloads;

  private MdiEntrySWT   mdi_entry;
  private Composite      control_parent;
 

  public Object
  skinObjectInitialShow(
    SWTSkinObject skinObject, Object params )
  {
    AzureusCoreFactory.addCoreRunningListener(
      new AzureusCoreRunningListener()
      {
        public void
        azureusCoreRunning(
          AzureusCore core )
        {         
          initColumns( core );
        }
      });

    MultipleDocumentInterfaceSWT mdi = UIFunctionsManagerSWT.getUIFunctionsSWT().getMDISWT();
   
    if ( mdi != null ){
     
      mdi_entry = mdi.getCurrentEntrySWT();
     
      mdi_entry.addToolbarEnabler( this );
     
      device = (DeviceOfflineDownloader)mdi_entry.getDatasource();
    }
   
    return null;
  }


  private void
  initColumns(
    AzureusCore core )
  {
    synchronized( SBC_DevicesODView.class ){
     
      if ( columnsAdded ){
     
        return;
      }
   
      columnsAdded = true;
    }
   
    UIManager uiManager = PluginInitializer.getDefaultInterface().getUIManager();
   
    TableManager tableManager = uiManager.getTableManager();
   
    tableManager.registerColumn(
      DeviceOfflineDownload.class, ColumnThumbnail.COLUMN_ID,
      new TableColumnCreationListener() {
        public void tableColumnCreated(TableColumn column) {
          new ColumnThumbnail(column);
          column.setWidth(70);
        }
      });

    tableManager.registerColumn(
      DeviceOfflineDownload.class, ColumnOD_Name.COLUMN_ID,
      new TableColumnCreationListener() {
        public void tableColumnCreated(TableColumn column) {
          new ColumnOD_Name(column);
        }
      });
   
    tableManager.registerColumn(
      DeviceOfflineDownload.class, ColumnOD_Status.COLUMN_ID,
      new TableColumnCreationListener() {
        public void tableColumnCreated(TableColumn column) {
          new ColumnOD_Status(column);
        }
      });
   
    tableManager.registerColumn(
        DeviceOfflineDownload.class, ColumnOD_Completion.COLUMN_ID,
        new TableColumnCreationListener() {
          public void tableColumnCreated(TableColumn column) {
            new ColumnOD_Completion(column);
          }
        });
   
    tableManager.registerColumn(
        DeviceOfflineDownload.class, ColumnOD_Remaining.COLUMN_ID,
        new TableColumnCreationListener() {
          public void tableColumnCreated(TableColumn column) {
            new ColumnOD_Remaining(column);
          }
        });

    TableColumnManager tcm = TableColumnManager.getInstance();
    TableColumnCore[] allTCs = tcm.getAllTableColumnCoreAsArray(
        DeviceOfflineDownload.class, TABLE_RCM);
    // for now, all columns are default
    ArrayList<String> names = new ArrayList<String>();
    for (int i = 0; i < allTCs.length; i++) {
      TableColumn tc = allTCs[i];
      if (tc.isVisible()) {
        names.add(tc.getName());
      }
    }
    tcm.setDefaultColumnNames(TABLE_RCM, names.toArray(new String[0]));
}

  public Object
  skinObjectShown(
    SWTSkinObject   skinObject,
    Object       params )
  {
    super.skinObjectShown(skinObject, params);

    SWTSkinObject so_list = getSkinObject("devicesod-list");
   
    if ( so_list != null ){
     
      initTable((Composite) so_list.getControl());
    }
   
    return null;
  }

  public Object
  skinObjectHidden(
    SWTSkinObject   skinObject,
    Object       params )
  {
    synchronized( this ){
     
      if ( tv_downloads != null ){
       
        tv_downloads.delete();
       
        tv_downloads = null;
      }
    }
   
    Utils.disposeSWTObjects(new Object[] {
        control_parent,
    });

    return( super.skinObjectHidden(skinObject, params));
  }

  public Object
  skinObjectDestroyed(
    SWTSkinObject   skinObject,
    Object       params )
  {
    synchronized( this ){
     
      if ( tv_downloads != null ){
       
        tv_downloads.delete();
       
        tv_downloads = null;
      }
    }
   
    Utils.disposeSWTObjects(new Object[] {
        control_parent,
    });

    return( super.skinObjectDestroyed(skinObject, params));
  }
 
  private void
  initTable(
    final Composite control )
  { 
    control_parent = new Composite(control, SWT.NONE);
    control_parent.setLayoutData(Utils.getFilledFormData());
   
    final StackLayout stack_layout = new StackLayout();
   
    control_parent.setLayout( stack_layout );
   
      // enabled
   
    final Composite enabled_device_parent = new Composite( control_parent, SWT.NONE);

    GridLayout layout = new GridLayout();
    layout.marginHeight = layout.marginWidth = layout.verticalSpacing = layout.horizontalSpacing = 0;
    enabled_device_parent.setLayout(layout);
     
    tv_downloads =
      new TableViewSWTImpl<DeviceOfflineDownload>(
          DeviceOfflineDownload.class,
          TABLE_RCM,
          TABLE_RCM,
          new TableColumnCore[0],
          ColumnOD_Name.COLUMN_ID,
          SWT.MULTI | SWT.FULL_SELECTION | SWT.VIRTUAL );

    tv_downloads.setRowDefaultHeight(50);
    tv_downloads.setHeaderVisible(true);

    tv_downloads.addSelectionListener(
      new TableSelectionListener()
      {
        public void
        selected(
          TableRowCore[] row )
        {
          refreshIconBar();
        }
 
        public void
        mouseExit(
          TableRowCore row )
        {
        }
 
        public void
        mouseEnter(
          TableRowCore row )
        {
        }
 
        public void
        focusChanged(
          TableRowCore focus )
        {
          refreshIconBar();
        }
 
        public void
        deselected(
          TableRowCore[] rows)
        {
          refreshIconBar();
        }
 
        public void
        defaultSelected(TableRowCore[] rows, int stateMask)
        {
          refreshIconBar();
        }
       
        protected void
        refreshIconBar()
        {
          SelectedContentManager.clearCurrentlySelectedContent();
         
          UIFunctions uiFunctions = UIFunctionsManager.getUIFunctions();
          if (uiFunctions != null) {
            uiFunctions.refreshIconBar();
          }
        }
      }, false );
   
    tv_downloads.addLifeCycleListener(
      new TableLifeCycleListener()
      {
        private final TableViewSWTImpl<DeviceOfflineDownload>  f_table = tv_downloads;
       
        private Set<DeviceOfflineDownload>  download_set = new HashSet<DeviceOfflineDownload>();
       
        private boolean destroyed;
       
        private DeviceOfflineDownloaderListener od_listener =
          new DeviceOfflineDownloaderListener()
          {
            public void
            downloadAdded(
              final DeviceOfflineDownload   download )
            { 
              synchronized( download_set ){
               
                if ( destroyed ){
                 
                  return;
                }             
             
                if ( download_set.contains( download )){
                 
                  return;
                }
               
                download_set.add( download );
              }
             
              Utils.execSWTThread(
                  new Runnable()
                  {
                    public void
                    run()
                    {
                      if ( tv_downloads == f_table && !f_table.isDisposed()){
                       
                        synchronized( download_set ){
                         
                          if ( destroyed ){
                           
                            return;
                          }
                        }
                       
                        f_table.addDataSources( new DeviceOfflineDownload[]{ download });
                      }
                    }
                  });
            }

            public void
            downloadChanged(
              final DeviceOfflineDownload  download )
            {
              synchronized( download_set ){
               
                if ( destroyed ){
                 
                  return;
                }             
             
                if ( !download_set.contains( download )){
                 
                  return;
                }
              }
             
              Utils.execSWTThread(
                  new Runnable()
                  {
                    public void
                    run()
                    {
                      if ( tv_downloads == f_table && !f_table.isDisposed()){
                         
                        synchronized( download_set ){
                         
                          if ( destroyed ){
                           
                            return;
                          }
                        }
                       
                        TableRowCore row = f_table.getRow( download );
                       
                        if ( row != null ){
                       
                          row.refresh(true );
                        }
                      }
                    }
                  });
            }
           
            public void
            downloadRemoved(
              final DeviceOfflineDownload  download )
            {
              synchronized( download_set ){
               
                if ( destroyed ){
                 
                  return;
                }             
             
                if ( !download_set.remove( download )){
                 
                  return;
                }
              }
             
              Utils.execSWTThread(
                  new Runnable()
                  {
                    public void
                    run()
                    {
                      if ( tv_downloads == f_table && !f_table.isDisposed()){
                         
                        synchronized( download_set ){
                         
                          if ( destroyed ){
                           
                            return;
                          }
                        }
                       
                        f_table.removeDataSources( new DeviceOfflineDownload[]{ download });
                      }
                    }
                  });
            }
          };
       
        public void
        tableViewInitialized()
        {
          device.addListener( od_listener );
         
          DeviceOfflineDownload[] downloads = device.getDownloads();
         
          final ArrayList<DeviceOfflineDownload>  new_downloads = new ArrayList<DeviceOfflineDownload>( downloads.length );

          synchronized( download_set ){
                   
            if ( destroyed ){
             
              return;
            }
                       
            for ( DeviceOfflineDownload download: downloads ){
             
              if ( !download_set.contains( download )){
 
                download_set.add( download );
               
                new_downloads.add( download );
              }
            }
          }
         
          if ( new_downloads.size() > 0 ){
                       
            Utils.execSWTThread(
              new Runnable()
              {
                public void
                run()
                {
                  if ( tv_downloads == f_table && !f_table.isDisposed()){
                 
                    synchronized( download_set ){
                     
                      if ( destroyed ){
                       
                        return;
                      }
                    }
                   
                    f_table.addDataSources( new_downloads.toArray( new DeviceOfflineDownload[ new_downloads.size()]));
                  }
                }
              });
          }
        }

        public void
        tableViewDestroyed()
        {
          device.removeListener( od_listener );

          synchronized( download_set ){
           
            destroyed = true;
         
            download_set.clear();
          }
        }
      });

    tv_downloads.initialize( enabled_device_parent )
     
      // disabled
   
    final Composite disabled_device_parent = new Composite( control_parent, SWT.NONE);
 
    layout = new GridLayout();
    layout.marginHeight = layout.marginWidth = layout.verticalSpacing = layout.horizontalSpacing = 0;
    disabled_device_parent.setLayout(layout);

    Label l = new Label( disabled_device_parent, SWT.NULL );
    GridData grid_data = new GridData( GridData.FILL_HORIZONTAL );
    grid_data.horizontalIndent = 5;
    l.setLayoutData( grid_data );
   
    l.setText( MessageText.getString( "device.is.disabled" ));
 
    device.addListener(
      new DeviceListener()
      {
        public void
        deviceChanged(
          Device d )
        {
          Composite x = device.isEnabled()?enabled_device_parent:disabled_device_parent;

          if ( x.isDisposed()){
           
            device.removeListener( this );
           
          }else{
         
            if ( x != stack_layout.topControl ){
             
              Utils.execSWTThread(
                new Runnable()
                {
                  public void
                  run()
                  {
                    Composite x = device.isEnabled()?enabled_device_parent:disabled_device_parent;
                   
                    if ( !x.isDisposed() && x != stack_layout.topControl ){
                     
                      stack_layout.topControl = x;
                     
                      control.layout( true, true );
                    }
                  }
                });
            }
          }
        }
      });
   
    stack_layout.topControl = device.isEnabled()?enabled_device_parent:disabled_device_parent;
   
    control.layout(true);
 

  public void refreshToolBar(Map<String, Boolean> list) {
    list.put("remove", true);
  }
 
  public boolean toolBarItemActivated(String itemKey) {
    if (itemKey.equals("remove")) {
      MessageBoxShell mb =
        new MessageBoxShell(
          MessageText.getString("message.confirm.delete.title"),
          MessageText.getString("message.confirm.delete.text",
              new String[] {
                device.getName()
              }),
          new String[] {
            MessageText.getString("Button.yes"),
            MessageText.getString("Button.no")
          },
          1 );
     
      mb.open(new UserPrompterResultListener() {
        public void prompterClosed(int result) {
          if (result == 0) {
            device.remove();
          }
        }
      });
      return true;
    }
    return false;
  }
 
  public String
  getUpdateUIName()
  {
    return( "DevicesODView" );
  }

  public void
  updateUI()
  {
    if ( tv_downloads != null ){
     
      tv_downloads.refreshTable( false );
    }
  }
}
TOP

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

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.