/*
* Created on Aug 14, 2012
* Created by Paul Gardner
*
* Copyright 2012 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.core.networkmanager.admin.impl.swt;
import org.eclipse.swt.graphics.Image;
import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.config.ParameterListener;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.util.AERunnable;
import org.gudy.azureus2.plugins.PluginInterface;
import org.gudy.azureus2.plugins.ui.UIInstance;
import org.gudy.azureus2.plugins.ui.UIManagerListener;
import org.gudy.azureus2.plugins.ui.menus.MenuItem;
import org.gudy.azureus2.plugins.ui.menus.MenuItemListener;
import org.gudy.azureus2.pluginsimpl.local.PluginInitializer;
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.views.stats.StatsView;
import com.aelitis.azureus.core.AzureusCore;
import com.aelitis.azureus.core.networkmanager.admin.impl.NetworkAdminImpl;
import com.aelitis.azureus.ui.UIFunctions;
import com.aelitis.azureus.ui.UIFunctionsManager;
import com.aelitis.azureus.ui.common.updater.UIUpdater;
import com.aelitis.azureus.ui.swt.imageloader.ImageLoader;
public class
NetworkAdminSWTImpl
{
private AzureusCore core;
private NetworkAdminImpl network_admin;
private UISWTStatusEntry status;
private Image icon_grey;
private Image icon_green;
private Image icon_yellow;
private Image icon_red;
private Image last_icon;
private String last_tip;
private volatile boolean is_visible;
public
NetworkAdminSWTImpl(
AzureusCore _core,
NetworkAdminImpl _network_admin )
{
core = _core;
network_admin = _network_admin;
final PluginInterface default_pi = PluginInitializer.getDefaultInterface();
default_pi.getUIManager().addUIListener(
new UIManagerListener()
{
public void
UIAttached(
final UIInstance instance )
{
if ( instance instanceof UISWTInstance ){
UIFunctions uif = UIFunctionsManager.getUIFunctions();
if ( uif != null ){
uif.getUIUpdater().addListener(
new UIUpdater.UIUpdaterListener()
{
public void
updateComplete(
int count )
{
updateStatus();
}
});
}
Utils.execSWTThread(
new AERunnable()
{
public void
runSupport()
{
ImageLoader imageLoader = ImageLoader.getInstance();
icon_grey = imageLoader.getImage( "st_net_grey" );
icon_yellow = imageLoader.getImage( "st_net_yellow" );
icon_green = imageLoader.getImage( "st_net_green" );
icon_red = imageLoader.getImage( "st_net_red" );
final UISWTInstance ui_instance = (UISWTInstance)instance;
status = ui_instance.createStatusEntry();
status.setText( MessageText.getString( "label.routing" ));
status.setImageEnabled( true );
status.setImage( icon_grey );
final String icon_param = "Show IP Bindings Icon";
final MenuItem mi_show =
default_pi.getUIManager().getMenuManager().addMenuItem(
status.getMenuContext(),
"pairing.ui.icon.show" );
mi_show.setStyle( MenuItem.STYLE_CHECK );
mi_show.setData( false );
mi_show.addListener(
new MenuItemListener()
{
public void
selected(
MenuItem menu,
Object target )
{
COConfigurationManager.setParameter( icon_param, false );
}
});
COConfigurationManager.addAndFireParameterListeners(
new String[]{ "Bind IP", icon_param },
new ParameterListener()
{
public void
parameterChanged(
String parameterName)
{
String bind_ip = COConfigurationManager.getStringParameter("Bind IP", "").trim();
is_visible =
bind_ip.trim().length() > 0 &&
COConfigurationManager.getBooleanParameter( icon_param );
status.setVisible( is_visible );
mi_show.setData( new Boolean( is_visible ));
if ( is_visible ){
updateStatus();
}
}
});
MenuItem mi_sep =
default_pi.getUIManager().getMenuManager().addMenuItem(
status.getMenuContext(),
"" );
mi_sep.setStyle( MenuItem.STYLE_SEPARATOR );
MenuItem mi_options =
default_pi.getUIManager().getMenuManager().addMenuItem(
status.getMenuContext(),
"MainWindow.menu.view.configuration" );
mi_options.addListener(
new MenuItemListener()
{
public void
selected(
MenuItem menu,
Object target )
{
UIFunctions uif = UIFunctionsManager.getUIFunctions();
if ( uif != null ){
uif.openView( UIFunctions.VIEW_CONFIG, "connection.advanced" );
}
}
});
UISWTStatusEntryListener click_listener =
new UISWTStatusEntryListener()
{
public void
entryClicked(
UISWTStatusEntry entry )
{
UIFunctions uif = UIFunctionsManager.getUIFunctions();
if ( uif != null ){
uif.getMDI().loadEntryByID( StatsView.VIEW_ID, true, false, "TransferStatsView" );
}
}
};
status.setListener( click_listener );
}
});
}
}
public void
UIDetached(
UIInstance instance )
{
}
});
}
private void
updateStatus()
{
if ( !is_visible ){
return;
}
Image icon;
String tip;
Object[] bs_status = network_admin.getBindingStatus();
int bs_state = (Integer)bs_status[0];
tip = (String)bs_status[1];
if ( bs_state == NetworkAdminImpl.BS_INACTIVE ){
icon = icon_grey;
}else if ( bs_state == NetworkAdminImpl.BS_OK){
icon = icon_green;
}else if ( bs_state == NetworkAdminImpl.BS_WARNING ){
icon = icon_yellow;
}else{
icon = icon_red;
}
if ( last_icon != icon || !tip.equals( last_tip )){
final Image f_icon = icon;
final String f_tip = tip;
Utils.execSWTThread(
new AERunnable()
{
public void
runSupport()
{
last_icon = f_icon;
last_tip = f_tip;
status.setImage( f_icon );
status.setTooltipText( f_tip );
}
});
}
}
}