emailuis/nmailuiwidgets/src/nmhtmllineedit.cpp
changeset 74 6c59112cfd31
parent 68 83cc6bae1de8
child 76 38bf5461e270
--- a/emailuis/nmailuiwidgets/src/nmhtmllineedit.cpp	Wed Sep 15 17:47:19 2010 +0300
+++ b/emailuis/nmailuiwidgets/src/nmhtmllineedit.cpp	Thu Sep 30 11:43:07 2010 +0300
@@ -16,6 +16,9 @@
 */
 
 #include "nmailuiwidgetsheaders.h"
+
+static const int NmLabelIndentUsePreviousValue = 0;
+
 /*
 #include "nmhtmllineedit.h"
 */
@@ -23,7 +26,8 @@
     Constructor
  */
 NmHtmlLineEdit::NmHtmlLineEdit(QGraphicsItem *parent) :
-    HbLineEdit(parent)
+    HbLineEdit(parent),
+    mIndent(0)
 {
     NM_FUNCTION;
 
@@ -85,6 +89,8 @@
     NM_FUNCTION;
     
     HbAbstractEdit::setHtml(text);
+    // Resetting the indent is called because setting new content lose old indention set. 
+    setIndentForLabel(NmLabelIndentUsePreviousValue);    
 }
 
 QString NmHtmlLineEdit::toPlainText () const
@@ -99,6 +105,8 @@
     NM_FUNCTION;
     
     HbAbstractEdit::setPlainText(text);
+    // Resetting the indent is called because setting new content lose old indention set. 
+    setIndentForLabel(NmLabelIndentUsePreviousValue);    
 }
 
 /*!
@@ -124,11 +132,49 @@
 
 
 /*!
- *  Returns the rectangle for the cursor.
+ *  Returns the rectangle for the cursor including the predictive text area.  
+ *  HbAbstractEditPrivate::ensurePositionVisible() uses the same algorithm.
  */
 QRectF NmHtmlLineEdit::rectForCursorPosition() const
 {
     NM_FUNCTION;
     
-    return HbLineEdit::rectForPosition(cursorPosition());
+    int cursorPos = cursorPosition();
+    QRectF rect = rectForPosition(cursorPos);
+    QTextDocument *doc = document();
+    if (doc) {
+        rect.adjust(0, -doc->documentMargin(), 0, doc->documentMargin());
+        const QTextBlock block = doc->findBlock(cursorPos);
+        QTextLayout *blockLayout = block.layout();
+        if (block.isValid() && blockLayout) {
+            if (blockLayout->preeditAreaText().length()) {
+                // Adjust cursor rect so that predictive text will be also visible
+                rect.adjust(0, 0, boundingRect().width() / 2, 0);
+            }
+        }
+    }
+
+    return rect;
 }
+
+/*!
+    Set margin for the first line. This will create empty space
+    into begining of the edit field to reserve enough space for the
+    label text e.g. 'To:'.
+ */
+void NmHtmlLineEdit::setIndentForLabel(const qreal indent)
+{
+    NM_FUNCTION;
+	
+    // Check that should we use previous value or set new value.
+    // Previous value is used when edit field content is changed.
+    if (indent != NmLabelIndentUsePreviousValue) {
+        mIndent = indent;
+    }
+    QTextCursor cursor(this->document());
+    cursor.select(QTextCursor::BlockUnderCursor);
+    QTextBlockFormat format;
+    format.setTextIndent(mIndent);
+    cursor.mergeBlockFormat(format);
+}
+