diff --git a/src/gui/UBTeacherGuideWidget.cpp b/src/gui/UBTeacherGuideWidget.cpp index 09031a0c..afb982b5 100644 --- a/src/gui/UBTeacherGuideWidget.cpp +++ b/src/gui/UBTeacherGuideWidget.cpp @@ -1025,14 +1025,18 @@ void UBTeacherGuidePageZeroWidget::switchToMode(tUBTGZeroPageMode mode) QString inputStyleSheet("QTextEdit { background: white; border-radius: 10px; border: 2px;}"); mpModePushButton->hide(); mpSessionTitle->setReadOnly(false); + mpSessionTitle->managePlaceholder(true); mpSessionTitle->setStyleSheet(inputStyleSheet); QFont titleFont(QApplication::font().family(), 11, -1); mpSessionTitle->document()->setDefaultFont(titleFont); mpAuthors->setReadOnly(false); + mpAuthors->managePlaceholder(false); mpAuthors->setStyleSheet(inputStyleSheet); mpObjectives->setReadOnly(false); + mpObjectives->managePlaceholder(false); mpObjectives->setStyleSheet(inputStyleSheet); mpKeywords->setReadOnly(false); + mpKeywords->managePlaceholder(false); mpKeywords->setStyleSheet(inputStyleSheet); mpSchoolLevelValueLabel->hide(); mpSchoolLevelBox->show(); diff --git a/src/gui/UBTeacherGuideWidgetsTools.cpp b/src/gui/UBTeacherGuideWidgetsTools.cpp index 4456b243..c67b09a8 100644 --- a/src/gui/UBTeacherGuideWidgetsTools.cpp +++ b/src/gui/UBTeacherGuideWidgetsTools.cpp @@ -24,6 +24,9 @@ #include #include #include +#include +#include +#include #include "UBTeacherGuideWidgetsTools.h" @@ -148,30 +151,10 @@ void UBTGAdaptableText::setPlaceHolderText(QString text) setPlainText(mPlaceHolderText); } -void UBTGAdaptableText::keyPressEvent(QKeyEvent* e) -{ - if(isReadOnly()){ - // this is important if you set a placeholder. In this case even if the text field is readonly the - // keypressed event came here. So if you don't ignore it you'll have a flick on the text zone - e->ignore(); - return; - } - - if(toPlainText() == mPlaceHolderText){ - setPlainText(""); - } - setTextColor(QColor(Qt::black)); - QTextEdit::keyPressEvent(e); -} - void UBTGAdaptableText::keyReleaseEvent(QKeyEvent* e) { QTextEdit::keyReleaseEvent(e); - if(toPlainText().isEmpty()){ - setTextColor(QColor(Qt::lightGray)); - setPlainText(mPlaceHolderText); - } if(mMaximumLength && toPlainText().length()>mMaximumLength){ setPlainText(toPlainText().left(mMaximumLength)); QTextCursor tc(document()); @@ -183,8 +166,10 @@ void UBTGAdaptableText::keyReleaseEvent(QKeyEvent* e) void UBTGAdaptableText::showEvent(QShowEvent* e) { Q_UNUSED(e); - if(!mIsUpdatingSize && mHasPlaceHolder && toPlainText().isEmpty()) - setPlainText(mPlaceHolderText); + if(!mIsUpdatingSize && mHasPlaceHolder && toPlainText().isEmpty() && !isReadOnly()){ + setTextColor(QColor(Qt::lightGray)); + setPlainText(mPlaceHolderText); + } else // If the teacherguide is collapsed, don't updated the size. Or set the size as the expanded size onTextChanged(); @@ -201,19 +186,18 @@ QString UBTGAdaptableText::text() void UBTGAdaptableText::onTextChanged() { - //qDebug() << ">> onTextChanged CALLED!"; qreal documentSize = document()->size().height(); - //qDebug() << ">> documentSize: " << documentSize << ", height: " << height(); if(height() == documentSize + mBottomMargin){ return; } mIsUpdatingSize = true; - if(documentSize < mMinimumHeight) - setFixedHeight(mMinimumHeight); - else - setFixedHeight(documentSize+mBottomMargin); + if(documentSize < mMinimumHeight){ + setFixedHeight(mMinimumHeight); + }else{ + setFixedHeight(documentSize+mBottomMargin); + } updateGeometry(); //to trig a resize on the tree widget item @@ -224,8 +208,6 @@ void UBTGAdaptableText::onTextChanged() setFocus(); } mIsUpdatingSize = false; - - } void UBTGAdaptableText::setInitialText(const QString& text) @@ -248,6 +230,43 @@ void UBTGAdaptableText::bottomMargin(int newValue) onTextChanged(); } +void UBTGAdaptableText::focusInEvent(QFocusEvent* e){ + if(isReadOnly()){ + e->ignore(); + } + managePlaceholder(true); + QTextEdit::focusInEvent(e); +} + +void UBTGAdaptableText::focusOutEvent(QFocusEvent* e){ + managePlaceholder(false); + QTextEdit::focusOutEvent(e); +} + +void UBTGAdaptableText::managePlaceholder(bool focus){ + if(focus){ + if(toPlainText() == mPlaceHolderText){ + setTextColor(QColor(Qt::black)); + setPlainText(""); + } + setCursorToTheEnd(); + }else{ + if(toPlainText().isEmpty()){ + setTextColor(QColor(Qt::lightGray)); + setPlainText(mPlaceHolderText); + } + } +} + +void UBTGAdaptableText::setCursorToTheEnd(){ + QTextDocument* doc = document(); + if(NULL != doc){ + QTextBlock block = doc->lastBlock(); + QTextCursor cursor(doc); + cursor.setPosition(block.position() + block.length() - 1); + setTextCursor(cursor); + } +} /*************************************************************************** * class UBTGDraggableWeb * diff --git a/src/gui/UBTeacherGuideWidgetsTools.h b/src/gui/UBTeacherGuideWidgetsTools.h index 2f87ccfd..cd37fe2d 100644 --- a/src/gui/UBTeacherGuideWidgetsTools.h +++ b/src/gui/UBTeacherGuideWidgetsTools.h @@ -26,6 +26,8 @@ #include #include #include +#include +#include #include "customWidgets/UBMediaWidget.h" @@ -98,16 +100,19 @@ public: QString text(); void setInitialText(const QString& text); void setMaximumLength(int length); + void managePlaceholder(bool focus); public slots: void onTextChanged(); protected: - void keyPressEvent(QKeyEvent* e); void keyReleaseEvent(QKeyEvent* e); void showEvent(QShowEvent* e); + void focusInEvent(QFocusEvent* e); + void focusOutEvent(QFocusEvent* e); private: + void setCursorToTheEnd(); int mBottomMargin; QTreeWidgetItem* mpTreeWidgetItem; int mMinimumHeight;