Package com.aelitis.azureus.plugins.net.buddy.swt

Source Code of com.aelitis.azureus.plugins.net.buddy.swt.BuddyPluginView

/*
* Created on Mar 19, 2008
* Created by Paul Gardner
*
* 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.plugins.net.buddy.swt;

import java.net.URL;

import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.util.*;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.plugins.UISWTInstance;
import org.gudy.azureus2.ui.swt.plugins.UISWTStatusEntry;
import org.gudy.azureus2.ui.swt.plugins.UISWTStatusEntryListener;
import org.gudy.azureus2.ui.swt.plugins.UISWTViewEvent;
import org.gudy.azureus2.ui.swt.plugins.UISWTViewEventListener;

import com.aelitis.azureus.core.security.CryptoHandler;
import com.aelitis.azureus.core.security.CryptoManager;
import com.aelitis.azureus.core.security.CryptoManagerFactory;
import com.aelitis.azureus.core.security.CryptoManagerKeyListener;
import com.aelitis.azureus.plugins.net.buddy.BuddyPlugin;
import com.aelitis.azureus.plugins.net.buddy.BuddyPluginAZ2;
import com.aelitis.azureus.plugins.net.buddy.BuddyPluginAZ2Listener;
import com.aelitis.azureus.plugins.net.buddy.BuddyPluginBuddy;
import com.aelitis.azureus.plugins.net.buddy.BuddyPluginListener;
import com.aelitis.azureus.plugins.net.buddy.tracker.BuddyPluginTracker;
import com.aelitis.azureus.plugins.net.buddy.tracker.BuddyPluginTrackerListener;
import com.aelitis.azureus.ui.swt.imageloader.ImageLoader;


public class
BuddyPluginView
  implements UISWTViewEventListener
{
  private BuddyPlugin    plugin;
  private UISWTInstance  ui_instance;
 
  private BuddyPluginViewInstance    current_instance;
 
  private Image iconNLI;
  private Image iconIDLE;
  private Image iconIN;
  private Image iconOUT;
   
  public
  BuddyPluginView(
    BuddyPlugin    _plugin,
    UISWTInstance  _ui_instance )
  {
    plugin      = _plugin;
    ui_instance    = _ui_instance;
   
    plugin.getAZ2Handler().addListener(
      new BuddyPluginAZ2Listener()
      {
        public void
        chatCreated(
          final BuddyPluginAZ2.chatInstance    chat )
        {
          final Display display = ui_instance.getDisplay();
         
          if ( !display.isDisposed()){
           
            display.asyncExec(
              new Runnable()
              {
                public void
                run()
                {
                  if ( !display.isDisposed()){
                 
                    new BuddyPluginViewChat( plugin, display, chat );
                  }
                }
              });
          }
        }
       
        public void
        chatDestroyed(
          BuddyPluginAZ2.chatInstance    chat )
        {
        }
      });
   

    SimpleTimer.addEvent("BuddyStatusInit", SystemTime.getOffsetTime(1000),
        new TimerEventPerformer() {
          public void perform(
              TimerEvent event )
          {
            UISWTStatusEntry label = ui_instance.createStatusEntry();

            label.setText(MessageText.getString("azbuddy.tracker.bbb.status.title"));

            new statusUpdater(ui_instance);
          }
        });

    Utils.execSWTThread(new AERunnable() {
      public void runSupport() {
        ImageLoader imageLoader = ImageLoader.getInstance();

        iconNLI = imageLoader.getImage( "bbb_nli" );
        iconIDLE = imageLoader.getImage( "bbb_idle" );
        iconIN = imageLoader.getImage( "bbb_in" );
        iconOUT = imageLoader.getImage( "bbb_out" );
      }
    });
  }
 
  public boolean
  eventOccurred(
    UISWTViewEvent event )
  {
    switch( event.getType() ){

      case UISWTViewEvent.TYPE_CREATE:{
       
        if ( current_instance != null ){
         
          return( false );
        }
               
        break;
      }
      case UISWTViewEvent.TYPE_INITIALIZE:{
       

        current_instance = new BuddyPluginViewInstance(plugin, ui_instance, (Composite)event.getData());
       
        break;
      }
      case UISWTViewEvent.TYPE_CLOSE:
      case UISWTViewEvent.TYPE_DESTROY:{
       
        try{
          if ( current_instance != null ){
           
            current_instance.destroy();
          }
        }finally{
         
          current_instance = null;
        }
       
        break;
      }
    }
   
    return true;
  }
 
  protected class
  statusUpdater
    implements BuddyPluginTrackerListener
  {
    private UISWTStatusEntry  label;
    private UISWTStatusEntry  status;
    private BuddyPluginTracker  tracker;
   
    private TimerEventPeriodic  update_event;

    private CryptoManager  crypto;
    private boolean      crypto_ok;
    private boolean      has_buddies;
   
    protected
    statusUpdater(
      UISWTInstance    instance )
    {
      status  = ui_instance.createStatusEntry();
      label   = ui_instance.createStatusEntry();
     
      label.setText( MessageText.getString( "azbuddy.tracker.bbb.status.title" ));
      label.setTooltipText( MessageText.getString( "azbuddy.tracker.bbb.status.title.tooltip" ));
     
      tracker = plugin.getTracker();
       
      status.setText( "" );
     
      status.setImageEnabled( true );
     
      tracker.addListener( this );
     
      has_buddies = plugin.getBuddies().size() > 0;
     
      status.setVisible( tracker.isEnabled() && has_buddies);
      label.setVisible( tracker.isEnabled() && has_buddies);
   
      /*
      MenuItem mi = plugin.getPluginInterface().getUIManager().getMenuManager().addMenuItem(
                  status.getMenuContext(),
                  "dweeble" );
     
      mi.addListener(
        new MenuItemListener()
        {
          public void
          selected(
            MenuItem      menu,
            Object         target )
          {
            System.out.println( "whee" );
          }
        });
      */
     
      UISWTStatusEntryListener click_listener =
        new UISWTStatusEntryListener()
      {
          public void
          entryClicked(
            UISWTStatusEntry entry )
          {
            try{
              plugin.getPluginInterface().getUIManager().openURL(
                  new URL( "http://wiki.vuze.com" ));
             
            }catch( Throwable e ){
             
              Debug.printStackTrace(e);
            }
          }
        };
       
      status.setListener( click_listener );
      label.setListener( click_listener );
 
     
      plugin.addListener(
        new BuddyPluginListener()
        {
          public void
          initialised(
            boolean    available )
          {
          }
         
          public void
          buddyAdded(
            BuddyPluginBuddy  buddy )
          {
            if ( !has_buddies ){
             
              has_buddies = true;
           
              updateStatus();
            }
          }
         
          public void
          buddyRemoved(
            BuddyPluginBuddy  buddy )
          {
            has_buddies  = plugin.getBuddies().size() > 0
           
            if ( !has_buddies ){
             
              updateStatus();
            }
          }

          public void
          buddyChanged(
            BuddyPluginBuddy  buddy )
          {
          }
         
          public void
          messageLogged(
            String    str,
            boolean    error )
          {
          }
         
          public void
          enabledStateChanged(
            boolean enabled )
          {
          }
        });
     
      crypto = CryptoManagerFactory.getSingleton();
     
      crypto.addKeyListener(
        new CryptoManagerKeyListener()
        {
          public void
          keyChanged(
            CryptoHandler    handler )
          {
          }
         
          public void
          keyLockStatusChanged(
            CryptoHandler    handler )
          {
            boolean  ok = crypto.getECCHandler().isUnlocked();
           
            if ( ok != crypto_ok ){
             
              crypto_ok = ok;
             
              updateStatus();
            }
          }
        });
     
      crypto_ok = crypto.getECCHandler().isUnlocked();
       
      updateStatus();
    }
       
    public void
    networkStatusChanged(
      BuddyPluginTracker  tracker,
      int          new_status )
    {
      updateStatus();
    }
   
    protected synchronized void
    updateStatus()
    {
      if ( tracker.isEnabled() && has_buddies ){
       
        status.setVisible( true );
        label.setVisible( true );
       
        if ( has_buddies && !crypto_ok ){
         
          status.setImage( iconNLI );
         
          status.setTooltipText( MessageText.getString( "azbuddy.tracker.bbb.status.nli" ));

          disableUpdates();
         
        }else{
         
          int  network_status = tracker.getNetworkStatus();
         
          if ( network_status == BuddyPluginTracker.BUDDY_NETWORK_IDLE ){
           
            status.setImage( iconIDLE );
           
            status.setTooltipText( MessageText.getString( "azbuddy.tracker.bbb.status.idle" ));
           
            disableUpdates();
           
          }else if ( network_status == BuddyPluginTracker.BUDDY_NETWORK_INBOUND ){
           
            status.setImage( iconIN );
           
            enableUpdates();
           
          }else{
           
            status.setImage( iconOUT );
           
            enableUpdates();
          }
        }
      }else{
       
        disableUpdates();
       
        status.setVisible( false );
        label.setVisible( false );
      }
    }
   
    protected void
    enableUpdates()
    {
      if ( update_event == null ){
       
        update_event = SimpleTimer.addPeriodicEvent(
          "Buddy:GuiUpdater",
          2500,
          new TimerEventPerformer()
          {
            public void
            perform(
              TimerEvent event )
            { 
              synchronized( statusUpdater.this ){
               
                if ( tracker.isEnabled() && ( crypto_ok || !has_buddies )){
                 
                  String  tt;
                             
                  int ns = tracker.getNetworkStatus();
                 
                  if ( ns == BuddyPluginTracker.BUDDY_NETWORK_IDLE ){
                   
                    tt = MessageText.getString( "azbuddy.tracker.bbb.status.idle" );
                 
                  }else if ( ns == BuddyPluginTracker.BUDDY_NETWORK_INBOUND ){
                   
                    tt = MessageText.getString( "azbuddy.tracker.bbb.status.in" ) + ": " + DisplayFormatters.formatByteCountToKiBEtcPerSec( tracker.getNetworkReceiveBytesPerSecond());
                   
                  }else{
                   
                    tt = MessageText.getString( "azbuddy.tracker.bbb.status.out" ) + ": " + DisplayFormatters.formatByteCountToKiBEtcPerSec( tracker.getNetworkSendBytesPerSecond());
                  }
                                     
                  status.setTooltipText( tt );
                }
              }
            }         
          });
      }
    }
   
    protected void
    disableUpdates()
    {
      if ( update_event != null ){

        update_event.cancel();
       
        update_event = null;
      }
    }
   
    public void
    enabledStateChanged(
      BuddyPluginTracker     tracker,
      boolean         enabled )
    {
      updateStatus();
    }
  }
}
TOP

Related Classes of com.aelitis.azureus.plugins.net.buddy.swt.BuddyPluginView

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.