📄 buddytree.java
字号:
parent.remove( node );
model.reload( parent );
refreshGroupNode();
}
main.addEvent( Msg.get("event.logout.2", friend.getLoginName(),
friend.getFormattedFriendlyName()), null );
}
else
main.addEvent( Msg.get("event.logout.1", loginName), null );
}});
ChatDialog cd = (ChatDialog)dialogMap.get(loginName);
if( cd!=null )
cd.userOffline();
}
public void whoJoinSession( SwitchboardSession ss, final MsnFriend join )
{
String loginName = join.getLoginName();
if( ss.getSessionId()==null )
return;
ChatDialog cd = null;
if( (cd=(ChatDialog)sessionMap.get(ss.getSessionId()))==null )
{
if( (cd=(ChatDialog)dialogMap.get(loginName))==null )
return;
sessionMap.put( ss.getSessionId(), cd );
cd.setSession( ss );
}
if( ss.getFriendCount()>1 )
{
MimeMessage msg = new MimeMessage();
msg.setMessage( Msg.get("chatdlg.msg.whojoin", loginName,
join.getFormattedFriendlyName()) );
cd.appendMessage( msg );
}
}
public void whoPartSession( SwitchboardSession ss, final MsnFriend part )
{
String loginName = part.getLoginName();
ChatDialog cd = null;
if( (cd=(ChatDialog)sessionMap.get(ss.getSessionId()))!=null )
{
MimeMessage msg = new MimeMessage();
// 富绝捞 5盒 版苞窍搁 SS俊辑 磊悼栏肺 楷搬阑 谗绢滚赴促.
// 酒贰狼 炼扒篮 泅犁矫埃焊促 5盒救俊 皋矫瘤啊 档馒窍瘤 臼疽阑锭 true捞促.
if( (System.currentTimeMillis() - 300000L) > cd.getLastMessagingTime() )
msg.setMessage( Msg.get("chatdlg.msg.timeout", "5") );
else
msg.setMessage( Msg.get("chatdlg.msg.whopart", loginName,
part.getFormattedFriendlyName()) );
cd.appendMessage( msg );
}
}
public void switchboardSessionStarted( SwitchboardSession ss )
{
ss.setTimeout( 0 );
final MsnFriend friend = ss.getMsnFriend();
if( friend!=null )
{
SwingUtilities.invokeLater( new Runnable() {
public void run()
{
main.addEvent( Msg.get("event.ring", friend.getLoginName(),
friend.getFormattedFriendlyName()), friend );
}
});
}
}
public void switchboardSessionEnded( SwitchboardSession ss )
{
ChatDialog cd = (ChatDialog)sessionMap.remove(ss.getSessionId());
if( cd!=null )
{
cd.sessionClosed();
return;
}
}
public void switchboardSessionAbandon( SwitchboardSession ss, String targetName )
{
ChatDialog cd = (ChatDialog)dialogMap.get( targetName );
if( cd!=null )
{
cd.sessionClosed();
MimeMessage msg = new MimeMessage();
msg.setMessage( Msg.get("chatdlg.msg.ssclose") );
cd.appendMessage( msg );
}
}
public void buddyListModified()
{
nonUpdateCount--;
if( nonUpdateCount < 0 )
{
SwingUtilities.invokeLater( new Runnable() {
public void run()
{
syncAllUsers();
}
});
}
if( nonUpdateCount < 0 )
nonUpdateCount = 0;
}
public void progressTyping( SwitchboardSession ss, MsnFriend friend, String view )
{
String sid = ss.getSessionId();
ChatDialog cd = (ChatDialog)sessionMap.get(sid);
if( cd!=null )
{
cd.whoTyping( view );
}
}
public void filePosted( SwitchboardSession ss, int cookie, String filename,
int filesize )
{
String sid = ss.getSessionId();
ChatDialog cd = (ChatDialog)sessionMap.get(sid);
if( cd==null )
{
cd = new ChatDialog(main, msnm, ss, me);
cd.setIconImage( chatIcon );
cd.addWindowListener( new DisposeAdapter() );
sessionMap.put( sid, cd );
String ln = ss.getMsnFriend().getLoginName();
if( !dialogMap.containsKey(ln) )
dialogMap.put( ln, cd );
cd.show();
cd.requestFocus();
}
cd.addFileItem( new FileItem(ss,cookie,filename,filesize) );
}
public void allListUpdated()
{
SwingUtilities.invokeLater( new Runnable() {
public void run()
{
syncAllUsers();
}
});
}
public void logoutNotify()
{
SwingUtilities.invokeLater( new Runnable() {
public void run()
{
main.logout();
}
});
}
}
private class DisposeAdapter extends WindowAdapter
{
/**
* sessionMap俊辑 sid俊 秦寸窍绰 Dialog甫 力芭窍绊,
* dialogMap俊辑 loginName俊 秦寸窍绰 Dialog甫 力芭窍绰 格利
*/
public void windowClosing( WindowEvent e )
{
ChatDialog cd = (ChatDialog)e.getSource();
SwitchboardSession ss = cd.getSession();
if( ss!=null )
{
sessionMap.remove( ss.getSessionId() );
try
{
ss.close();
}
catch( IOException ex ) {}
}
cd.close();
dialogMap.remove( cd.getTitle() );
}
}
public void updateAllDialogs()
{
for(Enumeration e=dialogMap.elements(); e.hasMoreElements(); )
{
ChatDialog cd = (ChatDialog)e.nextElement();
SwingUtilities.updateComponentTreeUI( cd );
}
}
public void dragEnter(DragSourceDragEvent dsde)
{
}
public void dragOver(DragSourceDragEvent dsde)
{
}
public void dropActionChanged(DragSourceDragEvent dsde)
{
}
public void dragExit(DragSourceEvent dse)
{
}
public void dragDropEnd(DragSourceDropEvent dsde)
{
}
private int dragStartGroup = -1;
/**
* 靛贰弊甫 矫累窍妨绊 且锭, 捞霸 dnd甫 秦具登绰巴牢瘤 酒囱巴牢瘤
* 魄喊窍绊 父距 MsnFriend 牢胶畔胶啊 嘎促搁, startDrag 皋家靛肺
* 靛贰弊甫 矫累茄促.
*
* @param dge 捞亥飘 按眉
*/
public void dragGestureRecognized(DragGestureEvent dge)
{
Point p = dge.getDragOrigin();
TreePath path = getPathForLocation( p.x, p.y );
if( path==null )
return;
Object o = ((DefaultMutableTreeNode)path.getLastPathComponent()).getUserObject();
if( o instanceof MsnFriend )
{
MsnFriend friend = (MsnFriend)o;
dragStartGroup = friend.getGroupIndex().intValue();
String ln = friend.getLoginName();
Transferable t = new StringSelection(ln);
dragSource.startDrag( dge, DragSource.DefaultCopyDrop, t, this );
}
}
// 咯扁辑何磐绰 DragTargetListener interface 狼 implement 何盒捞促.
public void dragEnter(DropTargetDragEvent e)
{
}
private int oldDraggingIndex = -1;
public void dragOver(DropTargetDragEvent e)
{
Point p = e.getLocation();
TreePath path = getPathForLocation( p.x, p.y );
if( path==null )
return;
Object o = ((DefaultMutableTreeNode)path.getLastPathComponent()).getUserObject();
int groupIndex = -1;
if( o instanceof MsnFriend )
{
MsnFriend f = (MsnFriend)o;
groupIndex = f==this.me ? -1 : f.getGroupIndex().intValue();
}
else
if( o instanceof Group )
{
Group g = (Group)o;
groupIndex = g.getIndexInt();
}
if( dragStartGroup==groupIndex )
{
groupIndex = -1;
e.rejectDrag();
}
renderer.setDraggingGroup(groupIndex);
if( oldDraggingIndex!=groupIndex )
{
oldDraggingIndex = groupIndex;
repaint();
}
}
public void dropActionChanged(DropTargetDragEvent e)
{
}
public void dragExit(DropTargetEvent e)
{
oldDraggingIndex = -1;
renderer.setDraggingGroup(-1);
repaint();
}
public void drop(DropTargetDropEvent e)
{
Point p = e.getLocation();
TreePath path = getPathForLocation( p.x, p.y );
if( path==null )
return;
oldDraggingIndex = -1;
renderer.setDraggingGroup(-1);
repaint();
Object o = ((DefaultMutableTreeNode)path.getLastPathComponent()).getUserObject();
int groupIndex = -1;
if( o instanceof MsnFriend )
groupIndex = ((MsnFriend)o).getGroupIndex().intValue();
else
if( o instanceof Group )
groupIndex = ((Group)o).getIndexInt();
if( dragStartGroup==groupIndex )
return;
try
{
String loginName = (String)e.getTransferable().getTransferData( DataFlavor.stringFlavor );
e.acceptDrop( DnDConstants.ACTION_MOVE );
e.getDropTargetContext().dropComplete( true );
BuddyList list = msnm.getBuddyGroup().getForwardList();
MsnFriend friend = list.get(loginName);
friend.setGroupIndex(groupIndex);
nonUpdateCount = 2;
// 角力肺 函版窍档废 瘤矫
msnm.moveGroupAsFriend( friend, dragStartGroup, groupIndex );
// 捞哩 Tree俊辑 函版窍咯具 窃
DefaultMutableTreeNode oldGroup = findGroupNode( new Integer(dragStartGroup) );
DefaultMutableTreeNode newGroup = findGroupNode( new Integer(groupIndex) );
DefaultMutableTreeNode nodeFriend = this.findTreeNode(friend);
oldGroup.remove( nodeFriend );
insertPreferredIndex( newGroup, friend, nodeFriend );
model.reload( oldGroup );
model.reload( newGroup );
}
catch( Exception ex )
{
e.rejectDrop();
}
}
public void paintComponent( Graphics g )
{
g.setColor( Color.white );
g.fillRect( 0, 0, getWidth(), getHeight() );
if( backImage!=null )
{
JViewport view = (JViewport)getParent();
Point p = view.getViewPosition();
int w = view.getWidth();
int h = view.getHeight();
int iw = backImage.getWidth(null);
int ih = backImage.getHeight(null);
g.drawImage( backImage, w-iw+p.x, h-ih+p.y, null );
}
super.paintComponent( g );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -