detailspage.cpp

来自「Qtopia下的邮件处理程序」· C++ 代码 · 共 605 行 · 第 1/2 页

CPP
605 行
字号
    if( m_allowEmails )    {	fields.append( PimContact::Emails );    }    ContactFieldSelector picker( fields, "", true, this, "addressPicker", true );    QStringList curAddr = QStringList::split( ",", le->text() );    for( uint i = 0 ; i < curAddr.count() ; ++i )	curAddr[i] = curAddr[i].stripWhiteSpace();    picker.setSelectedFields( curAddr );    int r = QtopiaApplication::execDialog( &picker );    if (  r == QDialog::Accepted ) {	QStringList unknownFieldData = picker.unknownFieldData();	QString userData;	if (unknownFieldData.count())	    userData = unknownFieldData.join( ", " );	QString selectedFields;	QValueList<int> selectedIndices = picker.selected();	for( QValueList<int>::Iterator it = selectedIndices.begin() ;					it != selectedIndices.end() ; ++it )	{	    if( !selectedFields.isEmpty() )		selectedFields += ", ";	    selectedFields += picker.fieldDataAt( *it );	}	if( !userData.isEmpty() && !selectedFields.isEmpty() )	    userData += ", ";	le->setText( userData + selectedFields );    }#endif    }void DetailsPage::setType( int t ){    int imHint = QtopiaApplication::Normal;    if( m_type != t )    {	m_allowPhoneNumbers = false;	m_allowEmails = false;	m_type = t;	m_ccField->hide();	if (m_ccPicker)	    m_ccPicker->hide();	m_ccFieldLabel->hide();	m_bccField->hide();	if (m_bccPicker)	    m_bccPicker->hide();	m_bccFieldLabel->hide();	m_subjectField->hide();	m_subjectFieldLabel->hide();	m_fromField->hide();	m_fromFieldLabel->hide();	m_readReplyField->hide();	m_deliveryReportField->hide();	// composer interface can be mms OR ems OR sms AND/OR email	if( t == MailMessage::MMS )	{	    m_allowPhoneNumbers = true;	    m_allowEmails = true;	    m_ccFieldLabel->show();	    m_ccField->show();	    if (m_ccPicker)		m_ccPicker->show();	    m_bccFieldLabel->show();	    m_bccField->show();	    if (m_bccPicker)		m_bccPicker->show();	    m_subjectField->show();	    m_subjectFieldLabel->show();	    m_readReplyField->show();	    m_deliveryReportField->show();	}	else if( t == MailMessage::EMS )	{	    m_allowPhoneNumbers = true;	}	else	{	    if( t & MailMessage::SMS )	    {		m_allowPhoneNumbers = true;	    }	    if( t & MailMessage::Email )	    {		m_allowEmails = true;		if( t == MailMessage::Email )		{ // only allowed if explicitly email		    m_ccFieldLabel->show();		    m_ccField->show();		    if (m_ccPicker)			m_ccPicker->show();		    m_bccFieldLabel->show();		    m_bccField->show();		    if (m_bccPicker)			m_bccPicker->show();		    m_subjectField->show();		    m_subjectFieldLabel->show();		    m_fromField->show();		    m_fromFieldLabel->show();		}	    }	}	if( m_allowPhoneNumbers )	    imHint = QtopiaApplication::PhoneNumber;	else if( m_allowEmails )	    imHint = QtopiaApplication::Words;	QtopiaApplication::setInputMethodHint( m_toField,					(QtopiaApplication::InputMethodHint)imHint );	QtopiaApplication::setInputMethodHint( m_ccField,					(QtopiaApplication::InputMethodHint)imHint );	QtopiaApplication::setInputMethodHint( m_bccField,					(QtopiaApplication::InputMethodHint)imHint );    }    m_toField->setFocus();    layout()->activate();}void DetailsPage::getDetails( MailMessage &mail ){    mail.setTo( QStringList( to() ) );    mail.setCc( QStringList( cc() ) );    mail.setBcc( QStringList( bcc() ) );    mail.setSubject( subject() );    if( mail.subject().isEmpty() ) {	if ( (m_type & MailMessage::Email) || 	     mail.plainTextBody().trimmed().isEmpty() )	    mail.setSubject( tr("(no subject)") );	else	    mail.setSubject( mail.plainTextBody() );    }    mail.setFrom( from() );    if( m_type == MailMessage::MMS ) {	if ( m_deliveryReportField->isChecked() )	    mail.setExtraHeader( "X-Mms-Delivery-Report", "Yes" );	if ( m_readReplyField->isChecked() )	    mail.setExtraHeader( "X-Mms-Read-Reply", "Yes" );    }    if( m_type & MailMessage::SMS ) {	// For the time being limit sending SMS messages so that they can	// only be sent to phone numbers and not email addresses	QString number = to();	QString n;	QStringList numbers;	uint posn;	uint ch;	for ( posn = 0; posn < (uint)number.length(); ++posn ) {	    ch = number[posn].unicode();	    if ( ch >= '0' && ch <= '9' ) {		n += (QChar)ch;	    } else if ( ch == '+' || ch == '#' || ch == '*' ) {		n += (QChar)ch;	    } else if ( ch == '-' || ch == '(' || ch == ')' ) {		n += (QChar)ch;	    } else if ( ch == ' ' ) {		n += (QChar)ch;	    } else if ( ch == ',' ) {		if (!n.isEmpty())		    numbers.append( n );		n = "";	    } // else ignore	}	if (!n.isEmpty())	    numbers.append( n );	mail.setTo( numbers );    }}void DetailsPage::setBcc( const QString &a_bcc ){    m_bccField->setText( a_bcc );}QString DetailsPage::bcc() const{    QString text;    if( !m_bccField->isHidden() )	text = m_bccField->text();    return text;}void DetailsPage::setCc( const QString &a_cc ){    m_ccField->setText( a_cc );}QString DetailsPage::cc() const{    QString text;    if( !m_ccField->isHidden() )	text = m_ccField->text();    return text;}void DetailsPage::setTo( const QString &a_to ){    m_toField->setText( a_to );}QString DetailsPage::to() const{    // TODO : only include addresses according to allow flags    QStringList list = splitAddresses( m_toField->text() );    return m_toField->text();}QString DetailsPage::subject() const{    return m_subjectField->text();}void DetailsPage::setSubject( const QString &sub ){    m_subjectField->setText( sub );}QString DetailsPage::from() const{    return m_fromField->currentText();}void DetailsPage::setFrom( const QString &from ){    int i;    for( i = 0 ; i < (int)m_fromField->count() ; ++i )    {	if( m_fromField->itemText( i ) == from )	{	    m_fromField->setCurrentIndex( i );	    break;	}    }    if( i < m_fromField->count() )    {	m_fromField->insertItem( 0, from );	m_fromField->setCurrentIndex( 0 );    }}void DetailsPage::setFromFields( const QStringList &from ){    m_fromField->clear();    m_fromField->addItems( from );}void DetailsPage::copy(){    QWidget *fw = focusWidget();    if( !fw )	return;    if( fw->inherits( "QLineEdit" ) )	((QLineEdit*)(fw))->copy();    else if( fw->inherits( "QTextEdit" ) )	((QTextEdit*)(fw))->copy();}void DetailsPage::paste(){    QWidget *fw = focusWidget();    if( !fw )	return;    if( fw->inherits( "QLineEdit" ) )	((QLineEdit*)(fw))->paste();    else if( fw->inherits( "QTextEdit" ))	((QTextEdit*)(focusWidget()))->paste();}void DetailsPage::clear(){    m_toField->clear();    m_ccField->clear();    m_bccField->clear();    m_subjectField->clear();    m_readReplyField->setChecked( false );    // don't clear from fields}bool DetailsPage::eventFilter(QObject* obj, QEvent* event){    if (((obj == m_toField) || (obj == m_ccField) || (obj == m_bccField))	&& (event->type() == QEvent::KeyPress)	&& (qobject_cast<QLineEdit *>(obj)->text().isEmpty())) {	QKeyEvent *keyEvent = (QKeyEvent*)event;	if (keyEvent->key() == Qt::Key_Select) {	    editRecipients();	    return true;	}	return false;    } else if (obj == m_toField) {        if (event->type() == QEvent::EnterEditFocus && m_ignoreFocus) {            if(!m_toField->text().isEmpty())                m_toField->setEditFocus(false);	    m_ignoreFocus = false;            return true;        }	return false;    } else {        return QWidget::eventFilter(obj, event);    }}

⌨️ 快捷键说明

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