From 09d9caf4387d0bed5d0162d8c3c3fe536adf5baf Mon Sep 17 00:00:00 2001 From: Tomas Pavlicek Date: Sat, 14 Aug 2021 10:05:00 +0200 Subject: [PATCH] TechDraw - Edit annotations via double-click --- src/Gui/Widgets.h | 2 +- src/Mod/TechDraw/Gui/QGIRichAnno.cpp | 34 ++++++++++++++ src/Mod/TechDraw/Gui/QGIRichAnno.h | 2 + src/Mod/TechDraw/Gui/QGIViewAnnotation.cpp | 52 ++++++++++++++++++++++ src/Mod/TechDraw/Gui/QGIViewAnnotation.h | 2 + src/Mod/TechDraw/Gui/mrichtextedit.cpp | 9 ++++ src/Mod/TechDraw/Gui/mrichtextedit.h | 1 + 7 files changed, 101 insertions(+), 1 deletion(-) diff --git a/src/Gui/Widgets.h b/src/Gui/Widgets.h index 3f868697cf..86baff6a51 100644 --- a/src/Gui/Widgets.h +++ b/src/Gui/Widgets.h @@ -373,7 +373,7 @@ private: // ---------------------------------------------------------------------- -class PropertyListEditor : public QPlainTextEdit +class GuiExport PropertyListEditor : public QPlainTextEdit { Q_OBJECT diff --git a/src/Mod/TechDraw/Gui/QGIRichAnno.cpp b/src/Mod/TechDraw/Gui/QGIRichAnno.cpp index 5920005bb4..d5e0c5286c 100644 --- a/src/Mod/TechDraw/Gui/QGIRichAnno.cpp +++ b/src/Mod/TechDraw/Gui/QGIRichAnno.cpp @@ -43,6 +43,7 @@ #include #include #include +#include # include @@ -80,6 +81,7 @@ #include "QGCustomRect.h" #include "QGIRichAnno.h" +#include "mrichtextedit.h" using namespace TechDraw; using namespace TechDrawGui; @@ -360,4 +362,36 @@ double QGIRichAnno::prefPointSize(void) return ptsSize; } +void QGIRichAnno::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event) { + Q_UNUSED(event); + + TechDraw::DrawRichAnno *annotation = dynamic_cast(getViewObject()); + if (annotation == nullptr) { + return; + } + + QString text = QString::fromUtf8(annotation->AnnoText.getValue()); + + QDialog dialog(0); + dialog.setWindowTitle(QObject::tr("Rich text editor")); + dialog.setMinimumWidth(400); + dialog.setMinimumHeight(400); + + MRichTextEdit richEdit(&dialog, text); + QGridLayout gridLayout(&dialog); + gridLayout.addWidget(&richEdit, 0, 0, 1, 1); + + connect(&richEdit, SIGNAL(saveText(QString)), &dialog, SLOT(accept())); + connect(&richEdit, SIGNAL(editorFinished(void)), &dialog, SLOT(reject())); + + if (dialog.exec()) { + QString newText = richEdit.toHtml(); + if (newText != text) { + App::GetApplication().setActiveTransaction("Set Rich Annotation Text"); + annotation->AnnoText.setValue(newText.toStdString()); + App::GetApplication().closeActiveTransaction(); + } + } +} + #include diff --git a/src/Mod/TechDraw/Gui/QGIRichAnno.h b/src/Mod/TechDraw/Gui/QGIRichAnno.h index cc96b1a18e..552793cf9c 100644 --- a/src/Mod/TechDraw/Gui/QGIRichAnno.h +++ b/src/Mod/TechDraw/Gui/QGIRichAnno.h @@ -98,6 +98,8 @@ protected: double prefPointSize(void); QFont prefFont(void); + virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override; + bool m_isExporting; QGCustomText* m_text; bool m_hasHover; diff --git a/src/Mod/TechDraw/Gui/QGIViewAnnotation.cpp b/src/Mod/TechDraw/Gui/QGIViewAnnotation.cpp index 5af8a8768f..7c88c270cc 100644 --- a/src/Mod/TechDraw/Gui/QGIViewAnnotation.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewAnnotation.cpp @@ -52,6 +52,8 @@ #include #include #include +#include + #include #include "Rez.h" @@ -189,4 +191,54 @@ void QGIViewAnnotation::rotateView(void) m_textItem->setRotation(-rot); } +void QGIViewAnnotation::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event) +{ + Q_UNUSED(event); + TechDraw::DrawViewAnnotation *annotation = dynamic_cast(getViewObject()); + if (annotation == nullptr) { + return; + } + + const std::vector &values = annotation->Text.getValues(); + QString text; + if (values.size() > 0) { + text = QString::fromUtf8(Base::Tools::escapedUnicodeToUtf8(values[0]).c_str()); + + for (unsigned int i = 1; i < values.size(); ++i) { + text += QChar::fromLatin1('\n'); + text += QString::fromUtf8(Base::Tools::escapedUnicodeToUtf8(values[i]).c_str()); + } + } + + QDialog dialog(0); + dialog.setWindowTitle(tr("Text")); + + Gui::PropertyListEditor editor(&dialog); + editor.setPlainText(text); + + QDialogButtonBox buttonBox(&dialog); + buttonBox.setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + + QVBoxLayout boxLayout(&dialog); + boxLayout.addWidget(&editor); + boxLayout.addWidget(&buttonBox); + + connect(&buttonBox, SIGNAL(accepted()), &dialog, SLOT(accept())); + connect(&buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject())); + if (dialog.exec() == QDialog::Accepted) { + QString newText = editor.toPlainText(); + if (newText != text) { + QStringList list = newText.split(QChar::fromLatin1('\n')); + std::vector newValues; + + for (int i = 0; i < list.size(); ++i) { + newValues.push_back(Base::Tools::escapedUnicodeFromUtf8(list[i].toStdString().c_str())); + } + + App::GetApplication().setActiveTransaction("Set Annotation Text"); + annotation->Text.setValues(newValues); + App::GetApplication().closeActiveTransaction(); + } + } +} diff --git a/src/Mod/TechDraw/Gui/QGIViewAnnotation.h b/src/Mod/TechDraw/Gui/QGIViewAnnotation.h index d45846f017..0552d99125 100644 --- a/src/Mod/TechDraw/Gui/QGIViewAnnotation.h +++ b/src/Mod/TechDraw/Gui/QGIViewAnnotation.h @@ -56,6 +56,8 @@ protected: void drawAnnotation(); QVariant itemChange(GraphicsItemChange change, const QVariant &value) override; + virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override; + QGCustomText *m_textItem; QColor m_colNormal; QColor m_colSel; diff --git a/src/Mod/TechDraw/Gui/mrichtextedit.cpp b/src/Mod/TechDraw/Gui/mrichtextedit.cpp index 630ae0f6d4..7cc23e368c 100644 --- a/src/Mod/TechDraw/Gui/mrichtextedit.cpp +++ b/src/Mod/TechDraw/Gui/mrichtextedit.cpp @@ -317,6 +317,15 @@ void MRichTextEdit::focusInEvent(QFocusEvent *) { f_textedit->setFocus(Qt::TabFocusReason); } +void MRichTextEdit::keyPressEvent(QKeyEvent *event) { + if (event->key() == Qt::Key_Return && event->modifiers() == Qt::ControlModifier) { + onSave(); + return; + } + + QWidget::keyPressEvent(event); +} + void MRichTextEdit::textUnderline() { QTextCharFormat fmt; diff --git a/src/Mod/TechDraw/Gui/mrichtextedit.h b/src/Mod/TechDraw/Gui/mrichtextedit.h index 4e5a31cc13..28a8bf5859 100644 --- a/src/Mod/TechDraw/Gui/mrichtextedit.h +++ b/src/Mod/TechDraw/Gui/mrichtextedit.h @@ -94,6 +94,7 @@ Q_SIGNALS: void list(bool checked, QTextListFormat::Style style); void indent(int delta); void focusInEvent(QFocusEvent *event); + void keyPressEvent(QKeyEvent *event); bool hasMultipleSizes(void); void addFontSize(QString fs);