richtextdialog: finalized functionality in dialog

This commit is contained in:
itsmattkc
2020-06-14 01:20:21 +10:00
parent 9a49235e40
commit 49cf9f4458
2 changed files with 66 additions and 20 deletions
+57 -20
View File
@@ -20,7 +20,6 @@
#include "richtext.h"
#include <QDebug>
#include <QDialogButtonBox>
#include <QHBoxLayout>
#include <QPushButton>
@@ -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
+9
View File
@@ -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();