qt/LedOK/wProgramManager/wEditProgram/wElement/etextattr.cpp
2022-01-04 18:11:48 +08:00

241 lines
8.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "etextattr.h"
#include "ui_etextattr.h"
#include "qstackedwidget.h"
#include <QListWidget>
#include <QMessageBox>
eTextAttr::eTextAttr(const eText::Data &data, QWidget *parent) :
eAttr(parent),
ui(new Ui::eTextAttr)
{
ui->setupUi(this);
//创建动态页面控件
m_pStackedW = new QStackedWidget;
m_pTextFlipAttr = new eTextFlipAttr(data,this);
m_pTextScrollAttr = new eTextScrollAttr(data,this);
m_pTextStaticAttr = new eTextStaticAttr(data,this);
m_pStackedW->addWidget(m_pTextFlipAttr);
m_pStackedW->addWidget(m_pTextScrollAttr);
m_pStackedW->addWidget(m_pTextStaticAttr);
ui->horizontalLayout_playmethod->addWidget(m_pStackedW);
// Play
ui->wPlayStyle->setId(ui->wPlayTurning, eText::Turning);
ui->wPlayStyle->setId(ui->wPlayRolling, eText::Rolling);
ui->wPlayStyle->setId(ui->wPlayStatic, eText::Static);
// Widget
ui->wColorSetting->setId(ui->wTextColor, 0);
ui->wColorSetting->setId(ui->wTextShadowColor, 1);
ui->wColorSetting->setId(ui->wBackgroundColor, 2);
ui->wTextAlignH ->setId(ui->wTextAlignHL, Qt::AlignLeft);
ui->wTextAlignH ->setId(ui->wTextAlignHC, Qt::AlignHCenter);
ui->wTextAlignH ->setId(ui->wTextAlignHR, Qt::AlignRight);
ui->wTextAlignV ->setId(ui->wTextAlignVT, Qt::AlignTop);
ui->wTextAlignV ->setId(ui->wTextAlignVC, Qt::AlignVCenter);
ui->wTextAlignV ->setId(ui->wTextAlignVB, Qt::AlignBottom);
QString str=QString::number(data.iPageCount);
ui->label_pageCount->setText(str);
ui->spinBoxPagePreview->setRange(1,data.iPageCount);
ui->label_2->setVisible(false);
ui->wTextShadowColor->setVisible(false);
connect(ui->wPlayStyle,SIGNAL(buttonClicked(int)),this, SIGNAL(sPlayStyleChanged(int)));
//绑定信号和槽函数
connect(ui->wPlayStyle,SIGNAL(buttonClicked(int)),m_pStackedW, SLOT(setCurrentIndex(int)));
init(data);
ui->wTextEdit->setAcceptRichText(false);
//文本的预览窗口只要接收textEdit控件的textchanged事件保存tohtml的字符串内容即可。
connect(ui->wTextEdit, SIGNAL(textChanged()), this, SLOT(onTextChanged()));
connect(ui->wFontFamily, SIGNAL(currentFontChanged(const QFont &)), this, SLOT(textFamily(const QFont &)));
connect(ui->wFontSize, SIGNAL(valueChanged(int)), this, SLOT(textSize(int)));
connect(ui->wFontBold, SIGNAL(toggled(bool)), this, SLOT(textBold(bool)));
connect(ui->wFontItalics, SIGNAL(toggled(bool)), this, SLOT(textItalic(bool)));
connect(ui->wFontUnderline, SIGNAL(toggled(bool)), this, SLOT(textUnderline(bool)));
connect(ui->wTextColor, SIGNAL(sColorChanged(const QColor &)), this, SLOT(textColor(const QColor &)));
connect(ui->wTextShadowColor, SIGNAL(sColorChanged(const QColor &)), this, SLOT(TextShadowColor(const QColor &)));
connect(ui->wBackgroundColor, SIGNAL(sColorChanged(const QColor &)), this, SLOT(BackgroundColor(const QColor &)));
connect(ui->wTextAlignH, SIGNAL(buttonClicked(int)), this, SIGNAL(sTextHAlignChanged(int)));
connect(ui->wTextAlignV, SIGNAL(buttonClicked(int)), this, SIGNAL(sTextVAlignChanged(int)));
connect(ui->wTextLetterSpacing, SIGNAL(valueChanged(int)), this, SIGNAL(sTextLetterSpacingChanged(int)));
connect(ui->spinBoxPagePreview, SIGNAL(valueChanged(int)), this, SIGNAL(sPageIndexPreview(int)));
connect(ui->wTextLineSpacing, SIGNAL(valueChanged(int)), this, SIGNAL(sTextLineSpacingChanged(int)));
connect(this,SIGNAL(sPageCountChanged(int)),m_pTextFlipAttr,SLOT(OnPageCountChanged(int)));
setFocus();
}
void eTextAttr::OnPageIndexPreview(int index)
{
//int i=index;
Q_UNUSED(index)
}
eTextAttr::~eTextAttr()
{
m_pStackedW->deleteLater() ;
m_pTextFlipAttr->deleteLater() ;
m_pTextScrollAttr->deleteLater() ;
m_pTextStaticAttr->deleteLater() ;
delete ui;
}
void eTextAttr::init(const eText::Data &data)
{
QString strStyleSheet = QString("background-color: #2a2a2a;color: rgba(255,255,255,1)");
ui->wTextEdit->setStyleSheet( strStyleSheet );
ui->wTextEdit->setTextColor(Qt::white);
BackgroundColor(data.cBackground);
ui->wTextColor->setColor(Qt::white);
ui->wTextShadowColor->setColor(Qt::green);
ui->wBackgroundColor->setColor(Qt::transparent);
ui->wTextLetterSpacing->setValue (static_cast<int>(data.wordSpacing));
ui->wFontSize->setValue(16);
ui->wFontSize->setRange(7,500);
unsigned int align = data.opt.alignment();
int h_align = align & Qt::AlignHorizontal_Mask;
switch (h_align) {
case Qt::AlignLeft: ui->wTextAlignHL->setChecked(true); break;
case Qt::AlignHCenter: ui->wTextAlignHC->setChecked(true); break;
case Qt::AlignRight: ui->wTextAlignHR->setChecked(true); break;
default: break;
}
int v_align = align & Qt::AlignVertical_Mask;
switch (v_align) {
case Qt::AlignTop: ui->wTextAlignVT->setChecked(true); break;
case Qt::AlignVCenter: ui->wTextAlignVC->setChecked(true); break;
case Qt::AlignBottom: ui->wTextAlignVB->setChecked(true); break;
default: break;
}
ui->wTextEdit->setText(data.text);
ui->wBackgroundColor->setColor(data.cBackground);
ui->wTextLineSpacing->setValue(data.lineSpacing);
int playStyle = data.playStyle;
switch (playStyle) {
case eText::Turning:
ui->wPlayTurning->setChecked(true);
break;
case eText::Rolling:
ui->wPlayRolling->setChecked(true);
break;
case eText::Static:
ui->wPlayStatic ->setChecked(true);
break;
default: break;
}
m_pStackedW->setCurrentIndex(playStyle);
}
void eTextAttr::onFontFamilySetting(const QFont &font)
{
emit sFontFamilyChanged(font.family());
}
void eTextAttr::onTextChanged()
{
//emit sTextChanged(ui->wTextEdit->toPlainText());
QString aa=ui->wTextEdit->toPlainText();
if(aa.isEmpty())
{
ui->wTextEdit->selectAll();
QTextCharFormat fmt;
fmt.setForeground(Qt::white);
mergeFormatOnWordOrSelection(fmt);
}
emit sTextRickChanged(ui->wTextEdit->toHtml());
}
///////////////////////////////////////富文本
void eTextAttr::textUnderline(bool b)
{
QTextCharFormat fmt;
fmt.setFontUnderline(b);
mergeFormatOnWordOrSelection(fmt);
}
void eTextAttr::textBold(bool b)
{
QTextCharFormat fmt;
fmt.setFontWeight(b ? QFont::Bold : QFont::Normal);
mergeFormatOnWordOrSelection(fmt);
}
void eTextAttr::textItalic(bool b)
{
QTextCharFormat fmt;
fmt.setFontItalic(b);
mergeFormatOnWordOrSelection(fmt);
}
void eTextAttr::textFamily(const QFont &f)
{
QTextCharFormat fmt;
fmt.setFontFamily(f.family());
mergeFormatOnWordOrSelection(fmt);
}
void eTextAttr::textSize(int iFontSize)
{
if (iFontSize > 0) {
QTextCharFormat fmt;
fmt.setFontPointSize(iFontSize);
mergeFormatOnWordOrSelection(fmt);
}
}
void eTextAttr::mergeFormatOnWordOrSelection(const QTextCharFormat &format)
{
QTextCursor cursor = ui->wTextEdit->textCursor();
if (!cursor.hasSelection())
cursor.select(QTextCursor::WordUnderCursor);
cursor.mergeCharFormat(format);
ui->wTextEdit->mergeCurrentCharFormat(format);
}
void eTextAttr::textColor(const QColor & col)
{
if (!col.isValid())
return;
QTextCharFormat fmt;
fmt.setForeground(col);
mergeFormatOnWordOrSelection(fmt);
}
void eTextAttr::TextShadowColor(const QColor & col)
{
if (!col.isValid())
return;
QTextCharFormat fmt;
fmt.setBackground(col);
mergeFormatOnWordOrSelection(fmt);
}
void eTextAttr::BackgroundColor(const QColor & col)
{
if (!col.isValid())
return;
emit sBackgroundColorChanged(col);
// QString strClr = col.name(); // "#RRGGBB"
// if(col.alpha()==0)//&&(col.red()!=0||col.green()!=0||col.blue()!=0))
// {
// QString strStyleSheet = QString("background-color: #000000").arg(strClr);
//// QColor aa;
//// aa.setRgb(col.red(),col.green(),col.blue());
// ui->wTextEdit->setStyleSheet( strStyleSheet );
// emit sBackgroundColorChanged(col);
// }
// else {
// QString strStyleSheet = QString("background-color: #000000").arg(strClr);
// QString strStyleSheet = QString("background-color: %1").arg( strClr );
// ui->wTextEdit->setStyleSheet( strStyleSheet );
// emit sBackgroundColorChanged(col);
// }
}
void eTextAttr::OnPageCountChanged(int icount)
{
QString str=QString::number(icount);
ui->label_pageCount->setText(str);
ui->spinBoxPagePreview->setRange(1,icount);
ui->spinBoxPagePreview->setValue(1);
emit sPageCountChanged(icount);
}