diff -r b0b89ca206b5 -r 2c62ef3caffd emailuis/nmailui/src/nmeditorheader.cpp --- a/emailuis/nmailui/src/nmeditorheader.cpp Fri May 14 04:17:40 2010 +0300 +++ b/emailuis/nmailui/src/nmeditorheader.cpp Fri May 14 04:41:45 2010 +0300 @@ -18,10 +18,7 @@ #include "nmuiheaders.h" // Layout -static const char *NMUI_EDITOR_TO_LABEL = "EditorHeaderToLabel"; -static const char *NMUI_EDITOR_TO_EDIT = "EditorHeaderToEdit"; -static const char *NMUI_EDITOR_TO_BUTTON = "EditorHeaderToButton"; -static const char *NMUI_EDITOR_RECIPIENT_GB = "EditorHeaderRecipientGB"; +static const char *NMUI_EDITOR_RECIPIENT_FIELDS = "RecipientFields"; static const char *NMUI_EDITOR_SUBJECT_LABEL = "EditorHeaderSubjectLabel"; static const char *NMUI_EDITOR_SUBJECT_EDIT = "EditorHeaderSubjectEdit"; static const char *NMUI_EDITOR_PRIORITY_ICON = "labelPriorityIcon"; @@ -30,9 +27,7 @@ // Following constants are removed when header fields will offer these static const double Un = 6.66; static const double FieldHeightWhenSecondaryFont = 5 * Un; -static const int GroupBoxTitleHeight = 42; static const double Margin = 2 * Un; -static const double HeaderAreaMarginsTotal = 3 * Un; static const double IconFieldWidth = 5 * Un; static const int nmLayoutSystemWaitTimer = 10; @@ -48,8 +43,11 @@ mIconVisible(false), mSubjectEdit(NULL), mRecipientFieldsEmpty(true), - mGroupBoxRecipient(NULL), - mAttachmentList(NULL) + mAttachmentList(NULL), + mToField(NULL), + mCcField(NULL), + mBccField(NULL), + mCcBccFieldVisible(false) { loadWidgets(); rescaleHeader(); @@ -72,23 +70,24 @@ */ void NmEditorHeader::loadWidgets() { - // To: field objects - HbLabel *toLabel = qobject_cast - (mDocumentLoader->findWidget(NMUI_EDITOR_TO_LABEL)); - NmRecipientLineEdit *toEdit = qobject_cast - (mDocumentLoader->findWidget(NMUI_EDITOR_TO_EDIT)); - HbPushButton *toButton = qobject_cast - (mDocumentLoader->findWidget(NMUI_EDITOR_TO_BUTTON)); - mToField = new NmRecipientField(toLabel, toEdit, toButton); + // Add "To:", "CC:" and "BCC:" fields + mHeader = qobject_cast + (mDocumentLoader->findWidget(NMUI_EDITOR_RECIPIENT_FIELDS)); + + mLayout = new QGraphicsLinearLayout(Qt::Vertical); + mLayout->setContentsMargins(0,Un,0,0); - // Create recipient group box which includes cc and bcc fields - mGroupBoxRecipient = qobject_cast - (mDocumentLoader->findWidget(NMUI_EDITOR_RECIPIENT_GB)); - // Ownership is transfered - mGroupBoxRecipient->setContentWidget(createRecipientGroupBoxContentWidget()); - mGroupBoxRecipient->setHeading(hbTrId("txt_mail_subhead_ccbcc")); - mGroupBoxRecipient->setCollapsable(true); - mGroupBoxRecipient->setCollapsed(true); + mToField = new NmRecipientField(QString("To:"), mHeader); + mCcField = new NmRecipientField(QString("Cc:"), mHeader); + mBccField = new NmRecipientField(QString("Bcc:"), mHeader); + + // Only 'To:' field is visible at startup + mLayout->addItem(mToField); + mCcField->hide(); + mBccField->hide(); + + mHeader->setLayout(mLayout); + mHeader->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::MinimumExpanding); // Add Subject: field mSubjectLabel = qobject_cast @@ -121,16 +120,12 @@ // Signals for handling the recipient field expanding connect(mToField, SIGNAL(textChanged(const QString &)), - this, SLOT(sendHeaderHeightChanged())); + this, SLOT(fixHeaderFieldHeights())); connect(mCcField, SIGNAL(textChanged(const QString &)), - this, SLOT(sendHeaderHeightChanged())); + this, SLOT(fixHeaderFieldHeights())); connect(mBccField, SIGNAL(textChanged(const QString &)), - this, SLOT(sendHeaderHeightChanged())); - connect(mSubjectEdit, SIGNAL(contentsChanged()), this, SLOT(sendHeaderHeightChanged())); - - // Signal for handling the recipient group box expanding/collapsing - connect(mGroupBoxRecipient, SIGNAL(toggled(bool)), - this, SLOT(groupBoxExpandCollapse())); + this, SLOT(fixHeaderFieldHeights())); + connect(mSubjectEdit, SIGNAL(contentsChanged()), this, SLOT(fixHeaderFieldHeights())); // Signals for handling the attachment list connect(&mAttachmentList->listWidget(), SIGNAL(itemActivated(int)), @@ -142,6 +137,30 @@ } /*! + Show or hide recipient field +*/ +void NmEditorHeader::setFieldVisibility(bool isVisible) +{ + if ( mCcBccFieldVisible != isVisible ) { + mCcBccFieldVisible = isVisible; + if (mCcBccFieldVisible) { + mCcField->show(); + mBccField->show(); + mLayout->addItem(mCcField); + mLayout->addItem(mBccField); + } + else { + mCcField->hide(); + mBccField->hide(); + mLayout->removeItem(mCcField); + mLayout->removeItem(mBccField); + } + + QTimer::singleShot(nmLayoutSystemWaitTimer*2, this, SLOT(fixHeaderFieldHeights())); + } +} + +/*! Function can be used to rescale the header area. */ void NmEditorHeader::rescaleHeader() @@ -155,27 +174,66 @@ int NmEditorHeader::headerHeight() const { qreal toHeight = mToField->height(); + qreal ccHeight = 0; + qreal bccHeight = 0; + if (mCcBccFieldVisible) { + ccHeight = mCcField->height(); + bccHeight = mBccField->height(); + } qreal subjectHeight = mSubjectEdit->geometry().height() + Margin; // When called first time, height is wrongly 'Margin' if (toHeight == Margin) { toHeight = FieldHeightWhenSecondaryFont; + ccHeight = FieldHeightWhenSecondaryFont; + bccHeight = FieldHeightWhenSecondaryFont; subjectHeight = FieldHeightWhenSecondaryFont; } - // Recipient GroupBox - qreal recipientGroupBoxHeight = GroupBoxTitleHeight; - if (!mGroupBoxRecipient->isCollapsed()) { - recipientGroupBoxHeight += - mGroupBoxRecipientContent->geometry().height() + HeaderAreaMarginsTotal; - } - qreal attHeight = 0; if (mAttachmentList && mAttachmentList->count() > 0) { attHeight = mAttachmentList->listWidget().geometry().height(); } - return (int)(toHeight + recipientGroupBoxHeight + subjectHeight + attHeight); + return (int)(toHeight + ccHeight + bccHeight + subjectHeight + attHeight); +} + +/*! + Send signal to inform that one of the recipient fields height has been changed. + */ +void NmEditorHeader::fixHeaderFieldHeights() +{ + // Adjust height of recipient fields + adjustFieldSizeValues(mToField->editor(), mToField->editor()->document()->size().height()); + adjustFieldSizeValues(mCcField->editor(), mCcField->editor()->document()->size().height()); + adjustFieldSizeValues(mBccField->editor(), mBccField->editor()->document()->size().height()); + + // Adjust height of the subject field + if (mSubjectEdit->document()->size().height() > FieldHeightWhenSecondaryFont) { + mSubjectEdit->setPreferredHeight( + mSubjectEdit->document()->size().height() + Margin ); + } + else { + mSubjectEdit->setPreferredHeight( FieldHeightWhenSecondaryFont ); + } + + QTimer::singleShot(nmLayoutSystemWaitTimer*5, this, SLOT(sendHeaderHeightChanged())); +} + + +/*! + Private routine to adjust heights of the recipient fields + */ +void NmEditorHeader::adjustFieldSizeValues( NmRecipientLineEdit *widget, qreal height ) +{ + if (height > FieldHeightWhenSecondaryFont) { + widget->setMaximumHeight( height + Margin ); + widget->setMinimumHeight( height + Margin ); + } + else { + widget->setMaximumHeight( FieldHeightWhenSecondaryFont ); + widget->setMinimumHeight( FieldHeightWhenSecondaryFont ); + } } /*! @@ -183,16 +241,6 @@ */ void NmEditorHeader::sendHeaderHeightChanged() { - // Adjust field heights - mToField->editor()->setPreferredHeight( - mToField->editor()->document()->size().height() + Margin); - mCcField->editor()->setPreferredHeight( - mCcField->editor()->document()->size().height() + Margin); - mBccField->editor()->setPreferredHeight( - mBccField->editor()->document()->size().height() + Margin); - mSubjectEdit->setPreferredHeight( - mSubjectEdit->document()->size().height() + Margin); - int hHeight = headerHeight(); if (mHeaderHeight != hHeight) { mHeaderHeight = hHeight; @@ -201,34 +249,25 @@ } /*! - This slot is called when group box state is changed. Timer is used to give some time - for layout system so that header hight can be recalculated correctly + Return pointer to to edit */ -void NmEditorHeader::groupBoxExpandCollapse() -{ - QTimer::singleShot(nmLayoutSystemWaitTimer, this, SLOT(sendHeaderHeightChanged())); -} - -/*! - Return pointer to to field - */ -NmRecipientLineEdit* NmEditorHeader::toField() const +NmRecipientLineEdit* NmEditorHeader::toEdit() const { return mToField->editor(); } /*! - Return pointer to cc field + Return pointer to cc edit */ -NmRecipientLineEdit* NmEditorHeader::ccField() const +NmRecipientLineEdit* NmEditorHeader::ccEdit() const { return mCcField->editor(); } /*! - Return pointer to bcc field + Return pointer to bcc edit */ -NmRecipientLineEdit* NmEditorHeader::bccField() const +NmRecipientLineEdit* NmEditorHeader::bccEdit() const { return mBccField->editor(); } @@ -236,7 +275,7 @@ /*! Return pointer to subject field */ -NmHtmlLineEdit* NmEditorHeader::subjectField() const +NmHtmlLineEdit* NmEditorHeader::subjectEdit() const { return mSubjectEdit; } @@ -264,39 +303,6 @@ } /*! - This function create content widget for recipient group box. - When AD offers groupBox content widget handling. This function - need to be changed to use AD/docml - */ -HbWidget* NmEditorHeader::createRecipientGroupBoxContentWidget() -{ - mGroupBoxRecipientContent = new HbWidget(); - - // Create layout for the widget - mGbVerticalLayout = new QGraphicsLinearLayout(Qt::Vertical,mGroupBoxRecipientContent); - mCcFieldLayout = new QGraphicsLinearLayout(Qt::Horizontal, mGbVerticalLayout); - mBccFieldLayout = new QGraphicsLinearLayout(Qt::Horizontal, mGbVerticalLayout); - - // Add Cc: field into widget - mCcField = new NmRecipientField(hbTrId("txt_mail_editor_cc")); - if (mCcField) { - mCcField->setObjectName("lineEditCcField"); - mGbVerticalLayout->insertItem(EEditorCcLine, mCcField ); - } - - // Add Bcc: field into widget - mBccField = new NmRecipientField(hbTrId("txt_mail_editor_bcc")); - if (mBccField){ - mBccField->setObjectName("lineEditBccField"); - mGbVerticalLayout->insertItem(EEditorBccLine, mBccField); - } - mGbVerticalLayout->setContentsMargins(0,0,0,0); - - mGroupBoxRecipientContent->setLayout(mGbVerticalLayout); - return mGroupBoxRecipientContent; -} - -/*! Sets the icon for priority */ void NmEditorHeader::setPriority(NmMessagePriority priority) @@ -349,18 +355,7 @@ break; } // Update subject field height because row amount might have been changed. - // Done with delayed timer so that layout system has finished before. - QTimer::singleShot(nmLayoutSystemWaitTimer, this, SLOT(sendHeaderHeightChanged())); - // This second call will set new position for body if subject field height has been changed. - QTimer::singleShot(nmLayoutSystemWaitTimer * 2, this, SLOT(sendHeaderHeightChanged())); -} - -/*! - * \brief Sets the groupbox to be expanded or collapsed. - */ -void NmEditorHeader::setGroupBoxCollapsed( bool collapsed ) -{ - mGroupBoxRecipient->setCollapsed( collapsed ); + QTimer::singleShot(nmLayoutSystemWaitTimer * 3, this, SLOT(fixHeaderFieldHeights())); } /*!