diff -r ecf6a73a9186 -r 60a8a215b0ec messagingapp/msgui/unifiededitor/src/msgunieditorbodyeditor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgui/unifiededitor/src/msgunieditorbodyeditor.cpp Tue Oct 19 11:30:16 2010 +0530 @@ -0,0 +1,366 @@ +/* + * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: + * + */ + +#include "msgunieditorbodyeditor.h" + +// SYSTEM INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "unieditorpluginloader.h" +#include "unieditorplugininterface.h" +#include "UniSendingSettings.h" +#include "UniEditorGenUtils.h" +#include "msgunieditormonitor.h" +#include "debugtraces.h" + +// LOCAL CONSTANTS + +const QString SEND_ICON("qtg_mono_send"); +const QString BACKGROUND("qtg_fr_input_v_bg"); +const QString BACKGROUND_FRAME("qtg_fr_messaging_char_count"); +const QString CHAR_COUNTER_COLOR("qtc_messaging_char_count"); + +const QString SEND_BUTTON_NORMAL("qtg_fr_btn_green_normal"); +const QString SEND_BUTTON_PRESSED("qtg_fr_btn_green_pressed"); +const QString SEND_BUTTON_DISABLED("qtg_fr_btn_disabled"); + +const QString SEND_BUTTON_NORMAL_COLOR("qtc_callhandling_answer_normal"); +const QString SEND_BUTTON_PRESSED_COLOR("qtc_callhandling_answer_pressed"); +const QString SEND_BUTTON_DISABLED_COLOR("qtc_button_disabled"); + +#define LOC_SMS_CHAR_LIMIT_REACHED hbTrId("txt_messaging_dialog_sms_character_count_exceeded") +#define LOC_HINT_TEXT hbTrId("txt_messaging_formlabel_enter_message_here") +#define LOC_UNABLE_TO_ADD_CONTENT hbTrId("txt_messaging_dpopinfo_unable_to_add_more_content") + + +const TInt KShowCounterLimit = 10; + + +//--------------------------------------------------------------- +// MsgUnifiedEditorBodyEditor::MsgUnifiedEditorBodyEditor +// @see header +//--------------------------------------------------------------- +MsgUnifiedEditorBodyEditor::MsgUnifiedEditorBodyEditor(QGraphicsItem *parent) : +MsgUnifiedEditorBaseWidget(parent), +mMsgEditor(NULL), +mSendButton(NULL), +mPluginLoader(NULL) +{ + this->setObjectName("bodyText"); + + setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed); + + //setting background. + HbFrameItem* backGround = new HbFrameItem(this); + backGround->frameDrawer().setFrameGraphicsName(BACKGROUND); + backGround->frameDrawer().setFrameType(HbFrameDrawer::ThreePiecesVertical); + backGround->frameDrawer().setFillWholeRect(true); + //fixing to 2 pixel to avoid extra line on top of frame. + backGround->frameDrawer().setBorderWidth(2); + this->setBackgroundItem(backGround); + + // Initialize the widget. + init(); + + setEncodingSettingsL(); +} + +//--------------------------------------------------------------- +// MsgUnifiedEditorBodyEditor::init +// @see header +//--------------------------------------------------------------- +void MsgUnifiedEditorBodyEditor::init() +{ + // Create mandatory element of mesh layout. + mMsgEditor = new MsgEditor(this); + HbStyle::setItemName(mMsgEditor, "msgEditor"); + + mSendButton = new HbPushButton(this); + HbStyle::setItemName(mSendButton, "sendButton"); + mSendButton->setEnabled(false); + + HbFrameItem* backGround = new HbFrameItem(this); + backGround->frameDrawer().setFrameType(HbFrameDrawer::NinePieces); + mSendButton->setBackgroundItem(backGround); + updateButtonBackgroundAndColor(SEND_BUTTON_DISABLED,SEND_BUTTON_DISABLED_COLOR); + mSendButton->setIcon(HbIcon(SEND_ICON)); + + mCharCounter = new HbTextItem(this); + HbStyle::setItemName(mCharCounter, "charCounter"); + mCharCounter->setZValue(1.5); + + QColor color = HbColorScheme::color(CHAR_COUNTER_COLOR); + mCharCounter->setTextColor(color); + + mBackgroundItem = new HbFrameItem(this); + HbStyle::setItemName(mBackgroundItem, "charCounterFrame"); + + mBackgroundItem->frameDrawer().setFrameType(HbFrameDrawer::ThreePiecesHorizontal); + mBackgroundItem->frameDrawer().setFillWholeRect(true); + + mBackgroundItem->frameDrawer().setFrameGraphicsName(BACKGROUND_FRAME); + + //Create editor utils object + mEditorUtils = q_check_ptr(new UniEditorGenUtils()); + + connect(mSendButton, SIGNAL(clicked()),this, SIGNAL(sendMessage())); + connect(mSendButton, SIGNAL(pressed()),this, SLOT(onPressed())); + connect(mSendButton, SIGNAL(released()),this, SLOT(onReleased())); + connect(mMsgEditor, SIGNAL(contentsChanged()),this,SLOT(onContentsChanged())); + +} + +//--------------------------------------------------------------- +// MsgUnifiedEditorBodyEditor::~MsgUnifiedEditorBodyEditor +// @see header +//--------------------------------------------------------------- +MsgUnifiedEditorBodyEditor::~MsgUnifiedEditorBodyEditor() +{ + delete mEditorUtils; +} + +//--------------------------------------------------------------- +// MsgUnifiedEditorBodyEditor::content +// @see header +//--------------------------------------------------------------- +QString MsgUnifiedEditorBodyEditor::content() const +{ + return mMsgEditor->toPlainText(); +} + +//--------------------------------------------------------------- +// MsgUnifiedEditorBodyEditor::setContent +// @see header +//--------------------------------------------------------------- +void MsgUnifiedEditorBodyEditor::setContent(const QString &text) +{ + mMsgEditor->setPlainText(text); +} + +//--------------------------------------------------------------- +// MsgUnifiedEditorBodyEditor::enableSendButton +// @see header +//--------------------------------------------------------------- +void MsgUnifiedEditorBodyEditor::enableSendButton(bool enable) +{ + if(enable) + { + if(!mSendButton->isEnabled()) + { + mSendButton->setFocusProxy(mMsgEditor); + mSendButton->setEnabled(true); + updateButtonBackgroundAndColor(SEND_BUTTON_NORMAL,SEND_BUTTON_NORMAL_COLOR); + } + } + else + { + if(mSendButton->isEnabled()) + { + mSendButton->setFocusProxy(0); + mSendButton->setEnabled(false); + updateButtonBackgroundAndColor(SEND_BUTTON_DISABLED,SEND_BUTTON_DISABLED_COLOR); + } + } +} + +//--------------------------------------------------------------- +// MsgUnifiedEditorBodyEditor::onContentsChanged +// @see header +//--------------------------------------------------------------- +void MsgUnifiedEditorBodyEditor::onContentsChanged() +{ + QString text = this->content(); + + mPluginInterface->setEncodingSettings(EFalse, ESmsEncodingNone,mCharSupportType); + + TInt numOfRemainingChars; + TInt numOfPDUs; + TBool unicodeMode; + TSmsEncoding alternativeEncodingType; + mPluginInterface->getNumPDUs(text, numOfRemainingChars, numOfPDUs, + unicodeMode, alternativeEncodingType); + + // emit signal to indicate change in content + int contentSize = mEditorUtils->UTF8Size(text); + QVariantList dataList; + dataList << contentSize << unicodeMode; + emit contentsChanged(dataList); + + if(MsgUnifiedEditorMonitor::messageType() == ConvergedMessage::Sms) + { + //Set char counter value + QString display = QString("%1(%2)").arg(numOfRemainingChars).arg( + numOfPDUs); + mCharCounter->setText(display); + + if (numOfPDUs > 1 || numOfRemainingChars <= KShowCounterLimit) + { + mCharCounter->setVisible(true); + mBackgroundItem->setVisible(true); + } + else + { + mCharCounter->setVisible(false); + mBackgroundItem->setVisible(false); + } + } +} + +//--------------------------------------------------------------- +// MsgUnifiedEditorBodyEditor::updateButtonBackgroundAndColor +// @see header +//--------------------------------------------------------------- +void MsgUnifiedEditorBodyEditor::updateButtonBackgroundAndColor(const QString& bg,const QString& iconColor) +{ + HbFrameItem* drawer = static_cast(mSendButton->backgroundItem()); + if(drawer) + { + drawer->frameDrawer().setFrameGraphicsName(bg); + } + QColor color = HbColorScheme::color(iconColor); + + if(color.isValid()) + { + mSendButton->icon().setColor(color); + } +} + +//--------------------------------------------------------------- +// MsgUnifiedEditorBodyEditor::onPressed +// @see header +//--------------------------------------------------------------- +void MsgUnifiedEditorBodyEditor::onPressed() +{ + updateButtonBackgroundAndColor(SEND_BUTTON_PRESSED,SEND_BUTTON_PRESSED_COLOR); +} + +//--------------------------------------------------------------- +// MsgUnifiedEditorBodyEditor::onReleased +// @see header +//--------------------------------------------------------------- +void MsgUnifiedEditorBodyEditor::onReleased() +{ + updateButtonBackgroundAndColor(SEND_BUTTON_NORMAL,SEND_BUTTON_NORMAL_COLOR); +} + +//--------------------------------------------------------------- +// MsgUnifiedEditorBodyEditor::setEncodingSettingsL +// @see header +//--------------------------------------------------------------- +void MsgUnifiedEditorBodyEditor::setEncodingSettingsL() +{ + mPluginLoader = new UniEditorPluginLoader(this); + + mPluginInterface = + mPluginLoader->getUniEditorPlugin(ConvergedMessage::Sms); + + QT_TRAP_THROWING( CSmsSettings* settings = CSmsSettings::NewLC(); + CSmsAccount* account = CSmsAccount::NewLC(); + account->LoadSettingsL( *settings ); + + if( settings->CharacterSet() == TSmsDataCodingScheme::ESmsAlphabetUCS2) + { + mCharSupportType = TUniSendingSettings::EUniCharSupportFull; + } + else + { + mCharSupportType = TUniSendingSettings::EUniCharSupportReduced; + } + + CleanupStack::PopAndDestroy( account ); + CleanupStack::PopAndDestroy( settings )); + + + mCharCounter->setVisible(false); + mBackgroundItem->setVisible(false); +} + +//--------------------------------------------------------------- +// MsgUnifiedEditorBodyEditor::packMessage +// @see header +//--------------------------------------------------------------- +void MsgUnifiedEditorBodyEditor::packMessage(ConvergedMessage &msg) +{ + msg.setBodyText(mMsgEditor->toPlainText()); +} + +//--------------------------------------------------------------- +// MsgUnifiedEditorBodyEditor::populateContent +// @see header +//--------------------------------------------------------------- +void MsgUnifiedEditorBodyEditor::populateContent(const ConvergedMessage& msg) +{ + QString bodyTxt = msg.bodyText(); + mMsgEditor->setPlainText(msg.bodyText()); +} + +//--------------------------------------------------------------- +// MsgEditor::MsgEditor +// @see header +//--------------------------------------------------------------- +MsgEditor::MsgEditor(QGraphicsItem *parent) : +HbTextEdit(parent) +{ + this->setFontSpec(HbFontSpec(HbFontSpec::Secondary)); + this->setPlaceholderText(LOC_HINT_TEXT); + this->setSmileysEnabled(true); +} + +//--------------------------------------------------------------- +// MsgEditor::inputMethodEvent +// @see header +//--------------------------------------------------------------- +void MsgEditor::inputMethodEvent(QInputMethodEvent *event) +{ + bool showNote = false; + + if( MsgUnifiedEditorMonitor::messageType() == ConvergedMessage::Mms && + !event->commitString().isEmpty()) + { + QString str = event->commitString(); + int comitStrSize = str.toUtf8().size(); + + if(MsgUnifiedEditorMonitor::messageSize()+ comitStrSize > MsgUnifiedEditorMonitor::maxMmsSize()) + { + showNote = true; + // reject any text input if mms size limit is reached + event->setCommitString(QString()); + } + } + + HbTextEdit::inputMethodEvent(event); + + if(showNote) + { + HbMessageBox* mb = new HbMessageBox(LOC_UNABLE_TO_ADD_CONTENT,HbMessageBox::MessageTypeInformation); + mb->setStandardButtons(HbMessageBox::Ok); + mb->setAttribute(Qt::WA_DeleteOnClose); + mb->setFocusPolicy(Qt::NoFocus); + mb->show(); + } +} + +// EOF