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

📄 chatdialog.java

📁 Copy gen_jmsn.dll to your Winamp Plugins Directory. JMSN Auto Nickname Changer plugins support only
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			boolean isTopMost = false;			public void actionPerformed( ActionEvent e )			{				NativeToolkit tk = NativeToolkit.getInstance();				tk.makeTopMost( ChatDialog.this, !isTopMost );				isTopMost = !isTopMost;			}		});		am.put( "HistoryUp", new AbstractAction() {			public void actionPerformed( ActionEvent e )			{				if( historyIndex==-1 )					return;				historyIndex--;				if( historyIndex<0 )					historyIndex = 0;				inputArea.setText( (String)historyQueue.get(historyIndex) );			}		});		am.put( "HistoryDown", new AbstractAction() {			public void actionPerformed( ActionEvent e )			{				if( historyIndex==-1 )					return;				historyIndex++;				if( historyIndex >= historyQueue.size() )					historyIndex = historyQueue.size()-1;				inputArea.setText( (String)historyQueue.get(historyIndex) );			}		});		LocalCopy local = MainFrame.LOCALCOPY;		boolean isUse = local.getPropertyBoolean( MainFrame.PHOTO_PROP_USE, false );		if( isUse )		{			setMyPhoto( msnm.getMyPhoto() );		}		if( you!=null && you.getPhoto()!=null )		{			setFriendPhoto(you.getPhoto());		}	}	public void appendMessage( MimeMessage msg )	{		Appender appender = new Appender();		appender.setAlert( true );		appender.setMessage( msg );		if( log!=null )			log.println( msg.getMessage() );		if( !SwingUtilities.isEventDispatchThread() )			SwingUtilities.invokeLater( appender );		else			appender.run();	}	public void appendMessage( MsnFriend friend, MimeMessage msg )	{		Appender appender = new Appender();		appender.setAlert( false );		appender.setFriend( friend );		appender.setMessage( msg );		if( friend!=me )			this.lastMessagingTime = System.currentTimeMillis();		if( log!=null )			log.println( friend, msg.getMessage() );		if( !SwingUtilities.isEventDispatchThread() )			SwingUtilities.invokeLater( appender );		else			appender.run();	}	protected void showFontDialog()	{		FontDialog fd = new FontDialog(this);		fd.setVisible(true);	}	protected void prepareSendFile()	{		if( isSessionClose )		{			isSessionClose = false;			try {				if( msnm.findSwitchboardSession(you.getLoginName())==null )					msnm.doCall( you.getLoginName() );			} catch( IOException e ) {}		}		String downdir = msnm.getLocalCopy().getProperty(MainFrame.DOWNLOAD_PROP);		JFileChooser file = new JFileChooser(downdir);		if( System.getProperty("os.name").equals("Mac OS X") )		{			FileView fv = new FileView() {				public String getName( File f )				{					return HangulJamoUtil.getString(f.getName());				}			};			file.setFileView(fv);		}		file.setMultiSelectionEnabled( true );		file.setFileSelectionMode( JFileChooser.FILES_AND_DIRECTORIES );		if( file.showOpenDialog( this )==JFileChooser.APPROVE_OPTION )		{			File[] fs = file.getSelectedFiles();		    for(int i=0; i<fs.length; i++)			{				sendFileImpl( fs[i] );			}		}	}	/**	 * 秦寸 颇老阑 傈价茄促, 窜 夸没茄 颇老捞 叼泛配府扼搁 拘绵阑 且 巴牢瘤	 * 茄锅 荤侩磊俊霸 拱篮 第, 叼泛配府疙.zip 栏肺 拘绵窍咯 傈价茄促.	 * <p>	 * 秦寸 颇老篮 矫胶袍 temp directory俊 积己登哥, 颇老 傈价捞 辆丰登芭唱,	 * 坷幅肺 吝窜登搁, 昏力登绢具 茄促.	 *	 * @param f	 */	protected void sendFileImpl( File f )	{		if( f.isDirectory() )		{			if( JOptionPane.showConfirmDialog( this, Msg.get("chatdlg.query.dirsend.content", f.getName()),				Msg.get("chatdlg.query.dirsend.title"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE )				==JOptionPane.NO_OPTION )				return;			ZippedDirectoryDialog zd = new ZippedDirectoryDialog(this, f);			zd.setVisible(true);			f = zd.getZippedFile();			f.deleteOnExit();		}		if( System.getProperty("os.name").equals("Mac OS X") )		{			final String orgName = f.getName();			f = new File(f.getAbsolutePath()) {				public String getName() {					return HangulJamoUtil.getString(orgName);				}};		}		MimeMessage msg = new MimeMessage();		if( session!=null )		{			try {				msnm.sendFileRequest( you.getLoginName(), f, session );				msg.setMessage( Msg.get("chatdlg.filesend.request.ok", you.getLoginName(), f.getName()) );			}			catch( IOException e )			{				msg.setMessage( Msg.get("chatdlg.filesend.request.fail") );			}			appendMessage( msg );		}		else		{			msg.setMessage( Msg.get("chatdlg.filesend.request.fail") );			appendMessage( msg );		}	}	/**	 * 窜鉴洒 皋矫瘤 芒俊 臂阑 眠啊窍绰 开且阑 茄促.	 */	private class Appender implements Runnable	{		boolean alert = false;		MsnFriend friend;		MimeMessage msg;		JViewport view;		Rectangle rect = new Rectangle();		public Appender()		{			view = chatPane.getViewport();			rect.x = 0;			rect.width = 1;			rect.height = 300;		}		public void setAlert( boolean isAlert )		{			this.alert = isAlert;		}		public void setFriend( MsnFriend friend )		{			this.friend = friend;		}		public void setMessage( MimeMessage msg )		{			this.msg = msg;		}		public void run()		{			Color co;			String ef = "";			String fn = "奔覆眉";			try            {				Properties p = msg.getProperties();				String fm = p.getProperty("X-MMS-IM-Format");				if( fm!=null )                {					int si = fm.indexOf("CO");					int ei = fm.indexOf(";",si);					String c = fm.substring(si+3,ei);					if(c.length() < 6)					{						StringBuffer sb = new StringBuffer(6);						for(int i=0, len=6-c.length(); i<len; i++)							sb.append('0');						c = sb.toString() + c;					}					int r = Integer.parseInt(c.substring(4,6),16);					int g = Integer.parseInt(c.substring(2,4),16);					int b = Integer.parseInt(c.substring(0,2),16);					co = new Color(r, g, b);					si = fm.indexOf("EF");					ei = fm.indexOf(";",si);					ef = fm.substring(si+3,ei);					si = fm.indexOf("FN");					ei = fm.indexOf(";",si);					fn = MimeUtility.getURLDecodedString(fm.substring(si+3,ei), "UTF-8");				}                else                {					co = msg.getFontColor();					ef = msg.getEffectCode();					fn = msg.getFontName();				}			}            catch(Exception eex)            {				co = msg.getFontColor();				ef = msg.getEffectCode();				fn = msg.getFontName();			}            StringBuffer sb = new StringBuffer(50);            if( isViewTimestamp )            {                sb.append( ts.format(new Date()) );                sb.append( ' ' );            }			if( alert )			{                sb.append( msg.getMessage() );                sb.append( '\n' );				chatArea.append( sb.toString() );				if( getFocusOwner()==null )					MusicBox.play( MusicBox.SOUND_MESSAGE_1 );			}			else			{                sb.append( Msg.get("chatdlg.chat", friend.getFormattedFriendlyName()) );				chatArea.append( sb.toString() );				if(useFixedFont){        				LocalCopy local = MainFrame.LOCALCOPY;					fn = local.getProperty("font.name");					if(fn==null)						fn="奔覆眉";								int red = 0;					int green = 0;					int blue = 0;					try				        {						red = Integer.parseInt(local.getProperty("font.red") );						green = Integer.parseInt(local.getProperty("font.green") );						blue = Integer.parseInt(local.getProperty("font.blue") );					}				        catch( NumberFormatException e )				    	{						 red = green = blue = 0;				        }					        // Use the getPropertyBoolean method, :)					StringBuffer ef2 = new StringBuffer();				        boolean b = local.getPropertyBoolean("font.isBold", false);				        boolean i = local.getPropertyBoolean("font.isItalic", false);				        boolean s = local.getPropertyBoolean("font.isStrikeThrough", false);				        boolean u = local.getPropertyBoolean("font.isUnderline", false);				        boolean ir = local.getPropertyBoolean("font.israndomcolor", true);					if(b) ef2.append("B");					if(i) ef2.append("I");					if(s) ef2.append("S");					if(u) ef2.append("U");					chatArea.append( msg.getMessage() + "\n" ,msg.getFontColor() ,ef2.toString() ,fn);				}				else					chatArea.append( msg.getMessage() + "\n" ,co ,ef ,fn);									if( getFocusOwner()==null && friend!=me )					MusicBox.play( MusicBox.SOUND_MESSAGE_2 );			}			rect.y = chatArea.getSize().height;			view.scrollRectToVisible( rect );			statusLabel.setText( "" );		}	}	protected void sendMessage()	{		String input = inputArea.getText();		if( input.trim().length()==0 )			return;		inputArea.setText( "" );		if( me.getStatus().equals(UserStatus.INVISIBLE) )		{			inputArea.setText( Msg.get("chatdlg.msg.notsend.offline") );			filesendButton.setEnabled( false );			inputArea.setEnabled( false );			return;		}		MimeMessage msg = new MimeMessage(input);		msg.setKind( MimeMessage.KIND_MESSAGE );        LocalCopy local = MainFrame.LOCALCOPY;		String fn = local.getProperty("font.name");		if(fn==null)			fn="奔覆眉";		int red = 0;		int green = 0;		int blue = 0;		try        {			red = Integer.parseInt(local.getProperty("font.red") );			green = Integer.parseInt(local.getProperty("font.green") );			blue = Integer.parseInt(local.getProperty("font.blue") );		}        catch( NumberFormatException e )        {            red = green = blue = 0;        }        // Use the getPropertyBoolean method, :)		StringBuffer ef = new StringBuffer();        boolean b = local.getPropertyBoolean("font.isBold", false);        boolean i = local.getPropertyBoolean("font.isItalic", false);        boolean s = local.getPropertyBoolean("font.isStrikeThrough", false);        boolean u = local.getPropertyBoolean("font.isUnderline", false);        boolean ir = local.getPropertyBoolean("font.israndomcolor", true);		if(b) ef.append("B");		if(i) ef.append("I");		if(s) ef.append("S");		if(u) ef.append("U");		msg.setFontName(fn);		if(!ir) 			msg.setFontColor(new Color(red, green, blue) );		msg.setEffectCode(ef.toString());		appendMessage( this.me, msg ); 		historyQueue.add( input );		if( historyQueue.size() > 50 )			historyQueue.remove(0);		historyIndex = historyQueue.size();		try		{			if( session!=null )				session.sendInstantMessage( msg );			else			{				queue.add( msg );				if( isSessionClose )				{					isSessionClose = false;					msnm.doCall( you.getLoginName() );				}			}		}		catch( java.io.IOException e )		{			e.printStackTrace();		}	}		public void addWindowListener( WindowListener wl )	{		super.addWindowListener( wl );		this.wl = wl;	}	public void dispose()	{		chatArea.dispose();		chatArea = null;		if( topPanel.getComponentCount()>1 )		{			JOptionPane.showMessageDialog(this,				Msg.get("chatdlg.msg.transfer.4eva"),				Msg.get("title.alarm"), JOptionPane.INFORMATION_MESSAGE );		}		if( log!=null )			log.close();		wl.windowClosing(			new WindowEvent(this, WindowEvent.WINDOW_CLOSING) );		msnm.removeMsnListener( fileAdapter );		super.dispose();		System.gc();	}	public void close()	{		try		{			if( session!=null )			{				session.close();				session = null;			}		}		catch( Exception e )		{			System.err.println( e );		}	}	public void setSession( SwitchboardSession session )	{		if( this.session!=null )		{			if( !this.session.getSessionId().equals(session.getSessionId()) )			{				try				{					this.session.close();				}				catch( IOException e ) {}			}		}		this.session = session;		this.you = session.getMsnFriend();		this.lastMessagingTime = System.currentTimeMillis();		if( you.getPhoto()!=null )		{			SwingUtilities.invokeLater( new Runnable() {				public void run()				{					setFriendPhoto(you.getPhoto());				}			});		}		prepareLogWriter( you.getLoginName() );		MimeMessage mm = new MimeMessage();		mm.setMessage( Msg.get("chatdlg.chat.opened") );		appendMessage( mm );		synchronized( queue )		{			if( queue.size()!=0 )			{				for(Iterator i=queue.iterator(); i.hasNext(); )				{					MimeMessage msg = (MimeMessage)i.next();					try {						session.sendInstantMessage( msg );					}					catch( IOException e )					{						msg.setMessage( Msg.get("chatdlg.chat.error", msg.getMessage()) );						appendMessage( msg );					}					finally					{						i.remove();					}				}			}		}	}	public SwitchboardSession getSession()	{		return this.session;	}	/**	 * 泅犁 措拳 技记捞 矫累等 矫埃阑 馆券茄促. CPU Time捞促.	 */	public long getLastMessagingTime()	{		return this.lastMessagingTime;	}	public void whoTyping( final String userview )	{		SwingUtilities.invokeLater( new Runnable() {			public void run()			{				statusLabel.setText( Msg.get("chatdlg.msg.typing", userview, sdf.format(new Date())) );			}		});	}	public void setVisible( boolean show )	{		if( show )		{			rath.jmsn.NativeToolkit.getInstance().makeTransparency(this,				Integer.getInteger("jmsn.transparency", -1).intValue());			super.setVisible( show );			rath.jmsn.NativeToolkit.getInstance().makeTransparency(this,				Integer.getInteger("jmsn.transparency", -1).intValue());		}		else			super.setVisible( show );	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -