From 49cf9f4458424e63d2d69205a5cdb697fb615ab4 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sun, 14 Jun 2020 01:20:21 +1000 Subject: [PATCH] richtextdialog: finalized functionality in dialog --- app/dialog/richtext/richtext.cpp | 77 +++++++++++++++++++++++--------- app/dialog/richtext/richtext.h | 9 ++++ 2 files changed, 66 insertions(+), 20 deletions(-) diff --git a/app/dialog/richtext/richtext.cpp b/app/dialog/richtext/richtext.cpp index ebd58ff2c..79c28a355 100644 --- a/app/dialog/richtext/richtext.cpp +++ b/app/dialog/richtext/richtext.cpp @@ -20,7 +20,6 @@ #include "richtext.h" -#include #include #include #include @@ -38,27 +37,38 @@ RichTextDialog::RichTextDialog(const QString &start, QWidget* parent) : // Create toolbar QHBoxLayout* toolbar_layout = new QHBoxLayout(); - bold_btn_ = new QPushButton(QStringLiteral("B")); - bold_btn_->setCheckable(true); + bold_btn_ = CreateToolbarButton(tr("B"), tr("Bold")); toolbar_layout->addWidget(bold_btn_); - italic_btn_ = new QPushButton(QStringLiteral("I")); - italic_btn_->setCheckable(true); + italic_btn_ = CreateToolbarButton(tr("I"), tr("Italic")); toolbar_layout->addWidget(italic_btn_); - underline_btn_ = new QPushButton(QStringLiteral("U")); - underline_btn_->setCheckable(true); + underline_btn_ = CreateToolbarButton(tr("U"), tr("Underline")); toolbar_layout->addWidget(underline_btn_); + strikeout_btn_ = CreateToolbarButton(tr("S"), tr("Strikethrough")); + toolbar_layout->addWidget(strikeout_btn_); font_combo_ = new QFontComboBox(); + font_combo_->setToolTip(tr("Font Family")); toolbar_layout->addWidget(font_combo_); size_slider_ = new FloatSlider(); size_slider_->SetMinimum(0.1); + size_slider_->setToolTip(tr("Font Size")); toolbar_layout->addWidget(size_slider_); toolbar_layout->addStretch(); + left_align_btn_ = CreateToolbarButton(tr("L"), tr("Left Align")); + toolbar_layout->addWidget(left_align_btn_); + center_align_btn_ = CreateToolbarButton(tr("C"), tr("Center Align")); + toolbar_layout->addWidget(center_align_btn_); + right_align_btn_ = CreateToolbarButton(tr("R"), tr("Right Align")); + toolbar_layout->addWidget(right_align_btn_); + justify_align_btn_ = CreateToolbarButton(tr("J"), tr("Justify Align")); + toolbar_layout->addWidget(justify_align_btn_); + layout->addLayout(toolbar_layout); // Create text edit widget text_edit_ = new QTextEdit(); + text_edit_->setWordWrapMode(QTextOption::NoWrap); connect(text_edit_, &QTextEdit::cursorPositionChanged, this, &RichTextDialog::UpdateButtons); text_edit_->document()->setHtml(start); layout->addWidget(text_edit_); @@ -75,35 +85,62 @@ RichTextDialog::RichTextDialog(const QString &start, QWidget* parent) : }); connect(italic_btn_, &QPushButton::clicked, text_edit_, &QTextEdit::setFontItalic); connect(underline_btn_, &QPushButton::clicked, text_edit_, &QTextEdit::setFontUnderline); + connect(strikeout_btn_, &QPushButton::clicked, this, [this](bool e){ + QFont current_font = text_edit_->currentFont(); + current_font.setStrikeOut(e); + text_edit_->setCurrentFont(current_font); + }); connect(size_slider_, &FloatSlider::ValueChanged, text_edit_, &QTextEdit::setFontPointSize); + connect(left_align_btn_, &QPushButton::clicked, this, [this](){ + text_edit_->setAlignment(Qt::AlignLeft); + UpdateButtons(); + }); + connect(center_align_btn_, &QPushButton::clicked, this, [this](){ + text_edit_->setAlignment(Qt::AlignCenter); + UpdateButtons(); + }); + connect(right_align_btn_, &QPushButton::clicked, this, [this](){ + text_edit_->setAlignment(Qt::AlignRight); + UpdateButtons(); + }); + connect(justify_align_btn_, &QPushButton::clicked, this, [this](){ + text_edit_->setAlignment(Qt::AlignJustify); + UpdateButtons(); + }); + connect(font_combo_, &QFontComboBox::currentTextChanged, this, [this](const QString& s){ - QTextCharFormat fmt; - fmt.setFontFamily(s); - - QTextCursor cursor = text_edit_->textCursor(); - if (!cursor.hasSelection()) - cursor.select(QTextCursor::WordUnderCursor); - cursor.mergeCharFormat(fmt); - text_edit_->mergeCurrentCharFormat(fmt); + text_edit_->setFontFamily(s); }); } +QPushButton *RichTextDialog::CreateToolbarButton(const QString& label, const QString& tooltip) +{ + QPushButton* btn = new QPushButton(label); + btn->setCheckable(true); + btn->setToolTip(tooltip); + btn->setFixedWidth(btn->sizeHint().height()); + return btn; +} + void RichTextDialog::UpdateButtons() { bold_btn_->setChecked(text_edit_->fontWeight() > QFont::Normal); italic_btn_->setChecked(text_edit_->fontItalic()); underline_btn_->setChecked(text_edit_->fontUnderline()); + strikeout_btn_->setChecked(text_edit_->currentFont().strikeOut()); + // Update font family font_combo_->blockSignals(true); - QString font_family = text_edit_->fontFamily(); - if (font_family.isEmpty()) { - font_family = QFont().family(); - } - font_combo_->setCurrentFont(font_family); + font_combo_->setCurrentFont(text_edit_->currentFont().family()); font_combo_->blockSignals(false); size_slider_->SetValue(text_edit_->fontPointSize()); + + left_align_btn_->setChecked(text_edit_->alignment() == Qt::AlignLeft); + center_align_btn_->setChecked(text_edit_->alignment() == Qt::AlignCenter); + right_align_btn_->setChecked(text_edit_->alignment() == Qt::AlignRight); + justify_align_btn_->setChecked(text_edit_->alignment() == Qt::AlignJustify); } OLIVE_NAMESPACE_EXIT diff --git a/app/dialog/richtext/richtext.h b/app/dialog/richtext/richtext.h index 746dbaf0a..7e2bbc252 100644 --- a/app/dialog/richtext/richtext.h +++ b/app/dialog/richtext/richtext.h @@ -42,13 +42,22 @@ public: } private: + QPushButton* CreateToolbarButton(const QString &label, const QString &tooltip); + + QFontDatabase font_db_; + QTextEdit* text_edit_; QPushButton* bold_btn_; QPushButton* italic_btn_; QPushButton* underline_btn_; + QPushButton* strikeout_btn_; QFontComboBox* font_combo_; FloatSlider* size_slider_; + QPushButton* left_align_btn_; + QPushButton* center_align_btn_; + QPushButton* right_align_btn_; + QPushButton* justify_align_btn_; private slots: void UpdateButtons();