#include "frmquitool.h"
#include "ui_frmquitool.h"
#include "myhelper.h"
#include "iconhelper.h"
frmQUITool::frmQUITool(QWidget *parent) :
QWidget(parent),
ui(new Ui::frmQUITool)
{
ui->setupUi(this);
this->initForm();
}
frmQUITool::~frmQUITool()
{
delete ui;
}
void frmQUITool::initForm()
{
QStringList qss;
qss.append("QFrame#frameIcon>QLabel{");
qss.append("padding:5px;");
qss.append("color:#000000;");
qss.append("border:1px solid #000000;");
qss.append("}");
qss.append("QFrame#frameIcon>QLabel:hover,QFrame#frameIcon>QLabel:focus{");
qss.append("background-color:rgba(255,255,255);");
qss.append("color:#377FC9;");
qss.append("border:1px solid #FF0000;");
qss.append("}");
this->setStyleSheet(qss.join(""));
this->setWindowTitle("QUI皮肤生成器");
this->initIcon();
QList<QPushButton *> btns = ui->frameColor->findChildren<QPushButton *>();
foreach (QPushButton *btn, btns) {
connect(btn, SIGNAL(pressed()), this, SLOT(buttonClick()));
}
QList<QLineEdit *> txts = ui->frameColor->findChildren<QLineEdit *>();
foreach (QLineEdit *txt, txts) {
connect(txt, SIGNAL(textChanged(QString)), this, SLOT(textChange(QString)));
}
}
void frmQUITool::initIcon()
{
int row = 0;
int column = 0;
for (int i = 0; i < 500; i++) {
QLabel *lab = new QLabel;
lab->setAlignment(Qt::AlignCenter);
lab->setFocusPolicy(Qt::StrongFocus);
IconHelper::Instance()->setIcon(lab, 0xf000 + i, 15);
ui->gridLayout->addWidget(lab, row, column);
column++;
if (column % 20 == 0) {
row++;
column = 0;
}
}
}
void frmQUITool::checkColor(QString str)
{
QString flagColorText = "QLabel,QLineEdit,QTextEdit,QPlainTextEdit,QSpinBox,QDoubleSpinBox,QGroupBox,QComboBox,QDateEdit,QTimeEdit,QDateTimeEdit,QTreeView,QListView,QTableView,QTabWidget::pane,QProgressBar{";
int indexColorText = str.indexOf(flagColorText);
if (indexColorText >= 0) {
QString strColorText = str.mid(indexColorText + flagColorText.length() + 8, 7);
setColor(ui->txtColorText, strColorText);
qDebug() << "strColorText" << strColorText;
colorText = strColorText;
}
QString flagColorPanel = ".QPushButton:disabled,QToolButton:disabled,QLineEdit:disabled,QGroupBox:disabled,QComboBox:disabled,QDateEdit:disabled,QTimeEdit:disabled,QDateTimeEdit:disabled,QSpinBox:disabled,QDoubleSpinBox:disabled{";
int indexColorPanel = str.indexOf(flagColorPanel);
if (indexColorPanel >= 0) {
QString strColorPanel = str.mid(indexColorPanel + flagColorPanel.length() + 13, 7);
setColor(ui->txtColorPanel, strColorPanel);
qDebug() << "strColorPanel" << strColorPanel;
colorPanel = strColorPanel;
}
QString flagColorBorder = "QWidget#frmMain,QWidget[form=\"true\"],QLabel[frameShape=\"1\"]{";
int indexColorBorder = str.indexOf(flagColorBorder);
if (indexColorBorder >= 0) {
QString strColorBorder = str.mid(indexColorBorder + flagColorBorder.length() + 19, 7);
setColor(ui->txtColorBorder, strColorBorder);
qDebug() << "strColorBorder" << strColorBorder;
colorBorder = strColorBorder;
}
QString flagColorNormalStart = "background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0";
int indexColorNormalStart = str.indexOf(flagColorNormalStart);
if (indexColorNormalStart >= 0) {
QString strColorNormalStart = str.mid(indexColorNormalStart + flagColorNormalStart.length() + 1, 7);
setColor(ui->txtColorNormalStart, strColorNormalStart);
qDebug() << "strColorNormalStart" << strColorNormalStart;
colorNormalStart = strColorNormalStart;
}
QString flagColorNormalEnd = "background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0";
int indexColorNormalEnd = str.indexOf(flagColorNormalEnd);
if (indexColorNormalEnd >= 0) {
QString strColorNormalEnd = str.mid(indexColorNormalEnd + flagColorNormalEnd.length() + 16, 7);
setColor(ui->txtColorNormalEnd, strColorNormalEnd);
qDebug() << "strColorNormalEnd" << strColorNormalEnd;
colorNormalEnd = strColorNormalEnd;
}
QString flagColorDarkStart = ".QPushButton:hover,QToolButton:hover{";
int indexColorDarkStart = str.indexOf(flagColorDarkStart);
if (indexColorDarkStart >= 0) {
QString strColorDarkStart = str.mid(indexColorDarkStart + flagColorDarkStart.length() + flagColorNormalStart.length() + 3, 7);
setColor(ui->txtColorDarkStart, strColorDarkStart);
qDebug() << "strColorDarkStart" << strColorDarkStart;
colorDarkStart = strColorDarkStart;
}
QString flagColorDarkEnd = ".QPushButton:hover,QToolButton:hover{";
int indexColorDarkEnd = str.indexOf(flagColorDarkEnd);
if (indexColorDarkEnd >= 0) {
QString strColorDarkEnd = str.mid(indexColorDarkEnd + flagColorDarkEnd.length() + flagColorNormalStart.length() + 18, 7);
setColor(ui->txtColorDarkEnd, strColorDarkEnd);
qDebug() << "strColorDarkEnd" << strColorDarkEnd;
colorDarkEnd = strColorDarkEnd;
}
}
void frmQUITool::setStyle(QString str)
{
static QString qss;
if (qss == str) {
return;
}
qss = str;
QString paletteColor = str.mid(20, 7);
qApp->setStyleSheet(str);
qApp->setPalette(QPalette(QColor(paletteColor)));
ui->frameIcon->setStyleSheet(QString("QFrame#frameIcon{border-width:0px;background:%1;}").arg(paletteColor));
ui->txtMain->setText(str);
}
void frmQUITool::setColor(QPushButton *btn, QString strColor)
{
if (!strColor.startsWith("#") || strColor.length() < 7) {
return;
}
btn->setStyleSheet(QString("QPushButton{background-color:%1}").arg(strColor));
if (btn == ui->btnColorText) {
changeQss(colorText, strColor);
} else if (btn == ui->btnColorPanel) {
changeQss(colorPanel, strColor);
} else if (btn == ui->btnColorBorder) {
changeQss(colorBorder, strColor);
} else if (btn == ui->btnColorNormalStart) {
changeQss(colorNormalStart, strColor);
} else if (btn == ui->btnColorNormalEnd) {
changeQss(colorNormalEnd, strColor);
} else if (btn == ui->btnColorDarkStart) {
changeQss(colorDarkStart, strColor);
} else if (btn == ui->btnColorDarkEnd) {
changeQss(colorDarkEnd, strColor);
}
}
void frmQUITool::setColor(QLineEdit *txt, QString strColor)
{
if (!strColor.startsWith("#") || strColor.length() < 7) {
return;
}
txt->setText(strColor);
}
void frmQUITool::changeColor(QLineEdit *txt)
{
QColor color = QColorDialog::getColor();
if (!color.isValid()) {
return;
}
QString strColor = QString("#%1%2%3")
.arg(myHelper::decimalToStrHex(color.red()))
.arg(myHelper::decimalToStrHex(color.green()))
.arg(myHelper::decimalToStrHex(color.blue()));
strColor = strColor.toUpper();
setColor(txt, strColor);
}
void frmQUITool::changeQss(QString &color, QString strColor)
{
if (!color.isEmpty() && color != strColor) {
currentQSS = currentQSS.replace(color, strColor);
color = strColor;
setStyle(currentQSS);
}
}
void frmQUITool::buttonClick()
{
QPushButton *btn = (QPushButton *)sender();
if (btn == ui->btnColorText) {
changeColor(ui->txtColorText);
} else if (btn == ui->btnColorPanel) {
changeColor(ui->txtColorPanel);
} else if (btn == ui->btnColorBorder) {
changeColor(ui->txtColorBorder);
} else if (btn == ui->btnColorNormalStart) {
changeColor(ui->txtColorNormalStart);
} else if (btn == ui->btnColorNormalEnd) {
changeColor(ui->txtColorNormalEnd);
} else if (btn == ui->btnColorDarkStart) {
changeColor(ui->txtColorDarkStart);
} else if (btn == ui->btnColorDarkEnd) {
changeColor(ui->txtColorDarkEnd);
}
}
void frmQUITool::textChange(QString arg1)
{
QLineEdit *txt = (QLineEdit *)sender();
if (txt == ui->txtColorText) {
setColor(ui->btnColorText, arg1);
} else if (txt == ui->txtColorPanel) {
setColor(ui->btnColorPanel, arg1);
} else if (txt == ui->txtColorBorder) {
setColor(ui->btnColorBorder, arg1);
} else if (txt == ui->txtColorNormalStart) {
setColor(ui->btnColo