📄 buddylistview.java
字号:
package net.sf.p2pim;import java.lang.reflect.Field;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import net.jxta.myjxta.MyJXTA;import net.jxta.myjxta.presence.PeerStatus;import net.jxta.myjxta.util.JxtaNode;import net.jxta.myjxta.util.JxtaNodeListener;import net.jxta.myjxta.util.PeerNode;import net.sf.p2pim.jxta.P2PView;import net.sf.p2pim.jxta.P2PViewer;import org.eclipse.jface.resource.ImageDescriptor;import org.eclipse.jface.resource.JFaceResources;import org.eclipse.jface.viewers.IStructuredContentProvider;import org.eclipse.jface.viewers.ITreeContentProvider;import org.eclipse.jface.viewers.LabelProvider;import org.eclipse.jface.viewers.StructuredSelection;import org.eclipse.jface.viewers.TreeViewer;import org.eclipse.jface.viewers.Viewer;import org.eclipse.swt.SWT;import org.eclipse.swt.graphics.Image;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Shell;import org.eclipse.ui.IWorkbench;import org.eclipse.ui.IWorkbenchListener;import org.eclipse.ui.PlatformUI;import org.eclipse.ui.part.ViewPart;public class BuddyListView extends ViewPart { public static final String ID = "MyWork_p2pim.navigationView"; private static BuddyListView instance = null; private TreeViewer viewer; private JxtaNode root; private ImageDescriptor img_online; private ImageDescriptor img_offline; private ImageDescriptor img_busy; private ImageDescriptor img_away; class ViewContentProvider implements IStructuredContentProvider,ITreeContentProvider { public void inputChanged(Viewer v, Object oldInput, Object newInput) { } public void dispose() { } public Object[] getElements(Object parent) { return getChildren(parent); } public Object getParent(Object child) { if (child instanceof JxtaNode) { return ((JxtaNode)child).getParent(); } return null; } public Object[] getChildren(Object parent) { if (parent instanceof JxtaNode) { JxtaNode n=(JxtaNode)parent; List<JxtaNode> list =new ArrayList<JxtaNode>(); //把自己排在第一位 for(Iterator it=n.getChildren();it.hasNext();){ PeerNode next=(PeerNode) it.next(); if(P2PView.getInstance().isSelf(next)) list.add(0,next); else list.add(next); } return list.toArray(new PeerNode[0]); } return new Object[0]; } public boolean hasChildren(Object parent) { if (parent instanceof JxtaNode) return !((JxtaNode)parent).isLeaf(); return false; } } class ViewLabelProvider extends LabelProvider { public String getText(Object obj) { String s = obj.toString(); if(obj instanceof PeerNode){ if(P2PView.getInstance().isSelf((PeerNode) obj)) s += "*"; if(((PeerNode)obj).isConnecting()) s += " 连接中..."; } return s; } public Image getImage(Object obj) { if(obj instanceof PeerNode){ PeerStatus presenceStatus = ((PeerNode)obj).getPresenceStatus(); if(presenceStatus == null) presenceStatus=PeerStatus.getUnknownState(); if(presenceStatus.isAway()) return img_away.createImage(getShell().getDisplay()); if(presenceStatus.isOffline()) return img_offline.createImage(getShell().getDisplay()); if(isUnReachable((PeerNode)obj)) return img_offline.createImage(getShell().getDisplay()); return img_online.createImage(getShell().getDisplay()); } return null; } private boolean isUnReachable(PeerNode pn){ try { Field f=PeerNode.class.getDeclaredField("m_unreachableCounter"); f.setAccessible(true); return (Integer)f.get(pn) > 0; } catch (Exception e) { return false; } } } /** * This is a callback that will allow us to create the viewer and initialize * it. */ public void createPartControl(Composite parent) { root=new JxtaNode(null,""); img_online = P2PActivator.getImageDescriptor("icons/contact_online.gif"); img_offline = P2PActivator.getImageDescriptor("icons/contact_offline.gif"); img_busy = P2PActivator.getImageDescriptor("icons/contact_busy.gif"); img_away = P2PActivator.getImageDescriptor("icons/contact_away.gif"); viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); viewer.setContentProvider(new ViewContentProvider()); viewer.setLabelProvider(new ViewLabelProvider()); viewer.setInput(root); instance=this; this.getSite().setSelectionProvider(viewer); Display.getDefault().asyncExec(new Runnable(){ public void run() { P2PViewer.main(null); } }); PlatformUI.getWorkbench().addWorkbenchListener(new IWorkbenchListener(){ public void postShutdown(IWorkbench workbench) { } public boolean preShutdown(IWorkbench workbench, boolean forced) { MyJXTA.getTheInstance().destroy(); return true; }}); } /** * Passing the focus request to the viewer's control. * */ public void setFocus() { viewer.getControl().setFocus(); } public void updatePeer(final JxtaNode to){ if(!root.contains(to)){ to.addListener(new JxtaNodeListener(){ public void nodeChanged(JxtaNode node) { Display.getDefault().asyncExec(new Runnable(){ public void run() { if(root.contains(to)) viewer.refresh(to); } }); } }); root.add(to); } viewer.refresh(); } public JxtaNode getCurrentPeer(){ final StructuredSelection ss = (StructuredSelection) viewer.getSelection(); if(!ss.isEmpty()){ return (JxtaNode) ss.getFirstElement(); } return null; } public void removePeer(JxtaNode node) { root.remove(node); viewer.refresh(); } public static BuddyListView getInstance(){ return instance; } public static Shell getShell(){ return getInstance().getSite().getShell(); } @Override public void dispose() { try{ MyJXTA.getTheInstance().destroy(); JFaceResources.getResources().destroyImage(img_online); JFaceResources.getResources().destroyImage(img_offline); JFaceResources.getResources().destroyImage(img_busy); JFaceResources.getResources().destroyImage(img_away); super.dispose(); }catch(Throwable t){ } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -