357 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			357 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include "keypad.h"
 | |
| 
 | |
| 
 | |
| #define numPadKeyWidth      40
 | |
| static bool keypad_NumberIsVisible;
 | |
| static bool keypad_visiKeyAllowed;
 | |
| 
 | |
| T_keypad::T_keypad(QWidget *parent) : QWidget(parent)
 | |
| {
 | |
|     QFont myTabFont;
 | |
|     myTabFont.setPixelSize(20);
 | |
| 
 | |
|     myMainLay  = new QVBoxLayout;
 | |
|     mySubLayout = new QGridLayout;
 | |
| 
 | |
|     headline = new QLabel();
 | |
|     headline->setText("head line");
 | |
|     headline->setFont(myTabFont);
 | |
|     myMainLay->addWidget(headline);
 | |
| 
 | |
|     valueDisplay = new QLabel();
 | |
|     valueDisplay->setStyleSheet("background-color: white");
 | |
|     valueDisplay->setLineWidth(5);
 | |
|     valueDisplay->setFont(myTabFont);
 | |
|     myMainLay->addWidget(valueDisplay);
 | |
|     myMainLay->addLayout(mySubLayout);
 | |
| 
 | |
| 
 | |
|     // number Pad Popup for Value entry:
 | |
|     numPad = new QGroupBox(" ");
 | |
|     numPad->setStyleSheet("background-color: grey");
 | |
|     numPad->setLayout(myMainLay);
 | |
| 
 | |
|     QPushButton *key1 = new QPushButton("1");
 | |
|     mySubLayout->addWidget(key1,0,0);
 | |
|     key1->setMaximumWidth(numPadKeyWidth);
 | |
|     key1->setFont(myTabFont);
 | |
|     connect(key1, SIGNAL(clicked()), this, SLOT(key1Clicked()));
 | |
| 
 | |
|     QPushButton *key2 = new QPushButton("2");
 | |
|     mySubLayout->addWidget(key2,0,1);
 | |
|     key2->setMaximumWidth(numPadKeyWidth);
 | |
|     key2->setFont(myTabFont);
 | |
|     connect(key2, SIGNAL(clicked()), this, SLOT(key2Clicked()));
 | |
| 
 | |
|     QPushButton *key3 = new QPushButton("3");
 | |
|     mySubLayout->addWidget(key3,0,2);
 | |
|     key3->setMaximumWidth(numPadKeyWidth);
 | |
|     key3->setFont(myTabFont);
 | |
|     connect(key3, SIGNAL(clicked()), this, SLOT(key3Clicked()));
 | |
| 
 | |
|     QPushButton *key4 = new QPushButton("4");
 | |
|     mySubLayout->addWidget(key4,1,0);
 | |
|     key4->setMaximumWidth(numPadKeyWidth);
 | |
|     key4->setFont(myTabFont);
 | |
|     connect(key4, SIGNAL(clicked()), this, SLOT(key4Clicked()));
 | |
| 
 | |
|     QPushButton *key5 = new QPushButton("5");
 | |
|     mySubLayout->addWidget(key5,1,1);
 | |
|     key5->setMaximumWidth(numPadKeyWidth);
 | |
|     key5->setFont(myTabFont);
 | |
|     connect(key5, SIGNAL(clicked()), this, SLOT(key5Clicked()));
 | |
| 
 | |
|     QPushButton *key6 = new QPushButton("6");
 | |
|     mySubLayout->addWidget(key6,1,2);
 | |
|     key6->setMaximumWidth(numPadKeyWidth);
 | |
|     key6->setFont(myTabFont);
 | |
|     connect(key6, SIGNAL(clicked()), this, SLOT(key6Clicked()));
 | |
| 
 | |
|     QPushButton *key7 = new QPushButton("7");
 | |
|     mySubLayout->addWidget(key7,2,0);
 | |
|     key7->setMaximumWidth(numPadKeyWidth);
 | |
|     key7->setFont(myTabFont);
 | |
|     connect(key7, SIGNAL(clicked()), this, SLOT(key7Clicked()));
 | |
| 
 | |
|     QPushButton *key8 = new QPushButton("8");
 | |
|     mySubLayout->addWidget(key8,2,1);
 | |
|     key8->setMaximumWidth(numPadKeyWidth);
 | |
|     key8->setFont(myTabFont);
 | |
|     connect(key8, SIGNAL(clicked()), this, SLOT(key8Clicked()));
 | |
| 
 | |
|     QPushButton *key9 = new QPushButton("9");
 | |
|     mySubLayout->addWidget(key9,2,2);
 | |
|     key9->setMaximumWidth(numPadKeyWidth);
 | |
|     key9->setFont(myTabFont);
 | |
|     connect(key9, SIGNAL(clicked()), this, SLOT(key9Clicked()));
 | |
| 
 | |
|     QPushButton *keyAc = new QPushButton("AC");
 | |
|     mySubLayout->addWidget(keyAc,3,0);
 | |
|     keyAc->setMaximumWidth(numPadKeyWidth);
 | |
|     keyAc->setFont(myTabFont);
 | |
|     connect(keyAc, SIGNAL(clicked()), this, SLOT(keyAcClicked()));
 | |
| 
 | |
|     QPushButton *key0 = new QPushButton("0");
 | |
|     mySubLayout->addWidget(key0,3,1);
 | |
|     key0->setMaximumWidth(numPadKeyWidth);
 | |
|     key0->setFont(myTabFont);
 | |
|     connect(key0, SIGNAL(clicked()), this, SLOT(key0Clicked()));
 | |
| 
 | |
|     QPushButton *keyBs = new QPushButton("<<");
 | |
|     mySubLayout->addWidget(keyBs,3,2);
 | |
|     keyBs->setMaximumWidth(numPadKeyWidth);
 | |
|     keyBs->setFont(myTabFont);
 | |
|     connect(keyBs, SIGNAL(clicked()), this, SLOT(keyBsClicked()));
 | |
| 
 | |
|     QPushButton *keyC = new QPushButton("Esc");
 | |
|     mySubLayout->addWidget(keyC,4,0);
 | |
|     keyC->setMaximumWidth(numPadKeyWidth);
 | |
|     keyC->setFont(myTabFont);
 | |
|     connect(keyC, SIGNAL(clicked()), this, SLOT(keyCancelClicked()));
 | |
| 
 | |
|     QPushButton *keySee = new QPushButton("see");
 | |
|     mySubLayout->addWidget(keySee,4,1);
 | |
|     keySee->setMaximumWidth(numPadKeyWidth);
 | |
|     keySee->setFont(myTabFont);
 | |
|     connect(keySee, SIGNAL(clicked()), this, SLOT(keySeeEntryClicked()));
 | |
| 
 | |
|     QPushButton *keyOK = new QPushButton("OK");
 | |
|     mySubLayout->addWidget(keyOK,4,2);
 | |
|     keyOK->setMaximumWidth(numPadKeyWidth);
 | |
|     keyOK->setFont(myTabFont);
 | |
|     connect(keyOK, SIGNAL(clicked()), this, SLOT(keyOkClicked()));
 | |
| 
 | |
|     numPad->hide();
 | |
|     myValueString.clear();
 | |
|     valueDisplay->clear();
 | |
|     myReturnString.clear();
 | |
|     keypad_visiKeyAllowed=true;
 | |
|     keypad_NumberIsVisible=true;
 | |
| }
 | |
