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

📄 mmscomposer.cpp

📁 Qtopia下的邮件处理程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/******************************************************************************** Copyright (C) 2000-2006 TROLLTECH ASA. All rights reserved.**** This file is part of the Phone Edition of the Qtopia Toolkit.**** Licensees holding a valid license agreement from Trolltech or any of its** authorized distributors may use this file in accordance with** the License Agreement provided with the Licensed Software.**** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for**   information about Trolltech's Commercial License Agreements.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.********** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "mmscomposer.h"#include "../addressbook/imagesourcedialog.h"#include "audiosource.h"#include <qtopia/qsoftmenubar.h>#include <qtopia/qtopiaapplication.h>#include <qtopia/qcolorselector.h>#include <qtopia/mail/mailmessage.h>#include <qtopia/qmimetype.h>#include <QAction>#include <QPainter>#include <QLayout>#include <QStackedWidget>#include <QDialog>#include <QImage>#include <QSpinBox>#include <QFile>#include <QStringList>#include <QDir>#include <QTextStream>#include <QDataStream>//#include <qgfx_qws.h>#include <QBitArray>#include <QXmlDefaultHandler>#include <QMouseEvent>#include <QDesktopWidget>#include <QMenu>#include <QDebug>MMSSlideImage::MMSSlideImage(QWidget *parent)    : QLabel(parent){    setAlignment( Qt::AlignCenter );    connect( this, SIGNAL(clicked()), this, SLOT(select()) );    setImage( QPixmap() );    setFocusPolicy( Qt::StrongFocus );    setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );    // would like to specify a value relative to parent here but Qt makes it hard..    setMinimumSize( 0, 30 );}void MMSSlideImage::mousePressEvent( QMouseEvent *event ){    if( rect().contains( event->pos() ) )	m_pressed = true;}void MMSSlideImage::mouseReleaseEvent( QMouseEvent *event ){    if( m_pressed && rect().contains( event->pos() ) )	emit clicked();    m_pressed = false;}void MMSSlideImage::keyPressEvent( QKeyEvent *event ){    if( event->type() == QEvent::KeyPress )    {	QKeyEvent *keyEvent = (QKeyEvent *)event;	switch( keyEvent->key() )	{	    case Qt::Key_Left:		emit leftPressed();		break;	    case Qt::Key_Right:		emit rightPressed();		break;	    case Qt::Key_Select:		emit clicked();		break;	    default:		QLabel::keyPressEvent( event );		break;	}    }}void MMSSlideImage::paintEvent( QPaintEvent *event ){    QLabel::paintEvent( event );    if( hasFocus() )    {	QPainter p( this );	QPen pen(palette().highlight().color());	p.setPen( pen );	p.drawRect( 0, 0, width(), height() );	p.drawRect( 1, 1, width()-2, height()-2 );    }}QRect MMSSlideImage::contentsRect() const{    QPixmap img = image();    if( img.isNull() )	return QRect();    QPoint pnt( rect().x() + (width() - img.width()) / 2 + 2,		rect().y() + (height() - img.height()) / 2 + 2	      );    pnt = mapToParent( pnt );    return QRect( pnt.x(), pnt.y(), img.width(), img.height() );}extern QRect qt_maxWindowRect;QSize MMSSlideImage::sizeHint() const{    QWidget *par = 0;    if( parent() && parent()->isWidgetType() )	par = (QWidget *)parent();#if QT_VERSION < 0x030000    QRect mwr = qt_screen->mapToDevice(qt_maxWindowRect,           QSize(qt_screen->width(),qt_screen->height()) );#else    QRect mwr = qt_maxWindowRect;#endif    int w = par ? par->width() : mwr.width(),	h = par ? par->height() : mwr.height();    return QSize(w/3*2, h/3*2);}void MMSSlideImage::select(){#ifndef QTOPIA_DESKTOP    ImageSourceDialog *selector = new ImageSourceDialog( m_image, this,							"slideImageSelector" );    selector->setWindowTitle( tr("Slide Photo") );    selector->setMaximumImageSize(qApp->desktop()->size());    int result = QtopiaApplication::execDialog( selector );    if( result == QDialog::Accepted )    {	setImage(selector->pixmap());    }    delete selector;#else    qDebug("Image selection on qtopia desktop not implemented for MMS Composer");#endif}void MMSSlideImage::resizeEvent( QResizeEvent *event ){    QLabel::resizeEvent( event );    setImage( m_image );}QPixmap MMSSlideImage::scale( const QPixmap &src ) const{    QPixmap pix = src;    if( !src.isNull() && (src.width() >= width() || src.height() >= height()) )        pix = pix.scaled(width(), height(), Qt::KeepAspectRatio);    return pix;}void MMSSlideImage::setImage( const QPixmap &image ){    m_image = image;    setPixmap( scale( m_image ) );    if( image.isNull() )	setText( tr("Slide Image") );    emit changed();}QPixmap MMSSlideImage::image() const{    QPixmap img;    const QPixmap *p = pixmap();    if( p )	img = *p;    return img;}const QString MMSSlideText::defaultText = QObject::tr("Your text here..");MMSSlideText::MMSSlideText(QWidget *parent)    : QTextEdit(parent), m_hasFocus( false ){    setSizePolicy( QSizePolicy( QSizePolicy::Expanding,					    QSizePolicy::MinimumExpanding ) );    setWordWrapMode(QTextOption::WordWrap);    setText( QString() );}bool MMSSlideText::event( QEvent *e ){#ifdef QTOPIA_PHONE    bool a = QTextEdit::event( e );    if( e->type() == QEvent::EnterEditFocus && text().isNull() )	clear();    else if( e->type() == QEvent::LeaveEditFocus && text().isEmpty() )	setText( QString() );    else if( e->type() == QEvent::MouseButtonPress && !m_hasFocus )    {	selectAll();	m_hasFocus = true;    }    else if( e->type() == QEvent::FocusOut )	m_hasFocus = false;    return a;#else    return QTextEdit::event( e );#endif}void MMSSlideText::keyPressEvent( QKeyEvent *e ){#ifdef QTOPIA_PHONE    if (!Qtopia::mousePreferred()) {	if (!hasEditFocus()) {	    if (e->key() == Qt::Key_Left) {		emit leftPressed();		e->accept();		return;	    } else if (e->key() == Qt::Key_Right) {		emit rightPressed();		e->accept();		return;	    }	    //else fall through	}    }#endif    QTextEdit::keyPressEvent( e );    updateGeometry();}QRect MMSSlideText::contentsRect() const{    if( text().isNull() )	return QRect();    QPoint pnt = rect().topLeft();    pnt = mapToParent( pnt );    return QRect( pnt.x(), pnt.y(), rect().width()-2, rect().height() - 2 );}void MMSSlideText::setText( const QString &txt ){    QString t = txt;    if( t.simplified().isEmpty() )    {	t = MMSSlideText::defaultText;	selectAll();    }    QTextEdit::setPlainText( t );    updateGeometry();}QString MMSSlideText::text() const{    QString t = QTextEdit::toPlainText().simplified();    if( t == MMSSlideText::defaultText )	t = QString();    return t;}QSize MMSSlideText::sizeHint() const{    QFontMetrics fm( font() );    return QSize( QTextEdit::sizeHint().width(),		    qMax( fm.boundingRect( 0, 0, width()-2, 32768,			Qt::TextWordWrap | Qt::AlignHCenter, text() ).height()+2,			QApplication::globalStrut().height() ) );}//---------------------------------------------------------------------------MMSSlideAudio::MMSSlideAudio(QWidget *parent)    : QPushButton(parent){    setIcon(QIcon(":icon/sound"));    connect(this, SIGNAL(clicked()), this, SLOT(select()));}void MMSSlideAudio::setAudio( const QContent &doc ){    QFile f(doc.file());    if (f.open(QIODevice::ReadOnly)) {	setText(doc.name());	audioData = f.readAll();	audioName = doc.name();    } else {	setText("");	audioData.resize(0);	audioName = QString();    }    emit changed();}void MMSSlideAudio::setAudio( const QByteArray &d, const QString &loc ){    qDebug("setting audio data");    audioData = d;    audioName = loc;    setText(loc.toLatin1());}QByteArray MMSSlideAudio::audio() const{    return audioData;}void MMSSlideAudio::select(){#ifndef QTOPIA_DESKTOP    AudioSourceDialog *selector = new AudioSourceDialog(this, "slideAudioSelector", false);    selector->setAudio(QContent(audioName));    selector->setDefaultAudio("audio/amr", "amr", 8000, 1);    int result = QtopiaApplication::execDialog( selector );    if ( result == QDialog::Accepted ) {	setAudio(selector->audio());    }    delete selector;#else    qDebug("Audio selection on qtopia desktop not implemented for MMS Composer");#endif}void MMSSlideAudio::keyPressEvent( QKeyEvent *e ){    switch (e->key()) {	case Qt::Key_Left:	    emit leftPressed();	    break;	case Qt::Key_Right:	    emit rightPressed();	    break;	default:	    QPushButton::keyPressEvent(e);    }}//===========================================================================MMSSlide::MMSSlide(QWidget *parent)    : QWidget(parent), m_firstShow( true ), m_duration( 5000 ){    setFocusPolicy( Qt::NoFocus );    setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );    QVBoxLayout *l = new QVBoxLayout( this );    l->setMargin(0);    l->setSpacing(0);    m_imageContent = new MMSSlideImage( this );    l->addWidget( m_imageContent, 6 );    connect( m_imageContent, SIGNAL(leftPressed()), this, SIGNAL(leftPressed()) );    connect( m_imageContent, SIGNAL(rightPressed()), this, SIGNAL(rightPressed()) );    m_textContent = new MMSSlideText( this );    l->addWidget( m_textContent, 3 );    connect( m_textContent, SIGNAL(leftPressed()), this, SIGNAL(leftPressed()) );    connect( m_textContent, SIGNAL(rightPressed()), this, SIGNAL(rightPressed()) );    m_audioContent = new MMSSlideAudio( this );    l->addWidget( m_audioContent, 1 );    connect( m_audioContent, SIGNAL(leftPressed()), this, SIGNAL(leftPressed()) );    connect( m_audioContent, SIGNAL(rightPressed()), this, SIGNAL(rightPressed()) );}void MMSSlide::setDuration( int t ){    if( t != m_duration )    {	m_duration = t;	emit durationChanged( m_duration );    }}int MMSSlide::duration() const{    return m_duration;}MMSSlideImage *MMSSlide::imageContent() const{    return m_imageContent;}MMSSlideText *MMSSlide::textContent() const{    return m_textContent;}MMSSlideAudio *MMSSlide::audioContent() const{    return m_audioContent;}

⌨️ 快捷键说明

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