/*
* Created on 2 juil. 2003
*
* Copyright (C) 2004, 2005, 2006 Aelitis SAS, 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; either version 2 of the License.
*
* 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 ( see the LICENSE file ).
*
* 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
*
* AELITIS, SAS au capital de 46,603.30 euros,
* 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*/
package org.gudy.azureus2.ui.swt.views;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell;
import org.gudy.azureus2.core3.peer.PEPeer;
import org.gudy.azureus2.plugins.peers.Peer;
import org.gudy.azureus2.plugins.ui.tables.TableManager;
import org.gudy.azureus2.ui.swt.plugins.UISWTInstance;
import org.gudy.azureus2.ui.swt.views.peer.PeerInfoView;
import org.gudy.azureus2.ui.swt.views.peer.RemotePieceDistributionView;
import org.gudy.azureus2.ui.swt.views.table.TableViewSWT;
import org.gudy.azureus2.ui.swt.views.table.TableViewSWTMenuFillListener;
import org.gudy.azureus2.ui.swt.views.table.impl.TableViewFactory;
import org.gudy.azureus2.ui.swt.views.table.impl.TableViewTab;
import org.gudy.azureus2.ui.swt.views.tableitems.peers.DownloadNameItem;
import com.aelitis.azureus.core.tag.Tag;
import com.aelitis.azureus.core.tag.TagListener;
import com.aelitis.azureus.core.tag.Taggable;
import com.aelitis.azureus.ui.common.table.TableColumnCore;
import com.aelitis.azureus.ui.common.table.TableLifeCycleListener;
import com.aelitis.azureus.ui.swt.UIFunctionsManagerSWT;
import com.aelitis.azureus.ui.swt.UIFunctionsSWT;
public class
PeersGeneralView
extends TableViewTab<PEPeer>
implements TagListener, TableLifeCycleListener, TableViewSWTMenuFillListener
{
private TableViewSWT<PEPeer> tv;
private Shell shell;
private Tag tag;
public
PeersGeneralView(
Tag _tag )
{
super( "AllPeersView" );
tag = _tag;
}
public String
getFullTitle()
{
return( tag.getTagName( true ));
}
public TableViewSWT<PEPeer>
initYourTableView()
{
TableColumnCore[] items = PeersView.getBasicColumnItems(TableManager.TABLE_ALL_PEERS);
TableColumnCore[] basicItems = new TableColumnCore[items.length + 1];
System.arraycopy(items, 0, basicItems, 0, items.length);
basicItems[items.length] = new DownloadNameItem(TableManager.TABLE_ALL_PEERS);
tv = TableViewFactory.createTableViewSWT(Peer.class, TableManager.TABLE_ALL_PEERS,
getPropertiesPrefix(), basicItems, "connected_time", SWT.MULTI
| SWT.FULL_SELECTION | SWT.VIRTUAL);
tv.setRowDefaultHeight(16);
tv.setEnableTabViews(true,true,null);
UIFunctionsSWT uiFunctions = UIFunctionsManagerSWT.getUIFunctionsSWT();
if (uiFunctions != null){
UISWTInstance pluginUI = uiFunctions.getUISWTInstance();
if (pluginUI != null && !PeersSuperView.registeredCoreSubViews) {
pluginUI.addView(TableManager.TABLE_ALL_PEERS, "PeerInfoView",
PeerInfoView.class, null);
pluginUI.addView(TableManager.TABLE_ALL_PEERS,
"RemotePieceDistributionView", RemotePieceDistributionView.class,
null);
pluginUI.addView(TableManager.TABLE_ALL_PEERS, "LoggerView",
LoggerView.class, true);
PeersSuperView.registeredCoreSubViews = true;
}
}
tv.addLifeCycleListener(this);
tv.addMenuFillListener(this);
return tv;
}
public void
taggableAdded(
Tag tag,
Taggable tagged )
{
tv.addDataSource((PEPeer)tagged);
}
public void
taggableSync(
Tag tag )
{
if ( tv.getRowCount() != tag.getTaggedCount()){
Set<PEPeer> peers_in_table = new HashSet<PEPeer>( tv.getDataSources());
Set<PEPeer> peers_in_tag = new HashSet<PEPeer>((Set)tag.getTagged());
for ( PEPeer peer: peers_in_table ){
if ( !peers_in_tag.contains( peer )){
tv.removeDataSource( peer );
}
}
for ( PEPeer peer: peers_in_tag ){
if ( !peers_in_table.contains( peer )){
tv.addDataSource( peer );
}
}
}
}
public void
taggableRemoved(
Tag tag,
Taggable tagged )
{
tv.removeDataSource((PEPeer)tagged);
}
public void
tableViewInitialized()
{
shell = tv.getComposite().getShell();
tag.addTagListener( this, true );
}
public void
tableViewDestroyed()
{
tag.removeTagListener( this );
}
public void
fillMenu(
String sColumnName,
Menu menu )
{
PeersView.fillMenu( menu, tv, shell, null );
}
public void
addThisColumnSubMenu(
String columnName,
Menu menuThisColumn )
{
}
}