From a0fb1981b4db08a2d82fdbb1e5e21f3a761008f3 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Mon, 16 Nov 2020 12:27:59 +1100 Subject: [PATCH] multi-line edit for text in paramview --- .../nodeparamview/nodeparamviewrichtext.cpp | 12 ++++++--- .../nodeparamview/nodeparamviewrichtext.h | 27 +++++++++++++------ 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/app/widget/nodeparamview/nodeparamviewrichtext.cpp b/app/widget/nodeparamview/nodeparamviewrichtext.cpp index 476c7cc76..9f30be45d 100644 --- a/app/widget/nodeparamview/nodeparamviewrichtext.cpp +++ b/app/widget/nodeparamview/nodeparamviewrichtext.cpp @@ -34,19 +34,20 @@ NodeParamViewRichText::NodeParamViewRichText(QWidget *parent) : QHBoxLayout* layout = new QHBoxLayout(this); layout->setMargin(0); - line_edit_ = new QLineEdit(); - connect(line_edit_, &QLineEdit::textEdited, this, &NodeParamViewRichText::textEdited); + line_edit_ = new QTextEdit(); + connect(line_edit_, &QTextEdit::textChanged, this, &NodeParamViewRichText::InnerWidgetTextChanged); layout->addWidget(line_edit_); QPushButton* edit_btn = new QPushButton(); edit_btn->setIcon(icon::ToolEdit); + edit_btn->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Expanding); layout->addWidget(edit_btn); connect(edit_btn, &QPushButton::clicked, this, &NodeParamViewRichText::ShowRichTextDialog); } void NodeParamViewRichText::ShowRichTextDialog() { - RichTextDialog d(line_edit_->text(), this); + RichTextDialog d(this->text(), this); if (d.exec() == QDialog::Accepted) { QString s = d.text(); @@ -55,4 +56,9 @@ void NodeParamViewRichText::ShowRichTextDialog() } } +void NodeParamViewRichText::InnerWidgetTextChanged() +{ + emit textEdited(this->text()); +} + OLIVE_NAMESPACE_EXIT diff --git a/app/widget/nodeparamview/nodeparamviewrichtext.h b/app/widget/nodeparamview/nodeparamviewrichtext.h index 974a742b4..9f09576f3 100644 --- a/app/widget/nodeparamview/nodeparamviewrichtext.h +++ b/app/widget/nodeparamview/nodeparamviewrichtext.h @@ -21,7 +21,7 @@ #ifndef NODEPARAMVIEWRICHTEXT_H #define NODEPARAMVIEWRICHTEXT_H -#include +#include #include #include "common/define.h" @@ -36,31 +36,42 @@ public: QString text() const { - return line_edit_->text(); + return line_edit_->toPlainText().replace('\n', QStringLiteral("
")); } public slots: - void setText(const QString &s) + void setText(QString s) { - line_edit_->setText(s); + line_edit_->blockSignals(true); + line_edit_->setPlainText(s.replace(QStringLiteral("
"), QStringLiteral("\n"))); + line_edit_->blockSignals(false); } void setTextPreservingCursor(const QString &s) { - int cursor_pos = line_edit_->cursorPosition(); - line_edit_->setText(s); - line_edit_->setCursorPosition(cursor_pos); + // Save cursor position + int cursor_pos = line_edit_->textCursor().position(); + + // Set text + this->setText(s); + + // Get new text cursor + QTextCursor c = line_edit_->textCursor(); + c.setPosition(cursor_pos); + line_edit_->setTextCursor(c); } signals: void textEdited(const QString &); private: - QLineEdit* line_edit_; + QTextEdit* line_edit_; private slots: void ShowRichTextDialog(); + void InnerWidgetTextChanged(); + }; OLIVE_NAMESPACE_EXIT