📄 kcallwidget.cpp
字号:
}void KCallWidget::updateCallRegister( void ){ QString s, ss, s1, s2, s3; QTime t; QDate d; QString label; IncomingCall *c; IncomingCall *first; int count = 0; QSettings settings; QString p = "/kphone/" + getUserPrefix() + "/Call register/"; label.setNum( count ); label = p + "/Missed" + label; s = settings.readEntry( label, "" ); while( !s.isEmpty() ) { settings.writeEntry( label, ""); label.setNum( ++count ); label = p + "/Missed" + label; s = settings.readEntry( label, "" ); } count = 0; label.setNum( count ); label = p + "/Received" + label; s = settings.readEntry( label, "" ); while( !s.isEmpty() ) { settings.writeEntry( label, ""); label.setNum( ++count ); label = p + "/Received" + label; s = settings.readEntry( label, "" ); } int i = 0; int last = receivedCalls.count(); if ( last > 30 ) { first = receivedCalls.at( last - 30 ); } else { first = receivedCalls.first(); } for ( c = first; c != 0; c = receivedCalls.next() ) { label.setNum( i++ ); label = p + "/Received" + label; t = c->getDateTime().time(); d = c->getDateTime().date(); ss = s1.setNum( d.year() ) + "." + s2.setNum( d.month() ) + "." + s3.setNum( d.day() ) + "-" + t.toString(); settings.writeEntry( label, ss + " [" + c->getContact() + "]"); } i = 0; last = missedCalls.count(); if ( last > 30 ) { first = missedCalls.at( last - 30 ); } else { first = missedCalls.first(); } for ( c = first; c != 0; c = missedCalls.next() ) { label.setNum( i++ ); label = p + "/Missed" + label; t = c->getDateTime().time(); d = c->getDateTime().date(); ss = s1.setNum( d.year() ) + "." + s2.setNum( d.month() ) + "." + s3.setNum( d.day() ) + "-" + t.toString(); settings.writeEntry( label, ss + "[" + c->getContact() + "]"); }}void KCallWidget::dtmfsenderChanged ( const QString &s ){ printf("dtmfsenderChanged\n"); if (!dtmfsenderTimer->isActive()) dtmfsenderTimer->start(dtmfsenderdelay->value() * 10);}void KCallWidget::dtmfsenderTimeout( void ){ char c; printf("dtmfsenderTimeout\n"); if (dtmfsender->currentText().length() == 0 || curstate != Connected) dtmfsenderTimer->stop(); else { c = dtmfsender->currentText().at(0).latin1(); dtmfsenderTimer->changeInterval(dtmfsenderdelay->value() * 10); switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '#': case '*': case 'A': case 'a': case 'B': case 'b': case 'C': case 'c': case 'D': case 'd': case 'X': case 'x': case 'Y': case 'y': case 'Z': case 'z': audio->startDTMF(c); dtmfsender->setCurrentText(dtmfsender->currentText().mid(1).prepend('w')); break; case 'W': audio->stopDTMF(); dtmfsender->setCurrentText(dtmfsender->currentText().mid(1).prepend('w')); break; case 'w': audio->stopDTMF(); dtmfsender->setCurrentText(dtmfsender->currentText().mid(1)); break; case ' ': case '-': case '(': case ')': /* Quick-pause */ dtmfsender->setCurrentText(dtmfsender->currentText().mid(1)); dtmfsenderTimer->changeInterval(1); break; case '/': default: /* This blocks DTMF... */ dtmfsenderTimer->stop(); } }}void KCallWidget::ringTimeout( void ){ if( isRingingTone ) { if( ringCount < 5 ) { ringCount++; audio_fd = ::open( audio->getOSSFilename(), O_WRONLY | O_NONBLOCK ); if( audio_fd == -1 ) { printf( "ERROR: %s\n", "Open Failed" ); return; } int flags = fcntl( audio_fd, F_GETFL ); flags &= ~O_NONBLOCK; fcntl( audio_fd, F_SETFL, flags ); int format = AFMT_S16_LE; if( ioctl( audio_fd, SNDCTL_DSP_SETFMT, &format ) == -1 ) { return; } if( format != AFMT_S16_LE ) { return; } int channels = 1; if( ioctl( audio_fd, SNDCTL_DSP_CHANNELS, &channels ) == -1 ) { return; } if( channels != 1 ) { return; } int rate = 8000; if( ioctl( audio_fd, SNDCTL_DSP_SPEED, &rate ) == -1 ) { return; } if( rate != 8000) { return; } int size = 4096; int samp = size/2; int ampl = 16384; unsigned char devbuf[size]; int buf[samp]; int i, p=0; double arg1, arg2; arg1 = (double)2 * (double)M_PI * (double)941 / (double)samp; arg2 = (double)2 * (double)M_PI * (double)1336 / (double)samp; for(int i = 0; i < samp; i++) { buf[i] = (short)((double)(ampl) * sin(arg1 * i) + (double)(ampl) * sin(arg2 * i)); }; for (i=0; i<samp; i+=2) { devbuf[p++] = (unsigned char)(buf[i] & 0xff); devbuf[p++] = (unsigned char)((buf[i] >> 8) & 0xff); } for(;;) { if( write( audio_fd, devbuf, samp ) != -1 ) { break; } } ::close( audio_fd ); ringTimer->start( ringTime_1, TRUE ); } else { ringCount = 0; printf( "Ringing tone\n" ); ringTimer->start( ringTime_2, TRUE ); } }}void KCallWidget::acceptCallTimeout( void ){ if( !audio->isAudioOn() ) { if( isRingingTone ) { } audio_fd = ::open( audio->getOSSFilename(), O_WRONLY | O_NONBLOCK ); if( audio_fd == -1 ) { QMessageBox::information( this, tr("Accept Call"), tr("Close any program which might be using soundcard \nand then retry accepting call.") ); return; } else { ::close( audio_fd ); } } if( audio->checkCodec( member ) ) { audio->setCurrentCall( call ); audio->attachToCallMember( member ); member->acceptInvite( audio->audioOut().message( audio->getRtpCodec(), audio->getVideoRtpCodec(), audio->getBodyMask() ), MimeContentType( "application/sdp" ) ); dial->setText( tr("Dial") ); hangup->setText( tr("Hangup") ); hidebutton->setEnabled( false ); dial->setEnabled( false ); hangup->setEnabled( true ); } else { member->notAcceptableHere(); QMessageBox::information( this, tr("Accept Call"), tr("Accepted codec not found.") ); }}void KCallWidget::hideCall( void ){ if( curstate == PreDial ) { delete call; call = 0; } setHide();}QString KCallWidget::getUserPrefix( void ){ return ((KPhone *)phoneView->parentWidget())->getUserPrefix();}void KCallWidget::setHide( void ){ hided = true; hide();}KInstantMessageWidget::KInstantMessageWidget( KSipAuthentication *auth, SipCall *initcall, QWidget *parent, const char *name ) : QDialog( parent, name ), imcall( initcall ){ sipauthentication = auth; phoneBook = 0; setCaption( getUserPrefix() + tr(" 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( tr("Remote: "), this ); remotelabel->setFixedWidth( remotelabel->fontMetrics().width( tr(" 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( tr("Status: "), this ); vbox->insertWidget( 1, slabel ); status = new QTextEdit( this ); status->setReadOnly( true ); vbox->insertWidget( 2, status ); QLabel *mlabel = new QLabel( tr("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( tr("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( tr("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 m = message->messageBody(); status->setText( status->text() + "\n" + tr("Message 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, tr("Error: No Destination"), tr("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() + "\n" + tr("Message 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 = "/kphone/" + getUserPrefix() + "/local"; QString xmlFile = settings.readEntry( p + "/PhoneBook", "" ); if( xmlFile.isEmpty() ) { if( getUserPrefix().isEmpty() ) { xmlFile = QDir::homeDirPath() + "/.kphone-phonebook.xml"; } else { xmlFile = QDir::homeDirPath() + "/.kphone" + getUserPrefix() + "phonebook.xml"; } } QStringList r; if( !phoneBook ) { phoneBook = new PhoneBook( xmlFile, this, getUserPrefix() + "Phone Book", receivedCalls, missedCalls, 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 + -