richtextdialog: finalized functionality in dialog
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user