#include "data_edit.h" #include "ui_data_edit.h" #include #include #include #include #include #include "../public_def.h" CDataEdit::CDataEdit(QWidget* parent) : QDialog(parent), ui(new Ui::CDataEdit) { ui->setupUi(this); // setMinimumWidth(600); setWindowTitle(u8"源编辑"); connect(ui->btnExit, &QPushButton::clicked, this, [&]() { close(); }); connect(ui->btnAdd, &QPushButton::clicked, this, [&]() { import_data(); }); connect(ui->btnCopy, &QPushButton::clicked, this, [&]() { QClipboard* clip = QApplication::clipboard(); clip->setText(ui->plainTextEdit->toPlainText()); }); } CDataEdit::~CDataEdit() { delete ui; } void CDataEdit::set_data(const QString& data) { data_ = data; } void CDataEdit::set_xml_opr(CXmlOpr* xml_opr) { xml_opr_ = xml_opr; } void CDataEdit::import_data() { is_import_sucess_ = false; QString data = ui->plainTextEdit->toPlainText(); if (data.trimmed().isEmpty()) { CUtil::msg(this, u8"内容为空"); return; } if (xml_opr_ == nullptr) { CUtil::msg(this, u8"xml_opr无实例。"); return; } if (!CUtil::affirm(this, u8"提示", u8"如果出现重复的 key 将跳过,继续吗?")) { return; } std::vector valid_data{}; QStringList list = data.trimmed().split("\n"); for (int i = 0; i < list.size(); ++i) { const QString& item = list[i]; if (item.trimmed().isEmpty()) { continue; } if (!xml_opr_->check_same_struct(item.toStdString())) { CUtil::msg(this, u8"不是合法的xml语句或者与现有结构不一致。"); return; } valid_data.push_back(item.toStdString()); } auto task_count = valid_data.size(); std::size_t success_count{}; if (!xml_opr_->import_newer_data(valid_data, success_count)) { CUtil::msg(this, u8"导入失败。"); return; } QString info = QString(u8"需要导入 %1 条数据,成功导入 %2 条。").arg(task_count).arg(success_count); CUtil::msg(this, info); close(); is_import_sucess_ = true; } void CDataEdit::showEvent(QShowEvent* event) { show_before(); QDialog::showEvent(event); } void CDataEdit::show_before() { QScreen* primaryScreen = QGuiApplication::primaryScreen(); QRect screenGeometry = primaryScreen->geometry(); setMinimumWidth(screenGeometry.width() * 0.8); if (is_import_) { ui->btnCopy->setVisible(false); } else { ui->btnAdd->setVisible(false); ui->plainTextEdit->clear(); ui->plainTextEdit->appendPlainText(data_); } }