messagingapp/msgui/conversationview/src/msgeditorwidget.cpp
changeset 23 238255e8b033
child 25 84d9eb65b26f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/conversationview/src/msgeditorwidget.cpp	Fri Apr 16 14:56:15 2010 +0300
@@ -0,0 +1,209 @@
+/*
+ * 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 "msgeditorwidget.h"
+
+// SYSTEM INCLUDES
+#include <HbStyle>
+#include <HbPushButton>
+#include <qgraphicsscene.h>
+#include "debugtraces.h"
+
+// LOCAL CONSTANTS
+const QString PLUGINPATH("conversationviewplugin.dll");
+
+const QString SMS_SERVICE("messaging.mserver.sms");
+const QString SEND_BUTTON(QObject::tr("Send"));
+
+const QString SEND_ICON(":/icons/qtg_mono_send.png");
+
+QGraphicsItem* FOCUSITEM = 0;
+
+//---------------------------------------------------------------
+// MsgEditorWidget::MsgEditorWidget
+// @see header
+//---------------------------------------------------------------
+MsgEditorWidget::MsgEditorWidget(QGraphicsItem *parent) :
+    HbWidget(parent), mServiceId(SMS_SERVICE), mMsgEditor(NULL),
+    mSendButton(NULL)
+{
+    int baseId = style()->registerPlugin(PLUGINPATH);
+    
+    #ifdef _DEBUG_TRACES_
+    qDebug() << "MsgEditorWidget BASE ID --->" << baseId;
+    #endif
+    
+    setPluginBaseId(baseId);
+
+    // Initialize the widget.
+    init();
+}
+
+//---------------------------------------------------------------
+// MsgEditorWidget::init
+// @see header
+//---------------------------------------------------------------
+void MsgEditorWidget::init()
+{
+    // Create mandatory element of mesh layout.
+    mMsgEditor = new MsgEditor(this);
+    mMsgEditor->setMaxRows(5); // NOTE: Don't remove this line.
+    HbStyle::setItemName(mMsgEditor, "msgEditor");
+
+    mSendButton = new HbPushButton(this);
+    HbStyle::setItemName(mSendButton, "sendButton");
+    mSendButton->setIcon(HbIcon(SEND_ICON));
+    mSendButton->setEnabled(false);
+    FOCUSITEM = mSendButton;
+
+    connect(mSendButton, SIGNAL(clicked()),this, SLOT(onClicked()));
+    connect(mMsgEditor, SIGNAL(replyStarted()),this, SIGNAL(replyStarted()));
+    connect(mMsgEditor, SIGNAL(textChanged(QString)),this,SLOT(onTextChanged(QString)));
+    
+}
+
+//---------------------------------------------------------------
+// MsgEditorWidget::~MsgEditorWidget
+// @see header
+//---------------------------------------------------------------
+MsgEditorWidget::~MsgEditorWidget()
+{
+    style()->unregisterPlugin(PLUGINPATH);
+}
+
+//---------------------------------------------------------------
+// MsgEditorWidget::serviceId
+// @see header
+//---------------------------------------------------------------
+const QString& MsgEditorWidget::serviceId()
+{
+    return mServiceId;
+}
+
+//---------------------------------------------------------------
+// MsgEditorWidget::content
+// @see header
+//---------------------------------------------------------------
+QString MsgEditorWidget::content() const
+{
+    return mMsgEditor->text();
+}
+
+//---------------------------------------------------------------
+// MsgEditorWidget::setContent
+// @see header
+//---------------------------------------------------------------
+void MsgEditorWidget::setContent(const QString &text)
+{
+    mMsgEditor->setText(text);
+}
+
+//---------------------------------------------------------------
+// MsgEditorWidget::clear
+// @see header
+//---------------------------------------------------------------
+void MsgEditorWidget::clear()
+{
+    mMsgEditor->setText(QString());
+    mMsgEditor->setCursorVisibility(Hb::TextCursorHidden);
+}
+
+//---------------------------------------------------------------
+// MsgEditorWidget::clear
+// @see header
+//---------------------------------------------------------------
+void MsgEditorWidget::onTextChanged(const QString& str)
+{
+    if(str.length() > 0 )
+        {
+        if(!mSendButton->isEnabled())
+            {
+            mSendButton->setFocusProxy(mMsgEditor);
+            mSendButton->setEnabled(true);
+            }
+        }
+    else
+        {
+        if(mSendButton->isEnabled())
+            {
+            mSendButton->setFocusProxy(0);
+            mSendButton->setEnabled(false);
+            }
+        }
+}
+
+//---------------------------------------------------------------
+// MsgEditor::onClicked
+// @see header
+//---------------------------------------------------------------
+void MsgEditorWidget::onClicked()
+    {    
+    mSendButton->setFocusProxy(0);
+    mMsgEditor->setFocusProxy(mSendButton);
+    
+    this->scene()->clearFocus();
+    this->scene()->setFocusItem(mSendButton);
+    
+    mMsgEditor->setFocusProxy(0);
+
+    mMsgEditor->setCursorVisibility(Hb::TextCursorHidden);
+    
+    emit sendMessage();
+    }
+
+
+//---------------------------------------------------------------
+// MsgEditor::MsgEditor
+// @see header
+//---------------------------------------------------------------
+MsgEditor::MsgEditor(QGraphicsItem *parent)
+:HbLineEdit(parent)
+    {
+    
+    }
+
+//---------------------------------------------------------------
+// MsgEditor::focusInEvent
+// @see header
+//---------------------------------------------------------------
+void MsgEditor::focusInEvent(QFocusEvent *event)
+ {
+    if(event->reason() == Qt::MouseFocusReason)
+    {
+        HbLineEdit::focusInEvent(event);
+        FOCUSITEM->setFocusProxy(this);
+        setCursorVisibility(Hb::TextCursorVisible);
+        emit replyStarted();
+    }
+    else
+    {
+        setCursorVisibility(Hb::TextCursorHidden);
+    }
+ }
+
+//---------------------------------------------------------------
+// MsgEditor::focusOutEvent
+// @see header
+//---------------------------------------------------------------
+void MsgEditor::focusOutEvent(QFocusEvent * event)
+    {
+    FOCUSITEM->setFocusProxy(0);
+    setCursorVisibility(Hb::TextCursorHidden);
+    HbLineEdit::focusOutEvent(event);  
+    }
+
+// EOF