#include "qformatset.h"

#include "../public_def.h"
#include "ui_qformatset.h"

QFormatSet::QFormatSet(QWidget* parent)
    : QDialog(parent), ui(new Ui::QFormatSet)
{
    ui->setupUi(this);
    connect(ui->btnOk, &QPushButton::clicked, this, [&]() { handle(); });
    connect(ui->btnCancel, &QPushButton::clicked, this, [&]() {
        isok_ = false;
        close();
    });
    connect(ui->cbAll, &QCheckBox::toggled, this, [&]() { check_select(); });
    connect(ui->btnSelect, &QPushButton::clicked, this, [&]() {
        QString file = CUtil::select_file(this, u8"请选择xml文件",
                                          u8"XML(*.xml);;所有文件 (*)");
        if (file.isEmpty()) {
            return;
        }
        ui->edXmlPath->setText(file);
    });
}

QFormatSet::~QFormatSet()
{
    delete ui;
}

void QFormatSet::handle()
{
    values_.clear();
    if (ui->cbAdd->isChecked()) {
        values_.push_back("+");
    }
    if (ui->cbAnd->isChecked()) {
        values_.push_back("&&");
    }
    if (ui->cbOr->isChecked()) {
        values_.push_back("||");
    }
    if (ui->cbMul->isChecked()) {
        values_.push_back("*");
    }
    if (ui->cbSub->isChecked()) {
        values_.push_back("-");
    }
    if (ui->cbDiv->isChecked()) {
        values_.push_back("/");
    }
    if (ui->cbLess->isChecked()) {
        values_.push_back("<");
    }
    if (ui->cbMore->isChecked()) {
        values_.push_back(">");
    }
    if (ui->cbEq->isChecked()) {
        values_.push_back("==");
    }
    if (ui->cbNotEq->isChecked()) {
        values_.push_back("!=");
    }
    xml_path_ = ui->edXmlPath->text().toStdString();
    isok_ = true;
    close();
}

void QFormatSet::check_select()
{
    auto set_check = [&](QCheckBox* ed, bool check) {
        if (ed) {
            ed->setChecked(check);
        }
    };
    bool check = ui->cbAll->isChecked();
    set_check(ui->cbAdd, check);
    set_check(ui->cbSub, check);
    set_check(ui->cbMul, check);
    set_check(ui->cbDiv, check);
    set_check(ui->cbLess, check);
    set_check(ui->cbMore, check);
    set_check(ui->cbOr, check);
    set_check(ui->cbAnd, check);
    set_check(ui->cbEq, check);
    set_check(ui->cbNotEq, check);
}