| 
 | |
| T_keypad::~T_keypad()
 | |
| {
 | |
|     
 | |
| }
 | |
| 
 | |
| void T_keypad::show(void)
 | |
| {
 | |
|     numPad->show();
 | |
|     numPad->setFocus();
 | |
|     numPad->setEnabled(true);
 | |
|     numPad->raise();
 | |
|     myValueString.clear();
 | |
|     valueDisplay->clear();
 | |
|     myReturnString.clear();
 | |
| }
 | |
| 
 | |
| void T_keypad::hide(void)
 | |
| {
 | |
|     numPad->hide();
 | |
| }
 | |
| 
 | |
| void T_keypad::setText(QString headLine)
 | |
| {
 | |
| 
 | |
|     headline->setText(headLine);
 | |
| 
 | |
| }
 | |
| void T_keypad::keysVisible(uint8_t visib)
 | |
| {
 | |
|     // visib=0: show *     1:show numbers    2: show * but allow visi-key
 | |
|     if (visib==0)
 | |
|     {
 | |
|         keypad_NumberIsVisible=false;
 | |
|         keypad_visiKeyAllowed=false;
 | |
|     } else
 | |
|     if (visib==1)
 | |
|     {
 | |
|         keypad_NumberIsVisible=true;
 | |
|         keypad_visiKeyAllowed=false;
 | |
|     } else
 | |
|     if (visib==2)
 | |
|     {
 | |
|         keypad_NumberIsVisible=false;
 | |
|         keypad_visiKeyAllowed=true;
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| QString T_keypad::getValueString(void)
 | |
| {
 | |
|     return  myReturnString;
 | |
| }
 | |
| 
 | |
| int32_t T_keypad::getValueDecimal(void)
 | |
| {
 | |
|     return myReturnString.toULong();
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| void T_keypad::key0Clicked(void)
 | |
| {
 | |
|     myReturnString.append("0");
 | |
|     if (keypad_NumberIsVisible)
 | |
|     {
 | |
|         myValueString.append("0");
 | |
|     } else
 | |
|         myValueString.append("*");
 | |
|     valueDisplay->setText(myValueString);
 | |
| }
 | |
| 
 | |
| void T_keypad::key1Clicked(void)
 | |
| {
 | |
|     myReturnString.append("1");
 | |
|     if (keypad_NumberIsVisible)
 | |
|     {
 | |
|         myValueString.append("1");
 | |
|     } else
 | |
|         myValueString.append("*");
 | |
|     valueDisplay->setText(myValueString);
 | |
| }
 | |
| 
 | |
| void T_keypad::key2Clicked(void)
 | |
| {
 | |
|     myReturnString.append("2");
 | |
|     if (keypad_NumberIsVisible)
 | |
|     {
 | |
|         myValueString.append("2");
 | |
|     } else
 | |
|         myValueString.append("*");
 | |
|     valueDisplay->setText(myValueString);
 | |
| }
 | |
| 
 | |
| void T_keypad::key3Clicked(void)
 | |
| {
 | |
|     myReturnString.append("3");
 | |
|     if (keypad_NumberIsVisible)
 | |
|     {
 | |
| 
 | |
|         myValueString.append("3");
 | |
|     } else
 | |
|         myValueString.append("*");
 | |
|     valueDisplay->setText(myValueString);
 | |
| }
 | |
| 
 | |
| void T_keypad::key4Clicked(void)
 | |
| {
 | |
|     myReturnString.append("4");
 | |
|     if (keypad_NumberIsVisible)
 | |
|     {
 | |
|         myValueString.append("4");
 | |
|     } else
 | |
|         myValueString.append("*");
 | |
|     valueDisplay->setText(myValueString);
 | |
| }
 | |
| 
 | |
| void T_keypad::key5Clicked(void)
 | |
| {
 | |
|     myReturnString.append("5");
 | |
|     if (keypad_NumberIsVisible)
 | |
|     {
 | |
|         myValueString.append("5");
 | |
|     } else
 | |
|         myValueString.append("*");
 | |
|     valueDisplay->setText(myValueString);
 | |
| }
 | |
| 
 | |
| void T_keypad::key6Clicked(void)
 | |
| {
 | |
|     myReturnString.append("6");
 | |
|     if (keypad_NumberIsVisible)
 | |
|     {
 | |
|         myValueString.append("6");
 | |
|     } else
 | |
|         myValueString.append("*");
 | |
|     valueDisplay->setText(myValueString);
 | |
| }
 | |
| 
 | |
| void T_keypad::key7Clicked(void)
 | |
| {
 | |
|     myReturnString.append("7");
 | |
|     if (keypad_NumberIsVisible)
 | |
|     {
 | |
|         myValueString.append("7");
 | |
|     } else
 | |
|         myValueString.append("*");
 | |
|     valueDisplay->setText(myValueString);
 | |
| }
 | |
| 
 | |
| void T_keypad::key8Clicked(void)
 | |
| {
 | |
|     myReturnString.append("8");
 | |
|     if (keypad_NumberIsVisible)
 | |
|         myValueString.append("8");
 | |
|     else
 | |
|         myValueString.append("*");
 | |
|     valueDisplay->setText(myValueString);
 | |
| }
 | |
| 
 | |
| void T_keypad::key9Clicked(void)
 | |
| {
 | |
|     myReturnString.append("9");
 | |
|     if (keypad_NumberIsVisible)
 | |
|         myValueString.append("9");
 | |
|     else
 | |
|         myValueString.append("*");
 | |
|     valueDisplay->setText(myValueString);
 | |
| }
 | |
| 
 | |
| void T_keypad::keyOkClicked(void)
 | |
| {
 | |
|     numPad->hide();
 | |
|     emit keyEntryFinished();
 | |
| }
 | |
| 
 | |
| void T_keypad::keyCancelClicked(void)
 | |
| {
 | |
|     myValueString.clear();
 | |
|     myReturnString.clear();
 | |
|     valueDisplay->clear();
 | |
|     numPad->hide();
 | |
|     emit keyEntryFinished();
 | |
| }
 | |
| 
 | |
| void T_keypad::keySeeEntryClicked(void)
 | |
| {
 | |
| 
 | |
|     if (keypad_visiKeyAllowed)
 | |
|     {
 | |
|         if (keypad_NumberIsVisible)
 | |
|         {
 | |
|             // dont want to see the entry, so overwrite number(s) with asteriks
 | |
|             int len=myValueString.length();
 | |
|             myValueString.clear();
 | |
|             for (int nn=0; nn<len; nn++)
 | |
|                 myValueString.append('*');
 | |
|             keypad_NumberIsVisible=false;
 | |
|         } else
 | |
|         {
 | |
|             // wanna see entry from now
 | |
|             // by now we have only *'s in myValueString
 | |
|             // numbers are saved in "myReturnString"
 | |
|             myValueString=myReturnString;
 | |
|             keypad_NumberIsVisible=true;
 | |
|         }
 | |
|     }
 | |
|     valueDisplay->setText(myValueString);
 | |
| }
 | |
| 
 | |
| void T_keypad::keyAcClicked(void)
 | |
| {
 | |
|     myValueString.clear();
 | |
|     myReturnString.clear();
 | |
|     valueDisplay->clear();
 | |
| }
 | |
| 
 | |
| void T_keypad::keyBsClicked(void)
 | |
| {
 | |
|     myValueString.chop(1);
 | |
|     myReturnString.chop(1);
 | |
|     valueDisplay->setText(myValueString);
 | |
| }
 | |
| 
 | |
| 
 |