#include "pairsswitcher.h"

PairsSwitcher::PairsSwitcher():widget(0)
{
}

PairsSwitcher::~PairsSwitcher() {
    delete widget;
}

QWidget* PairsSwitcher::getComponent(QWidget *parent) {

if (widget == 0) {
    widget = new QWidget(parent);
    pushb = new QPushButton("Add row",widget);
    table = new AppendableTableWidget(1,2,widget);
    hlayout = new QHBoxLayout;
    QVBoxLayout *vlayout =  new QVBoxLayout();
    QSpacerItem *verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
    QWidget *btnWidget = new QWidget(widget);
    QPushButton *delBtn = new QPushButton("Delete row", widget);

    btnWidget->setLayout(vlayout);
    vlayout->setMargin(0);
    vlayout->addWidget(pushb);
    vlayout->addWidget(delBtn);
    vlayout->addItem(verticalSpacer);

    hlayout->setMargin(0);
    widget->setLayout(hlayout);

    table->horizontalHeader()->setVisible(false);
    table->verticalHeader()->setVisible(false);

    hlayout->addWidget(table);
    hlayout->addWidget(btnWidget);

    QObject::connect(pushb,SIGNAL(clicked()),
                    table,SLOT(appendRow()));
    QObject::connect(delBtn,SIGNAL(clicked()),
                    table,SLOT(deleteRow()));
    QObject::connect(table, SIGNAL(cellChanged(int,int)),
                     this, SLOT(onChange()));

}
return widget;
}

QString PairsSwitcher::buildSwitcherString() {
    if (widget == 0) return "";

    QString res = "";
    QString sep = "";
    for (int i = 0; i < table->rowCount(); i++) {
        QTableWidgetItem *ki = table->item(i, 0);
        QTableWidgetItem *vi = table->item(i, 1);

        if (ki == 0 || vi == 0) continue;

        QString k = ki->text();
        QString v = vi->text();

        if (k.trimmed().isEmpty() || v.trimmed().isEmpty()) continue;
        res +=  sep + k + "=" + v;
        sep = separator;
    }
    if (res.isEmpty()) return "";
    else  return switcher + " " + quotesText(res);
}

void PairsSwitcher::setValuesFromNode(QDomElement &el) {
    Switcher::setValuesFromNode(el);
    setSeparator(el.attribute("separator"));
}


QDomNode& PairsSwitcher::getProjectNode(QDomElement &el) {
        Switcher::getProjectNode(el);

        for (int i = 0; i < table->rowCount(); i++) {
            QTableWidgetItem *ki = table->item(i, 0);
            QTableWidgetItem *vi = table->item(i, 1);

            if (ki == 0 || vi == 0) continue;

            QString k = ki->text();
            QString v = vi->text();

            if (k.trimmed().isEmpty() || v.trimmed().isEmpty()) continue;

            QDomElement e = el.ownerDocument().createElement("value");
            e.setAttribute("key", k);
            e.setAttribute("value", v);
            el.appendChild(e);
        }

        return el;
    }

void PairsSwitcher::setSavedValues(QDomElement &el) {
    QDomNode it = el.firstChild();

    int counter = 0, sum = 0;

    while (!it.isNull()) {
        QDomElement element = it.toElement();

        if (element.isNull()) continue;

        QString value = element.attribute("value");
        QString key = element.attribute("key");

        table->appendRow();
        table->setItem(counter, 0, new QTableWidgetItem(key));
        table->setItem(counter, 1, new QTableWidgetItem(value));

        counter++;
        it = it.nextSibling();
    }
}
