241 lines
8.7 KiB
C++
241 lines
8.7 KiB
C++
|
#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);
|
|||
|
}
|