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

📄 kinstantmessagewidget.cpp

📁 KphoneSI (kpsi) is a SIP (Session Initiation Protocol) user agent for Linux, with which you can in
💻 CPP
字号:
#include <signal.h>#include <stdlib.h>#include <sys/ioctl.h>#include <sys/soundcard.h>#include <sys/stat.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include <fcntl.h>#include <math.h>#include <qbuttongroup.h>#include <qdatetime.h>#include <qdir.h>#include <qgrid.h>#include <qhbox.h>#include <qlabel.h>#include <qlayout.h>#include <qlineedit.h>#include <qmessagebox.h>#include <qpushbutton.h>#include <qsettings.h>#include <qtextedit.h>#include <qtimer.h>#include <qvbox.h>#include <qsound.h>#include "kcallwidget.h"#include "kphone.h"#include "kphoneview.h"#include "ksipauthentication.h"#include "sessioncontrol.h"#include "callaudio.h"#include "../dissipate2/mimecontenttype.h"#include "../dissipate2/sdpbuild.h"#include "../dissipate2/sipcall.h"#include "../dissipate2/sipmessage.h"#include "../dissipate2/siptransaction.h"#include "../dissipate2/sipuser.h"#include "../dissipate2/udpmessagesocket.h"#include "kstatics.h"KInstantMessageWidget::KInstantMessageWidget( KSipAuthentication *auth,		SipCall *initcall, QWidget *parent, const char *name )	: QDialog( parent, name ), imcall( initcall ){	sipauthentication = auth;	phoneBook = 0;	setCaption( getUserPrefix() + " Message - KPhone" );	QVBoxLayout *vbox = new QVBoxLayout( this );	vbox->setMargin( 3 );	vbox->setSpacing( 3 );	QGridLayout *headergrid = new QGridLayout( 6, 3 );	headergrid->setSpacing( 3 );	vbox->insertLayout( 0, headergrid );	QLabel *remotelabel = new QLabel( "Remote: ", this );	remotelabel->setFixedWidth( remotelabel->fontMetrics().width( "  Remote:  "  ) );	headergrid->addWidget( remotelabel, 0, 0 );	remote = new QComboBox( true, this );	remote->setAutoCompletion( true );	remote->setEditText( "" );	headergrid->addWidget( remote, 0, 1 );	QPushButton *loadUri = new QPushButton( "", this );	QIconSet icon;	icon.setPixmap(SHARE_DIR "/icons/phonebook.png", QIconSet::Automatic );	loadUri->setIconSet( icon );	loadUri->setFixedWidth( loadUri->fontMetrics().maxWidth() * 2 );	connect( loadUri, SIGNAL( clicked() ), this, SLOT( getUri() ) );	headergrid->addWidget( loadUri, 0, 2 );	QLabel *slabel = new QLabel( "Status: ", this );	vbox->insertWidget( 1, slabel );	status = new QTextEdit( this );	status->setReadOnly( true );	vbox->insertWidget( 2, status );	QLabel *mlabel = new QLabel( "Message: ", this );	vbox->insertWidget( 3, mlabel );	QGridLayout *mgrid = new QGridLayout( 1, 3 );	mgrid->setSpacing( 3 );	vbox->insertLayout( 4, mgrid );	mEdit = new QTextEdit( this );	mgrid->addWidget( mEdit, 0,0 );	mEdit->setFocus();	mbutton = new QPushButton( "Send", this );	mbutton->setFixedWidth( mbutton->fontMetrics().maxWidth() * 4 );	connect( mbutton, SIGNAL( clicked() ), this, SLOT( mClicked() ) );	mgrid->addWidget( mbutton, 0, 2 );	QGrid *buttonbox = new QGrid(2, this );	buttonbox->setSpacing( 5 );	vbox->insertWidget( 5, buttonbox );	(void) new QWidget( buttonbox );	hidebutton = new QPushButton( "Hide", buttonbox );	connect( hidebutton, SIGNAL( clicked() ), this, SLOT( hide() ) );	resize( 400, 200 );}KInstantMessageWidget::~KInstantMessageWidget( void ){	if( phoneBook ) {		delete phoneBook;	}}void KInstantMessageWidget::instantMessage( SipMessage *message ){	QString s = message->getHeaderData( SipHeader::From );	SipUri u = SipUri( s );	remote->setEditText( u.getUsername() + "@" + u.getHostname() + ":" + QString::number(u.getPortNumber()) );	QString m = message->messageBody();	status->setText( status->text() + "\nMessage received from " + remote->currentText() );	status->setText( status->text() + " (" + QTime::currentTime().toString().latin1() + ")" );	status->setText( status->text() + "\n > " + m );	status->scrollToBottom();}SipCall *KInstantMessageWidget::getCall(){	return imcall;}QString KInstantMessageWidget::getRemote(){	return remote->currentText();}void KInstantMessageWidget::setRemote( QString newremote ){	remote->setEditText( newremote );}void KInstantMessageWidget::mClicked( void ){	if( remote->currentText().length() == 0 ) {		QMessageBox::critical( this, "Error: No Destination",			"You must specify someone to send message." );		return;	}	QString strRemoteUri;	QString s = remote->currentText();	if( s.contains( '[' ) && s.contains( ']' ) ) {		strRemoteUri = s.mid( s.find( '[' ) + 1, s.find( ']' ) - s.find( '[' ) - 1 );	} else {		if( s.left( 4 ).lower() != "tel:" ) {			if( s.left( 4 ).lower() != "sip:" ) {				s = "sip:" + s;			}			if( !s.contains( '@' ) ) {				s = s + "@" + imcall->getHostname();			}		}		strRemoteUri = s;	}	for( int i = 0; i < remote->count(); i++ ) {		if( remote->text( i ).compare( s ) == 0 ) {			remote->removeItem( i );		}	}	remote->insertItem( s, 0 );	remote->setCurrentItem( 0 );	SipUri remoteuri( strRemoteUri );	member = new SipCallMember( imcall, remoteuri );	connect( member, SIGNAL( statusUpdated( SipCallMember * ) ),		sipauthentication, SLOT( authRequest( SipCallMember * ) ) );	status->setText( status->text() + "\nMessage sent to " + remote->currentText() );	status->setText( status->text() + " (" + QTime::currentTime().toString().latin1() + ")" );	status->setText( status->text() + "\n > " + mEdit->text() );	status->scrollToBottom();	member->requestMessage( mEdit->text(),		MimeContentType( "text/plain; charset=UTF-8" ) );	mEdit->clear();}void KInstantMessageWidget::getUri( void ){	QSettings settings;	QString p = KStatics::dBase + getUserPrefix() + "/local";	QString xmlFile = settings.readEntry( p + "/PhoneBook", "" );	if( xmlFile.isEmpty() ) {		if( getUserPrefix().isEmpty() ) {			xmlFile = QDir::homeDirPath() +				"/." + KStatics::xBase + "-phonebook.xml";		} else {			xmlFile = QDir::homeDirPath() + "/." + KStatics::xBase + "_" + getUserPrefix() + "phonebook.xml";		}	}	QStringList r;	if( !phoneBook ) {		phoneBook = new PhoneBook( xmlFile, this,			getUserPrefix() + "Phone Book",			receivedCalls, missedCalls, dialledCalls, r );	}	phoneBook->exec();	remote->setEditText( phoneBook->getUri() );	((KPhoneView *)parentWidget())->updateContacts( xmlFile );}QString KInstantMessageWidget::getUserPrefix( void ){	return ((KPhone *)parentWidget()->parentWidget())->getUserPrefix();}

⌨️ 快捷键说明

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