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

📄 emaildialogphone.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000-2005 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.** ** This program is free software; you can redistribute it and/or modify it** under the terms of the GNU General Public License as published by the** Free Software Foundation; either version 2 of the License, or (at your** option) any later version.** ** A copy of the GNU GPL license version 2 is included in this package as ** LICENSE.GPL.**** This program is distributed in the hope that it will be useful, but** WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ** See the GNU General Public License for more details.**** In addition, as a special exception Trolltech gives permission to link** the code of this program with Qtopia applications copyrighted, developed** and distributed by Trolltech under the terms of the Qtopia Personal Use** License Agreement. You must comply with the GNU General Public License** in all respects for all of the code used other than the applications** licensed under the Qtopia Personal Use License Agreement. If you modify** this file, you may extend this exception to your version of the file,** but you are not obligated to do so. If you do not wish to do so, delete** this exception statement from your version.** ** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include "emaildialogphone.h"#include <qaction.h>#include <qlayout.h>#include <qtopia/resource.h>#include <qtopia/contextmenu.h>#include <qtopia/qpeapplication.h>#include <qtopia/global.h>EmailDialog::EmailDialog( QWidget *parent, const char *name, bool modal, WFlags fl )    : QDialog( parent, name, modal, fl ){    QVBoxLayout *l = new QVBoxLayout( this );    mList = new EmailDialogList( this );    mList->setFocusPolicy( NoFocus );    mList->setFrameStyle( QFrame::NoFrame );    mEdit = new EmailLineEdit( this );    connect( mList, SIGNAL(highlighted(QListBoxItem*)), mEdit, SLOT(currentChanged(QListBoxItem*)) );    connect( mEdit, SIGNAL(textChanged(const QString&)), mList, SLOT(setCurrentText(const QString&)) );    connect( mEdit, SIGNAL(newEmail()), mList, SLOT(newEmail()) );    connect( mEdit, SIGNAL(deleteEmail()), mList, SLOT(deleteEmail()) );    connect( mEdit, SIGNAL(setAsDefault()), mList, SLOT(setAsDefault()) );    connect( mEdit, SIGNAL(moveUp()), mList, SLOT(moveUp()) );    connect( mEdit, SIGNAL(moveDown()), mList, SLOT(moveDown()) );    l->addWidget( mList );    l->addWidget( mEdit );    mEdit->setFocus();    setGeometry( qApp->desktop()->geometry() );    setCaption( tr("Email List") );}EmailDialog::~EmailDialog(){}void EmailDialog::showEvent( QShowEvent *e ){    QDialog::showEvent( e );    mList->triggerUpdate( TRUE );}void EmailDialog::setEmails( const QString &def, const QStringList &em ){    mList->setEmails( def, em );}QString EmailDialog::defaultEmail() const{    return mList->defaultEmail();}QStringList EmailDialog::emails() const{    return mList->emails();}EmailDialogListItem::EmailDialogListItem( EmailDialogList *parent )    : QListBoxItem( parent ){}EmailDialogListItem::EmailDialogListItem( EmailDialogList *parent, EmailDialogListItem *after )    : QListBoxItem( parent, after ){}void EmailDialogListItem::setText( const QString &txt ){    QListBoxItem::setText( txt );    listBox()->triggerUpdate( TRUE );}void EmailDialogListItem::setPixmap( const QPixmap &pix ){    mDefaultPix = pix;    listBox()->triggerUpdate( TRUE );}const QPixmap *EmailDialogListItem::pixmap() const{    return &mDefaultPix;}int EmailDialogListItem::width( const QListBox *lb ) const{    return lb->visibleWidth();}const int mgn = 2;int EmailDialogListItem::height( const QListBox *lb ) const{    QFontMetrics fm = lb->fontMetrics();    const int pixWidth = (mDefaultPix.width() > 0 ? mDefaultPix.width() : 24);    int h = QMAX( mDefaultPix.height()+mgn*2, 					fm.boundingRect( 0, 0, width(lb)-pixWidth-mgn, 					fm.lineSpacing(), Qt::WordBreak, text().simplifyWhiteSpace()).height()+(mgn*2) );    return h;}void EmailDialogListItem::paint( QPainter *p ){    //TODO : width of pixmap shouldn't be a hardcoded value    const int itemWidth = width( listBox() );    const int itemHeight = height( listBox() );    const int w = itemWidth;    const int h = itemHeight-(mgn*2);    const int pixWidth = (mDefaultPix.width() > 0 ? mDefaultPix.width() : 24);    int x = 0,	y = 0+mgn;    p->drawText( x, y, w-pixWidth-mgn, h, Qt::WordBreak, text() );    if( !mDefaultPix.isNull() )    {	x = w-pixWidth;	y = itemHeight/2 - mDefaultPix.height()/2;	p->drawPixmap( x, y, mDefaultPix );    }}EmailDialogList::EmailDialogList( QWidget *parent, const char *name, WFlags fl )    : QListBox( parent, name, fl ){    mDefaultPix = Resource::loadIconSet( "email" ).pixmap( QIconSet::Small, TRUE );    mDefaultIndex = -1;#ifdef QTOPIA_PHONE    if( !Global::mousePreferred() )	setModalEditing( FALSE );#endif    setHScrollBarMode( AlwaysOff );}void EmailDialogList::setCurrentText( const QString &t ){    if( !count() && !t.isEmpty() )    {	newEmail( t ); // don't have items and have new text    }    else if( currentItem() == -1 && count() )    {	setCurrentItem( 0 ); //have items but no current    }    else if( !count() )    {	//have no items, and t is empty	return;    }    if( item( currentItem() )->text() != t )    {	((EmailDialogListItem *)item( currentItem() ))->setText( t );    }}void EmailDialogList::setEmails( const QString &def, const QStringList &em ){    clear();    QStringList::ConstIterator it;    mDefaultIndex = -1;    int idxCount = 0;     EmailDialogListItem *prevItem = 0;    for( it = em.begin() ; it != em.end() ; ++idxCount, ++it )    {	QString emTxt = (*it).simplifyWhiteSpace() ;	if( emTxt.isEmpty() )	    continue;	EmailDialogListItem *newItem = new EmailDialogListItem( this, prevItem );	newItem->setText( emTxt );	if( emTxt == def && mDefaultIndex == -1 )	{	    newItem->setPixmap( mDefaultPix );	    mDefaultIndex = idxCount;	}	prevItem = newItem;    }    if( count() )    {	setCurrentItem( 0 );	ensureCurrentVisible();    }}QString EmailDialogList::defaultEmail() const{    if( mDefaultIndex != -1 )	return item( mDefaultIndex )->text();    return QString::null;}QStringList EmailDialogList::emails() const{    QStringList em;    for( uint i = 0 ; i < count() ; ++i )    {	if( !item( i )->text().stripWhiteSpace().isEmpty() )	    em += item( i )->text();    }    return em;}void EmailDialogList::newEmail(){    newEmail( QString::null );}void EmailDialogList::newEmail( const QString &email ){    int lastIdx = count()-1;    EmailDialogListItem *newItem = new EmailDialogListItem( this, (EmailDialogListItem *)item(lastIdx) );    newItem->setText( (!email.isNull() ? email : tr("user@domain")) );    setCurrentItem( lastIdx + 1 );    ensureCurrentVisible();    if( lastIdx == -1 )	setAsDefault();}void EmailDialogList::deleteEmail(){    const int ci = currentItem();    if( ci != -1 )    {	removeItem( ci );	if( count() )	{	    int ni = (ci > 0 ? ci-1 : 0);	    setSelected( ni, TRUE );	    if( ci == mDefaultIndex )	    {		mDefaultIndex = -1;		setAsDefault();	    }	}	else	{	    mDefaultIndex = -1;	}    }}void EmailDialogList::setAsDefault(){    if( currentItem() != -1 )    {	if( mDefaultIndex != -1 )	    ((EmailDialogListItem *)item( mDefaultIndex ))->setPixmap( QPixmap() );	mDefaultIndex = currentItem();	((EmailDialogListItem *)item( mDefaultIndex ))->setPixmap( mDefaultPix );    }}void EmailDialogList::moveUp(){    if( !count() )	return;    int curIdx = currentItem();    --curIdx;    if( curIdx < 0 )	curIdx = count()-1;	setCurrentItem( curIdx );}void EmailDialogList::moveDown(){    if( !count() )	return;    int curIdx = currentItem();    ++curIdx;    if( curIdx >= (int) count() )	curIdx = 0;    setCurrentItem( curIdx );}EmailLineEdit::EmailLineEdit( QWidget *parent, const char *name )    : QLineEdit( parent, name ){    ContextMenu *menu = new ContextMenu( this, 0 );    mNewAction = new QAction( tr("New"), Resource::loadIconSet("new"), QString::null, 0, this, 0 );    connect( mNewAction, SIGNAL(activated()), this, SIGNAL(newEmail()) );    mNewAction->addTo( menu );    mSetDefaultAction = new QAction( tr("Set as default"), Resource::loadIconSet("email"), QString::null, 0, this, 0 );    connect( mSetDefaultAction, SIGNAL(activated()), this, SIGNAL(setAsDefault()) );    mSetDefaultAction->addTo( menu );    mDeleteAction = new QAction( tr("Delete"), Resource::loadIconSet("trash"), QString::null, 0, this, 0 );    connect( mDeleteAction, SIGNAL(activated()), this, SIGNAL(deleteEmail()) );    mDeleteAction->addTo( menu );}void EmailLineEdit::currentChanged( QListBoxItem *current ){    bool haveCurrent  = ( current ? TRUE : FALSE );    QString txt = ( current ? current->text() : QString::null );    setText( txt );    if( current && current->listBox()->count() > 1 )	selectAll();    mSetDefaultAction->setEnabled( haveCurrent );    mDeleteAction->setEnabled( haveCurrent );}void EmailLineEdit::keyPressEvent( QKeyEvent *ke ){    if( ke->key() == Key_Up )    {	emit moveUp();	ke->accept();    }    else if( ke->key() == Key_Down )    {	emit moveDown();	ke->accept();    }    else    {	QLineEdit::keyPressEvent( ke );    }}

⌨️ 快捷键说明

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