303 lines
10 KiB
C++
303 lines
10 KiB
C++
#include "HKHolderCreater.h"
|
|
#include <QTextCodec>
|
|
#include <QTextStream>
|
|
#include <QDebug>
|
|
#include <QMessageBox>
|
|
#include <QDateTime>
|
|
|
|
#define HK_BG_WIDTH 1722
|
|
#define HK_BG_HEIGH 2435
|
|
|
|
#define MAX_COL_IN_ROW 7
|
|
#define MAX_LABEL_IN_PAPER 14
|
|
|
|
static qreal row_x_gap = 212;
|
|
static qreal row_y_offset[] = { 30, 1065 };
|
|
|
|
HKHolderCreater::HKHolderCreater() : INameCreater()
|
|
{
|
|
label_bg_map["b"] = ":/NameCreater/resource/hk_holder/b.jpg";
|
|
label_bg_map["b2"] = ":/NameCreater/resource/hk_holder/b2.jpg";
|
|
label_bg_map["g"] = ":/NameCreater/resource/hk_holder/g.jpg";
|
|
label_bg_map["g2"] = ":/NameCreater/resource/hk_holder/g2.jpg";
|
|
label_bg_map["o"] = ":/NameCreater/resource/hk_holder/o.jpg";
|
|
label_bg_map["p"] = ":/NameCreater/resource/hk_holder/p.jpg";
|
|
label_bg_map["r"] = ":/NameCreater/resource/hk_holder/r.jpg";
|
|
label_bg_map["y"] = ":/NameCreater/resource/hk_holder/y.jpg";
|
|
|
|
}
|
|
|
|
HKHolderCreater::~HKHolderCreater()
|
|
{
|
|
}
|
|
|
|
QList<NameInfo_t> HKHolderCreater::getNameByFileContent(Name_Type_e type, const QByteArray& conetent)
|
|
{
|
|
QList<NameInfo_t> nameList;
|
|
QTextCodec* tc = QTextCodec::codecForName("Big5");
|
|
QString codec = tc->toUnicode(conetent.data());
|
|
QTextStream stream(&codec);
|
|
|
|
int row = 0;
|
|
while (!stream.atEnd())
|
|
{
|
|
NameInfo_t info;
|
|
QString line = stream.readLine();
|
|
QString name_tc = line;
|
|
QStringList csvList = name_tc.split(',');
|
|
|
|
QString name, eng_name, bg_type;
|
|
|
|
switch (type) {
|
|
case Name_zh:
|
|
name = csvList.at(0);
|
|
bg_type = csvList.at(1);
|
|
|
|
break;
|
|
case Name_zh_eng:
|
|
/*name = csvList.at(0);
|
|
eng_name = csvList.at(1);
|
|
bg_type = csvList.at(2);*/
|
|
|
|
break;
|
|
case Name_eng:
|
|
//eng_name = csvList.at(0);
|
|
//bg_type = csvList.at(1);
|
|
default:
|
|
break;
|
|
|
|
}
|
|
|
|
qDebug() << "row :" << row << " " << name << ", eng: " << eng_name << ", bg_type: " << bg_type;
|
|
|
|
if (name.compare("name") == 0 || eng_name.compare("eng_name") == 0) {
|
|
//pass first line
|
|
continue;
|
|
}
|
|
|
|
info.name1 = name;
|
|
info.name_eng = eng_name;
|
|
info.name2 = bg_type;
|
|
|
|
nameList.append(info);
|
|
|
|
row++;
|
|
}
|
|
return nameList;
|
|
}
|
|
|
|
void HKHolderCreater::generaImageFromCSV(Name_Type_e type, const QString& filename, const QByteArray& filecontent, const QFont& font, const QColor& font_color)
|
|
{
|
|
int export_times = 0;
|
|
|
|
|
|
QList<NameInfo_t> nameList = getNameByFileContent(type, filecontent);
|
|
if (nameList.isEmpty()) {
|
|
QMessageBox msgBox;
|
|
msgBox.setText(QString("Name is empty ! ").append(filename));
|
|
msgBox.exec();
|
|
}
|
|
|
|
QGraphicsScene scene;
|
|
scene.setBackgroundBrush(QBrush(QColor(255, 255, 255)));
|
|
QGraphicsView view(&scene);
|
|
|
|
switch (type)
|
|
|
|
{
|
|
case Name_zh:
|
|
for (int idx = 0; idx < nameList.length(); idx++) {
|
|
|
|
if ((idx % MAX_LABEL_IN_PAPER) == 0) {
|
|
|
|
QGraphicsRectItem* bg_item = new QGraphicsRectItem(0, 0, HK_BG_WIDTH, HK_BG_HEIGH);
|
|
bg_item->setBrush(QBrush(QColor(255, 255, 255)));
|
|
//QGraphicsPixmapItem* bg_item = QGraphicsPixmapItem(QPixmap(BG_SMAPLE_PATH));
|
|
scene.addItem(bg_item);
|
|
|
|
}
|
|
|
|
int row_idx, col_idx;
|
|
row_idx = idx / MAX_COL_IN_ROW;
|
|
col_idx = idx % MAX_COL_IN_ROW;
|
|
|
|
NameInfo_t name_info = nameList.at(idx);
|
|
QString label_rel_path = label_bg_map[name_info.name2];
|
|
QGraphicsPixmapItem* label_item = new QGraphicsPixmapItem(QPixmap(label_rel_path));
|
|
label_item->setPos(qreal(90 + col_idx* row_x_gap), row_y_offset[row_idx]);
|
|
label_item->setOpacity(1);
|
|
scene.addItem(label_item);
|
|
|
|
/*int chrismas_y_offset = 0;
|
|
if (name_info.name2.compare("co") == 0 || name_info.name2.compare("ol") == 0 ||
|
|
name_info.name2.compare("st") == 0 || name_info.name2.compare("sn") == 0) {
|
|
chrismas_y_offset = 30;
|
|
}
|
|
|
|
for (int i = 0; i < 2; i++) {
|
|
int name_word_len = name_info.name1.length();
|
|
qreal two_word_y = (name_word_len == 2) ? NAME_TWO_WORD_OFFSET / 2 : 0;
|
|
qreal offset_y = (name_word_len == 2) ? NAME_TWO_WORD_OFFSET : NAME_THREE_WORD_OFFSET;
|
|
|
|
for (int w = 0; w < name_word_len; w++) {
|
|
QGraphicsTextItem* word_item = new QGraphicsTextItem(name_info.name1.at(w));
|
|
word_item->setFont(font);
|
|
word_item->setDefaultTextColor(font_color);
|
|
if (i == 0) {
|
|
word_item->setPos(label_item->x() + NAME_OFFSET_START.x(), label_item->y() + NAME_OFFSET_START.y() + two_word_y + chrismas_y_offset + offset_y * w);
|
|
}
|
|
else {
|
|
word_item->setTransform(QTransform().fromScale(-1, -1));
|
|
word_item->setPos(label_item->x() + NAME_OFFSET_REVERSE_START.x(), label_item->y() + NAME_OFFSET_REVERSE_START.y() - two_word_y - chrismas_y_offset - offset_y * w);
|
|
}
|
|
scene.addItem(word_item);
|
|
}
|
|
|
|
}*/
|
|
|
|
if ((idx % MAX_LABEL_IN_PAPER) == (MAX_LABEL_IN_PAPER - 1) || idx == nameList.count() - 1) {
|
|
QString date_str = QDateTime::currentDateTime().toString("MMddhhmm");
|
|
QString file_name = QString("Birthday_%2_%1.jpg").arg(QString::number(export_times + 1), date_str);
|
|
saveToImage(file_name, &scene);
|
|
export_times++;
|
|
|
|
scene.clear();
|
|
}
|
|
}
|
|
break;
|
|
/*
|
|
case Name_eng:
|
|
for (int idx = 0; idx < nameList.length(); idx++) {
|
|
|
|
if ((idx % MAX_LABEL_IN_PAPER) == 0) {
|
|
|
|
QGraphicsRectItem* bg_item = new QGraphicsRectItem(0, 0, BG_WIDTH, BG_HEIGHT);
|
|
bg_item->setBrush(QBrush(QColor(255, 255, 255)));
|
|
//QGraphicsPixmapItem* bg_item = QGraphicsPixmapItem(QPixmap(BG_SMAPLE_PATH));
|
|
scene.addItem(bg_item);
|
|
|
|
}
|
|
NameInfo_t name_info = nameList.at(idx);
|
|
int col_index = idx % MAX_LABEL_IN_PAPER;
|
|
QString label_rel_path = label_bg_map[name_info.name2];
|
|
QGraphicsPixmapItem* label_item = new QGraphicsPixmapItem(QPixmap(label_rel_path));
|
|
label_item->setPos(int(LABEL_POS_START.x() + LABEL_POS_X_OFFSET * col_index), int(LABEL_POS_START.y()));
|
|
label_item->setOpacity(1);
|
|
scene.addItem(label_item);
|
|
|
|
int chrismas_y_offset = 0;
|
|
if (name_info.name2.compare("co") == 0 || name_info.name2.compare("ol") == 0 ||
|
|
name_info.name2.compare("st") == 0 || name_info.name2.compare("sn") == 0) {
|
|
chrismas_y_offset = 30;
|
|
}
|
|
|
|
|
|
QFont _new_font = QFont(EnglisthFont());
|
|
_new_font.setWeight(QFont::ExtraLight);
|
|
int _new_size = getFontSizebyStr(_new_font, 120, 480, name_info.name_eng);
|
|
_new_font.setPixelSize(_new_size);
|
|
|
|
for (int i = 0; i < 2; i++) {
|
|
qreal dir = (i == 0) ? -1.0 : 1.0;
|
|
qreal x_offset = (i == 0) ? 290.0 : 170.0;
|
|
qreal y_offset = (i == 0) ? 780.0 : 1580.0;
|
|
chrismas_y_offset = (i == 0) ? 1.0 * chrismas_y_offset : -1.0 * chrismas_y_offset;
|
|
//add English world
|
|
QGraphicsTextItem* eng_word_item = new QGraphicsTextItem(name_info.name_eng);
|
|
eng_word_item->setFont(_new_font);
|
|
QRectF rect = eng_word_item->boundingRect();
|
|
eng_word_item->setDefaultTextColor(font_color);
|
|
|
|
eng_word_item->setRotation(i == 0 ? 90 : -90);
|
|
eng_word_item->setPos(label_item->x() + x_offset - rect.height() / 2.0, label_item->y() + y_offset + chrismas_y_offset + (rect.width() / 2 * dir));
|
|
scene.addItem(eng_word_item);
|
|
}
|
|
|
|
|
|
|
|
if ((idx % MAX_LABEL_IN_PAPER) == (MAX_LABEL_IN_PAPER - 1) || idx == nameList.count() - 1) {
|
|
QString date_str = QDateTime::currentDateTime().toString("MMddhhmm");
|
|
QString file_name = QString("Birthday_%2_%1.jpg").arg(QString::number(export_times + 1), date_str);
|
|
saveToImage(file_name, &scene);
|
|
export_times++;
|
|
scene.clear();
|
|
}
|
|
}
|
|
|
|
|
|
break;
|
|
case Name_zh_eng:
|
|
for (int idx = 0; idx < nameList.length(); idx++) {
|
|
|
|
if ((idx % MAX_LABEL_IN_PAPER) == 0) {
|
|
|
|
QGraphicsRectItem* bg_item = new QGraphicsRectItem(0, 0, BG_WIDTH, BG_HEIGHT);
|
|
bg_item->setBrush(QBrush(QColor(255, 255, 255)));
|
|
//QGraphicsPixmapItem* bg_item = QGraphicsPixmapItem(QPixmap(BG_SMAPLE_PATH));
|
|
scene.addItem(bg_item);
|
|
|
|
}
|
|
NameInfo_t name_info = nameList.at(idx);
|
|
int col_index = idx % MAX_LABEL_IN_PAPER;
|
|
QString label_rel_path = label_bg_map[name_info.name2];
|
|
QGraphicsPixmapItem* label_item = new QGraphicsPixmapItem(QPixmap(label_rel_path));
|
|
label_item->setPos(int(LABEL_POS_START.x() + LABEL_POS_X_OFFSET * col_index), int(LABEL_POS_START.y()));
|
|
label_item->setOpacity(1);
|
|
scene.addItem(label_item);
|
|
|
|
int chrismas_y_offset = 0;
|
|
if (name_info.name2.compare("co") == 0 || name_info.name2.compare("ol") == 0 ||
|
|
name_info.name2.compare("st") == 0 || name_info.name2.compare("sn") == 0) {
|
|
chrismas_y_offset = 30;
|
|
}
|
|
|
|
// add ZH word
|
|
int name_word_len = name_info.name1.length();
|
|
qreal two_word_y = (name_word_len == 2) ? NAME_TWO_WORD_OFFSET / 2 : 0;
|
|
qreal offset_y = (name_word_len == 2) ? NAME_TWO_WORD_OFFSET : NAME_THREE_WORD_OFFSET;
|
|
|
|
for (int w = 0; w < name_word_len; w++) {
|
|
QGraphicsTextItem* word_item = new QGraphicsTextItem(name_info.name1.at(w));
|
|
word_item->setFont(font);
|
|
word_item->setDefaultTextColor(font_color);
|
|
word_item->setPos(label_item->x() + NAME_OFFSET_START.x(), label_item->y() + NAME_OFFSET_START.y() + two_word_y + chrismas_y_offset + offset_y * w);
|
|
scene.addItem(word_item);
|
|
}
|
|
|
|
//TODO: add English world
|
|
QGraphicsTextItem* eng_word_item = new QGraphicsTextItem(name_info.name_eng);
|
|
QFont _new_font = QFont(EnglisthFont());
|
|
_new_font.setWeight(QFont::ExtraLight);
|
|
int _new_size = getFontSizebyStr(_new_font, 120, 480, name_info.name_eng);
|
|
_new_font.setPixelSize(_new_size);
|
|
|
|
eng_word_item->setFont(_new_font);
|
|
QRectF rect = eng_word_item->boundingRect();
|
|
eng_word_item->setDefaultTextColor(font_color);
|
|
|
|
eng_word_item->setRotation(-90);
|
|
eng_word_item->setPos(label_item->x() + 170.0 - rect.height() / 2.0, label_item->y() + 1580 - chrismas_y_offset + rect.width() / 2);
|
|
scene.addItem(eng_word_item);
|
|
|
|
|
|
if ((idx % MAX_LABEL_IN_PAPER) == (MAX_LABEL_IN_PAPER - 1) || idx == nameList.count() - 1) {
|
|
QString date_str = QDateTime::currentDateTime().toString("MMddhhmm");
|
|
QString file_name = QString("Birthday_%2_%1.jpg").arg(QString::number(export_times + 1), date_str);
|
|
saveToImage(file_name, &scene);
|
|
export_times++;
|
|
scene.clear();
|
|
}
|
|
}
|
|
break;
|
|
*/
|
|
default:
|
|
break;
|
|
}
|
|
|
|
|
|
|
|
QMessageBox msgBox;
|
|
msgBox.setText(QString().asprintf("Export Finshed. Count:%d", export_times));
|
|
msgBox.exec();
|
|
}
|