⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buddylistview.java

📁 mywork是rcp开发的很好的例子
💻 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 + -