📄 buddytree.java
字号:
* 俊辑 秦寸 sid甫 啊柳 Dialog啊 乐绰瘤 茫酒夯 饶, 绝栏搁 货肺 父甸绢 持绊, * 乐栏搁 波郴辑 show茄促. * <p> * Current implementation: <p> * Pre-dialog啊 乐绰瘤 炼荤窍绊, 父距 绝促搁, 促捞倔肺弊 积己 饶, * PreDialog table俊 put茄饶, show 茄促. */ void createNewSession( MsnFriend friend ) { if( friend.getStatus()==UserStatus.OFFLINE ) return; String loginName = friend.getLoginName(); ChatDialog cd = (ChatDialog)dialogMap.get(loginName); if( cd!=null ) { cd.setVisible(true); cd.requestFocus(); return; } cd = new ChatDialog( main, msnm, loginName, me ); cd.setIconImage( chatIcon ); cd.addWindowListener( new DisposeAdapter() ); dialogMap.put( loginName, cd ); cd.setVisible(true); try { msnm.doCall( loginName ); } catch( IOException e ) { cd.dispose(); } } /** * 惑措规栏肺何磐 皋矫瘤啊 吭阑版快, 茫绊磊 窍绰 荤侩磊啊 绝阑锭 荐青登绰 皋家靛捞促. */ protected void createNewSession( SwitchboardSession ss, final MsnFriend friend, final MimeMessage msg ) { String loginName = friend.getLoginName(); ChatDialog chat = null; if( (chat=(ChatDialog)dialogMap.get(loginName))==null ) { chat = new ChatDialog(main, msnm, ss, me); chat.setIconImage( chatIcon ); chat.addWindowListener( new DisposeAdapter() ); dialogMap.put( loginName, chat ); } else { chat.setSession( ss ); } sessionMap.put( ss.getSessionId(), chat ); final ChatDialog fChat = chat; chat.addComponentListener( new ComponentAdapter() { public void componentShown( ComponentEvent e ) { fChat.appendMessage( friend, msg ); fChat.removeComponentListener( this ); } }); SwingUtilities.invokeLater( new Runnable() { public void run() { fChat.setVisible(true); fChat.requestFocus(); } }); } public MsnFriend getSelectedFriend() { TreePath path = getSelectionPath(); if( path==null || path.getPathCount()!=3 ) return null; Object o = path.getLastPathComponent(); if( o instanceof DefaultMutableTreeNode ) o = ((DefaultMutableTreeNode)o).getUserObject(); if( o instanceof MsnFriend ) return (MsnFriend)o; return null; } public Group getSelectedGroup() { TreePath path = getSelectionPath(); if( path==null || path.getPathCount()!=2 ) return null; Object o = path.getLastPathComponent(); if( o instanceof DefaultMutableTreeNode ) o = ((DefaultMutableTreeNode)o).getUserObject(); if( o instanceof Group ) return (Group)o; return null; } public void setMyStatus( String mode ) { MsnFriend me = (MsnFriend)root.getUserObject(); me.setStatus( mode ); repaint(); } public void toggleOfflineView() { setOfflineView( !this.offView ); } /** * 坷橇扼牢 荤侩磊 钎矫 咯何甫 Toggle 茄促. * 弊府绊 泅犁 惑怕 咯何绰 泅犁 荤侩磊 LocalCopy俊 历厘等促. */ public void setOfflineView( boolean offView ) { this.offView = offView; LocalCopy lc = main.getMessenger().getLocalCopy(); lc.setProperty( "View.buddy.offline", String.valueOf(offView) ); lc.storeInformation(); if( msnm.isLoggedIn() && isVisible() ) syncAllUsers(); } /** * 模备甸阑 绢栋茄 mode肺 杭巴牢瘤 搬沥窍绰 巴栏肺, * VIEW_FRIENDLY_NAME, VIEW_LOGIN_NAME阑 汲沥且 荐 乐促. */ public void setBuddyView( int mode ) { renderer.setBuddyView( mode ); comparator.setBuddyView( mode ); if( msnm.isLoggedIn() ) syncAllUsers(); } /* ---------------------------------------------------------------- * Inner classes definition * ---------------------------------------------------------------- */ private class BuddyMouseAdapter extends MouseAdapter { public void mousePressed( MouseEvent e ) { TreePath rootPath = null; if( (rootPath=getPathForLocation(e.getX(), e.getY()))!=null ) { int row = getRowForPath( rootPath ); DefaultMutableTreeNode node = (DefaultMutableTreeNode)rootPath.getLastPathComponent(); if( node==root ) { JPopupMenu pop = main.menuBar.getStatusPopupMenu(); pop.show( BuddyTree.this, e.getX(), e.getY() ); return; } } } public void mouseClicked( MouseEvent e ) { if( getRowForLocation( e.getX(), e.getY() )==-1 ) return; TreePath path = getPathForLocation(e.getX(), e.getY()); if( path==null ) return; if( e.getClickCount() > 1 ) { DefaultMutableTreeNode o = (DefaultMutableTreeNode)path.getLastPathComponent(); Object uo = o.getUserObject(); if( uo instanceof MsnFriend && o!=root ) { MsnFriend friend = (MsnFriend)uo; createNewSession( friend ); } } } }; private class Listener extends MsnAdapter { public void renameNotify( MsnFriend i ) { if( i==null ) { JOptionPane.showMessageDialog( BuddyTree.this, Msg.get("err.209"), Msg.get("title.alarm"), JOptionPane.ERROR_MESSAGE ); return; } // 磊扁 磊脚狼 捞抚 函版等 巴阑 利侩茄促. if( i.getLoginName().equals(me.getLoginName()) ) { me.setFriendlyName( i.getFriendlyName() ); SwingUtilities.invokeLater( new Runnable() { public void run() { syncAllUsers(); } }); } } public void loginComplete( final MsnFriend owner ) { SwingUtilities.invokeLater( new Runnable() { public void run() { start( owner ); main.menuBar.enableLogin(); } }); } public void notifyUnreadMail( Properties Prop, int unread ) { inboxUnread = unread; main.addEvent( Msg.get("label.inboxunread")+ " : " + unread, null ); } private void refreshGroupNode() { for(Enumeration e = root.children();e.hasMoreElements();) { DefaultMutableTreeNode node = (DefaultMutableTreeNode)e.nextElement(); model.reload( node ); } } public void listOnline( final MsnFriend friend ) { SwingUtilities.invokeLater( new Runnable() { public void run() { DefaultMutableTreeNode node = findTreeNode(friend); if( node==null ) { node = new DefaultMutableTreeNode(friend); insertPreferredIndex( findGroupNode(friend.getGroupIndex()), friend, node ); } else { MsnFriend old = (MsnFriend)node.getUserObject(); Integer oldGroupIndex = old.getGroupIndex(); node.setUserObject( friend ); // 捞哩 Tree俊辑 函版窍咯具 窃 DefaultMutableTreeNode oldGroup = findGroupNode( oldGroupIndex ); DefaultMutableTreeNode newGroup = findGroupNode( friend.getGroupIndex() ); oldGroup.remove( node ); insertPreferredIndex( newGroup, friend, node ); model.reload( oldGroup ); model.reload( newGroup ); } model.reload(node); refreshGroupNode(); } }); } public void instantMessageReceived( SwitchboardSession ss, MsnFriend friend, MimeMessage msg ) { ChatDialog chat = (ChatDialog)sessionMap.get(ss.getSessionId()); if( chat!=null ) // Existing session { chat.appendMessage( friend, msg ); // To blink chat window if( !chat.isActive() ) chat.toFront(); } else // New session { createNewSession(ss, friend, msg); } } /** * */ public void userOnline( final MsnFriend friend ) { final String loginName = friend.getLoginName(); final String formatStatus = UserStatusBox.getFormattedUserStatus(friend.getStatus()); final String formatName = friend.getFormattedFriendlyName(); SwingUtilities.invokeLater( new Runnable() { public void run() { DefaultMutableTreeNode node = findTreeNode(friend); BuddyList list = msnm.getBuddyGroup().getForwardList(); MsnFriend old = list.get( loginName ); // 扁粮俊 乐菌绊, 惑怕父 函版窍看阑 版快(捞傈惑怕啊 OFFLINE捞 酒囱版快) if( node!=null && !UserStatus.OFFLINE.equals(old.getOldStatus()) ) { main.addEvent( formatStatus + " " + formatName + " (" + loginName + ")", friend ); old.setFriendlyName( friend.getFriendlyName() ); old.setStatus( friend.getStatus() ); node.setUserObject( old ); node.removeFromParent(); DefaultMutableTreeNode group = findGroupNode( old.getGroupIndex() ); insertPreferredIndex( group, old, node ); model.reload( group ); } // 扁粮俊 绝菌芭唱, 乐菌绰单 坷橇扼牢捞看阑 版快 else { if( node==null ) { friend.setGroupIndex( old.getGroupIndex() ); node = new DefaultMutableTreeNode(friend); DefaultMutableTreeNode group = findGroupNode(friend.getGroupIndex()); insertPreferredIndex( group, friend, node ); model.reload( group ); } else { node.removeFromParent(); node.setUserObject( friend ); DefaultMutableTreeNode group = findGroupNode(friend.getGroupIndex()); insertPreferredIndex( group, friend, node ); model.reload( group ); } refreshGroupNode(); main.addEvent( Msg.get("event.login", loginName, formatName), friend ); MusicBox.play( MusicBox.SOUND_LOGIN ); } }}); } /** * Tree俊辑 秦寸 荤侩磊甫 茫酒辑 惑怕甫 OFFLINE栏肺 函版茄 饶, * Model俊辑 reload茄促. */ public void userOffline( final String loginName ) { SwingUtilities.invokeLater( new Runnable() { public void run() { DefaultMutableTreeNode node = findTreeNode(new MsnFriend(loginName,"")); if( node!=null ) { MsnFriend friend = (MsnFriend)node.getUserObject(); friend.setStatus( UserStatus.OFFLINE ); if( offView ) { node.removeFromParent(); DefaultMutableTreeNode group = findGroupNode( friend.getGroupIndex() ); insertPreferredIndex( group, friend, node ); model.reload( group ); } else { DefaultMutableTreeNode parent = (DefaultMutableTreeNode)node.getParent(); 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 )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -