#include "keypad.h"

Keypad::Keypad(const QString &caption,
               const QString &value,
               QLineEdit::EchoMode echoMode,
               QWidget *parent) :
    QDialog(parent)
{
    ui.setupUi(this);
    setWindowTitle(caption);
    ui.leValue->setEchoMode(echoMode);
    ui.leValue->setText(value);

    QList<QPushButton *> allPButtons = findChildren<QPushButton *>();
    for (int i=0; i<allPButtons.size(); ++i)
        connect(allPButtons.at(i), SIGNAL(clicked()), this, SLOT(slotClicked()));

    //Shift Key special behavior
    connect(ui.btnKey_SHIFT, SIGNAL(toggled(bool)), this, SLOT(slotClicked(bool)));

}

void Keypad::changeEvent(QEvent *e)
{
    QDialog::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui.retranslateUi(this);
        break;
    default:
        break;
    }
}

void Keypad::slotClicked()
{
    if (QObject::sender()== ui.btnKey_OK){
        value(ui.leValue->text());
        accept();
        return;
    }else if (QObject::sender()== ui.btnKey_ESC){
        reject();
    }else if (QObject::sender()== ui.btnKey_CLEAR){
        ui.leValue->setText("");
        return;
    }else if (QObject::sender()== ui.btnKey_SPACE){
        QString tmp=ui.leValue->text();
        tmp.append(" ");
        ui.leValue->setText(tmp);
        return;
    }else if (QObject::sender()== ui.btnKey_BACK){
        QString tmp=ui.leValue->text();
        tmp=tmp.remove(tmp.size()-1, 1);
        ui.leValue->setText(tmp);
        return;
    }else if (QObject::sender()== ui.btnKey_SHIFT){
        return;
    }else if (QObject::sender()== ui.btnKey_6){
        if (ui.btnKey_SHIFT->isChecked()){
            QString tmp=ui.btnKey_6->text();
            tmp=tmp.remove(tmp.size()-1, 1);
            ui.leValue->setText(ui.leValue->text()+tmp);
            return;
        }
    }
    QPushButton *btn=qobject_cast<QPushButton*>(QObject::sender());
    ui.leValue->setText(ui.leValue->text()+btn->text());
}

void Keypad::slotClicked(bool toggled)
{
    if(toggled)
    {
        ui.btnKey_DACH->setText(trUtf8("°"));
        ui.btnKey_1->setText(trUtf8("!"));
        ui.btnKey_2->setText(trUtf8("\""));
        ui.btnKey_3->setText(trUtf8("§"));
        ui.btnKey_4->setText(trUtf8("$"));
        ui.btnKey_5->setText(trUtf8("%"));
        ui.btnKey_6->setText(trUtf8("&&"));
        ui.btnKey_7->setText(trUtf8("/"));
        ui.btnKey_8->setText(trUtf8("("));
        ui.btnKey_9->setText(trUtf8(")"));
        ui.btnKey_0->setText(trUtf8("="));
        ui.btnKey_SZ->setText(trUtf8("?"));
        ui.btnKey_HOCHKOMMA->setText(trUtf8("`"));
        ui.btnKey_BACKSLASH->setText(trUtf8(""));
        ui.btnKey_q->setText(trUtf8("Q"));
        ui.btnKey_w->setText(trUtf8("W"));
        ui.btnKey_e->setText(trUtf8("E"));
        ui.btnKey_r->setText(trUtf8("R"));
        ui.btnKey_t->setText(trUtf8("T"));
        ui.btnKey_z->setText(trUtf8("Z"));
        ui.btnKey_u->setText(trUtf8("U"));
        ui.btnKey_i->setText(trUtf8("I"));
        ui.btnKey_o->setText(trUtf8("O"));
        ui.btnKey_p->setText(trUtf8("P"));
        ui.btnKey_UE->setText(trUtf8("Ü"));
        ui.btnKey_PLUS->setText(trUtf8("*"));
        ui.btnKey_WELLE->setText(trUtf8(""));
        ui.btnKey_EURO->setText(trUtf8(""));
        ui.btnKey_AT->setText(trUtf8(""));
        ui.btnKey_a->setText(trUtf8("A"));
        ui.btnKey_s->setText(trUtf8("S"));
        ui.btnKey_d->setText(trUtf8("D"));
        ui.btnKey_f->setText(trUtf8("F"));
        ui.btnKey_g->setText(trUtf8("G"));
        ui.btnKey_h->setText(trUtf8("H"));
        ui.btnKey_j->setText(trUtf8("J"));
        ui.btnKey_k->setText(trUtf8("K"));
        ui.btnKey_l->setText(trUtf8("L"));
        ui.btnKey_OE->setText(trUtf8("Ö"));
        ui.btnKey_AE->setText(trUtf8("Ä"));
        ui.btnKey_RAUTE->setText(trUtf8("'"));
        ui.btnKey_LINE->setText(trUtf8(""));
        ui.btnKey_KLEINER->setText(trUtf8(">"));
        ui.btnKey_y->setText(trUtf8("Y"));
        ui.btnKey_x->setText(trUtf8("X"));
        ui.btnKey_c->setText(trUtf8("C"));
        ui.btnKey_v->setText(trUtf8("V"));
        ui.btnKey_b->setText(trUtf8("B"));
        ui.btnKey_n->setText(trUtf8("N"));
        ui.btnKey_m->setText(trUtf8("M"));
        ui.btnKey_KOMMA->setText(trUtf8(";"));
        ui.btnKey_DOT->setText(trUtf8(":"));
        ui.btnKey_MINUS->setText(trUtf8("_"));
        ui.btnKey_HOCH2->setText(trUtf8(""));
        ui.btnKey_HOCH3->setText(trUtf8(""));
        ui.btnKey_GESCHWEIFT_AUF->setText(trUtf8(""));
        ui.btnKey_ECKIG_AUF->setText(trUtf8(""));
        ui.btnKey_ECKIG_ZU->setText(trUtf8(""));
        ui.btnKey_GESCHWEIFT_ZU->setText(trUtf8(""));
    }
    else
    {
        ui.btnKey_DACH->setText(trUtf8("^"));
        ui.btnKey_1->setText(trUtf8("1"));
        ui.btnKey_2->setText(trUtf8("2"));
        ui.btnKey_3->setText(trUtf8("3"));
        ui.btnKey_4->setText(trUtf8("4"));
        ui.btnKey_5->setText(trUtf8("5"));
        ui.btnKey_6->setText(trUtf8("6"));
        ui.btnKey_7->setText(trUtf8("7"));
        ui.btnKey_8->setText(trUtf8("8"));
        ui.btnKey_9->setText(trUtf8("9"));
        ui.btnKey_0->setText(trUtf8("0"));
        ui.btnKey_SZ->setText(trUtf8("ß"));
        ui.btnKey_HOCHKOMMA->setText(trUtf8("´"));
        ui.btnKey_BACKSLASH->setText(trUtf8("\\"));
        ui.btnKey_AT->setText(trUtf8("@"));
        ui.btnKey_q->setText(trUtf8("q"));
        ui.btnKey_w->setText(trUtf8("w"));
        ui.btnKey_e->setText(trUtf8("e"));
        ui.btnKey_r->setText(trUtf8("r"));
        ui.btnKey_t->setText(trUtf8("t"));
        ui.btnKey_z->setText(trUtf8("z"));
        ui.btnKey_u->setText(trUtf8("u"));
        ui.btnKey_i->setText(trUtf8("i"));
        ui.btnKey_o->setText(trUtf8("o"));
        ui.btnKey_p->setText(trUtf8("p"));
        ui.btnKey_UE->setText(trUtf8("ü"));
        ui.btnKey_PLUS->setText(trUtf8("+"));
        ui.btnKey_WELLE->setText(trUtf8("~"));
        ui.btnKey_EURO->setText(trUtf8("€"));
        ui.btnKey_a->setText(trUtf8("a"));
        ui.btnKey_s->setText(trUtf8("s"));
        ui.btnKey_d->setText(trUtf8("d"));
        ui.btnKey_f->setText(trUtf8("f"));
        ui.btnKey_g->setText(trUtf8("g"));
        ui.btnKey_h->setText(trUtf8("h"));
        ui.btnKey_j->setText(trUtf8("j"));
        ui.btnKey_k->setText(trUtf8("k"));
        ui.btnKey_l->setText(trUtf8("l"));
        ui.btnKey_OE->setText(trUtf8("ö"));
        ui.btnKey_AE->setText(trUtf8("ä"));
        ui.btnKey_RAUTE->setText(trUtf8("#"));
        ui.btnKey_LINE->setText(trUtf8("|"));
        ui.btnKey_KLEINER->setText(trUtf8("<"));
        ui.btnKey_y->setText(trUtf8("y"));
        ui.btnKey_x->setText(trUtf8("x"));
        ui.btnKey_c->setText(trUtf8("c"));
        ui.btnKey_v->setText(trUtf8("v"));
        ui.btnKey_b->setText(trUtf8("b"));
        ui.btnKey_n->setText(trUtf8("n"));
        ui.btnKey_m->setText(trUtf8("m"));
        ui.btnKey_KOMMA->setText(trUtf8(","));
        ui.btnKey_DOT->setText(trUtf8("."));
        ui.btnKey_MINUS->setText(trUtf8("-"));
        ui.btnKey_HOCH2->setText(trUtf8("²"));
        ui.btnKey_HOCH3->setText(trUtf8("³"));
        ui.btnKey_GESCHWEIFT_AUF->setText(trUtf8("{"));
        ui.btnKey_ECKIG_AUF->setText(trUtf8("["));
        ui.btnKey_ECKIG_ZU->setText(trUtf8("]"));
        ui.btnKey_GESCHWEIFT_ZU->setText(trUtf8("}"));
    }
}

QString Keypad::value()
{
    return ui.leValue->text();
}
