OneLevelXmlOpr/src/data_edit.cpp

96 lines
2.5 KiB
C++
Raw Normal View History

#include "data_edit.h"
#include "ui_data_edit.h"
#include <QScreen>
#include <QClipboard>
#include <tinyxml2.h>
#include <vector>
#include <string>
#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()
{
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;
}
std::vector<std::string> valid_data{};
2024-05-19 16:50:22 +08:00
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());
}
2024-05-19 16:50:22 +08:00
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();
}
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_);
}
}