Qt keyboard (#2381)
* add keyboard
* put widget in settings
* port a keyboard
* forgot git add
* reduce diff
* submodules
* fix macOS and reduce diff
* cleanup
* little more cleanup
* test input
* not working yet
* compiles now
* add stuff
* add keyboard on panel 3
* works now
* small layout improvements
* cleanup
* styling
* cleanup
Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
Co-authored-by: Willem Melching <willem.melching@gmail.com>
old-commit-hash: 7478b21e2e
commatwo_master
parent
d7ab2ec365
commit
1795bb236d
9 changed files with 334 additions and 46 deletions
@ -0,0 +1,56 @@ |
|||||||
|
#include <QEvent> |
||||||
|
#include <QVBoxLayout> |
||||||
|
#include <QLineEdit> |
||||||
|
#include <QLabel> |
||||||
|
#include <QPushButton> |
||||||
|
|
||||||
|
#include "input_field.hpp" |
||||||
|
#include "keyboard.hpp" |
||||||
|
|
||||||
|
InputField::InputField(QWidget *parent): QWidget(parent) { |
||||||
|
l = new QVBoxLayout(); |
||||||
|
QHBoxLayout *r = new QHBoxLayout(); |
||||||
|
label = new QLabel(this); |
||||||
|
label->setText("password"); |
||||||
|
r->addWidget(label); |
||||||
|
QPushButton* cancel = new QPushButton("cancel"); |
||||||
|
QObject::connect(cancel, SIGNAL(released()), this, SLOT(emitEmpty()));
|
||||||
|
cancel->setFixedHeight(150); |
||||||
|
cancel->setFixedWidth(300); |
||||||
|
r->addWidget(cancel); |
||||||
|
l->addLayout(r); |
||||||
|
l->addSpacing(80); |
||||||
|
|
||||||
|
line = new QLineEdit(""); |
||||||
|
l->addWidget(line); |
||||||
|
l->addSpacing(200); |
||||||
|
|
||||||
|
k = new Keyboard(this); |
||||||
|
QObject::connect(k, SIGNAL(emitButton(QString)), this, SLOT(getText(QString))); |
||||||
|
l->addWidget(k); |
||||||
|
setLayout(l); |
||||||
|
} |
||||||
|
|
||||||
|
void InputField::emitEmpty(){ |
||||||
|
emitText(""); |
||||||
|
line->setText(""); |
||||||
|
} |
||||||
|
void InputField::getText(QString s){ |
||||||
|
if(!QString::compare(s,"⌫")){ |
||||||
|
line->backspace(); |
||||||
|
} |
||||||
|
|
||||||
|
if(!QString::compare(s,"⏎")){ |
||||||
|
emitText(line->text()); |
||||||
|
line->setText(""); |
||||||
|
} |
||||||
|
|
||||||
|
QVector<QString> control_buttons {"⇧", "↑", "ABC", "⏎", "#+=", "⌫", "123"}; |
||||||
|
for(QString c :control_buttons){ |
||||||
|
if(!QString::compare(s, c)){ |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
line->insert(s.left(1)); |
||||||
|
} |
||||||
|
|
@ -0,0 +1,29 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <QWidget> |
||||||
|
#include <QLineEdit> |
||||||
|
#include <QVBoxLayout> |
||||||
|
#include <QStackedLayout> |
||||||
|
#include <QLabel> |
||||||
|
|
||||||
|
#include "keyboard.hpp" |
||||||
|
|
||||||
|
class InputField : public QWidget { |
||||||
|
Q_OBJECT |
||||||
|
|
||||||
|
public: |
||||||
|
explicit InputField(QWidget* parent = 0); |
||||||
|
QLabel *label; |
||||||
|
|
||||||
|
private: |
||||||
|
QLineEdit *line; |
||||||
|
Keyboard *k; |
||||||
|
QVBoxLayout *l; |
||||||
|
|
||||||
|
public slots: |
||||||
|
void emitEmpty(); |
||||||
|
void getText(QString s); |
||||||
|
|
||||||
|
signals: |
||||||
|
void emitText(QString s); |
||||||
|
}; |
@ -0,0 +1,117 @@ |
|||||||
|
#include <QDebug> |
||||||
|
#include <QVBoxLayout> |
||||||
|
#include <QHBoxLayout> |
||||||
|
#include <QPushButton> |
||||||
|
#include <QButtonGroup> |
||||||
|
#include <QStackedLayout> |
||||||
|
|
||||||
|
#include "keyboard.hpp" |
||||||
|
|
||||||
|
KeyboardLayout::KeyboardLayout(QWidget* parent, std::vector<QVector<QString>> layout) : QWidget(parent) { |
||||||
|
QVBoxLayout* vlayout = new QVBoxLayout; |
||||||
|
QButtonGroup* btn_group = new QButtonGroup(this); |
||||||
|
|
||||||
|
QObject::connect(btn_group, SIGNAL(buttonClicked(QAbstractButton*)), parent, SLOT(handleButton(QAbstractButton*))); |
||||||
|
|
||||||
|
int i = 0; |
||||||
|
for(auto s : layout){ |
||||||
|
QHBoxLayout *hlayout = new QHBoxLayout; |
||||||
|
|
||||||
|
if (i == 1){ |
||||||
|
hlayout->addSpacing(50); |
||||||
|
} |
||||||
|
|
||||||
|
for(QString p : s){ |
||||||
|
QPushButton* btn = new QPushButton(p); |
||||||
|
btn->setFixedHeight(100); |
||||||
|
|
||||||
|
if (p == QString(" ")){ |
||||||
|
btn->setFixedWidth(1024); |
||||||
|
} |
||||||
|
|
||||||
|
btn_group->addButton(btn); |
||||||
|
hlayout->addSpacing(5); |
||||||
|
hlayout->addWidget(btn); |
||||||
|
} |
||||||
|
|
||||||
|
if (i == 1){ |
||||||
|
hlayout->addSpacing(50); |
||||||
|
} |
||||||
|
|
||||||
|
vlayout->addLayout(hlayout); |
||||||
|
i++; |
||||||
|
} |
||||||
|
|
||||||
|
setLayout(vlayout); |
||||||
|
} |
||||||
|
|
||||||
|
Keyboard::Keyboard(QWidget *parent) : QWidget(parent) { |
||||||
|
main_layout = new QStackedLayout; |
||||||
|
|
||||||
|
// lowercase
|
||||||
|
std::vector<QVector<QString>> lowercase = { |
||||||
|
{"q","w","e","r","t","y","u","i","o","p"}, |
||||||
|
{"a","s","d","f","g","h","j","k","l"}, |
||||||
|
{"⇧","z","x","c","v","b","n","m","⌫"}, |
||||||
|
{"123"," ","⏎"}, |
||||||
|
}; |
||||||
|
main_layout->addWidget(new KeyboardLayout(this, lowercase)); |
||||||
|
|
||||||
|
// uppercase
|
||||||
|
std::vector<QVector<QString>> uppercase = { |
||||||
|
{"Q","W","E","R","T","Y","U","I","O","P"}, |
||||||
|
{"A","S","D","F","G","H","J","K","L"}, |
||||||
|
{"↑","Z","X","C","V","B","N","M","⌫"}, |
||||||
|
{"123"," ","⏎"}, |
||||||
|
}; |
||||||
|
main_layout->addWidget(new KeyboardLayout(this, uppercase)); |
||||||
|
|
||||||
|
// 1234567890
|
||||||
|
std::vector<QVector<QString>> numbers = { |
||||||
|
{"1","2","3","4","5","6","7","8","9","0"}, |
||||||
|
{"-","/",":",";","(",")","$","&&","@","\""}, |
||||||
|
{"#+=",".",",","?","!","`","⌫"}, |
||||||
|
{"ABC"," ","⏎"}, |
||||||
|
}; |
||||||
|
main_layout->addWidget(new KeyboardLayout(this, numbers)); |
||||||
|
|
||||||
|
// Special characters
|
||||||
|
std::vector<QVector<QString>> specials = { |
||||||
|
{"[","]","{","}","#","%","^","*","+","="}, |
||||||
|
{"_","\\","|","~","<",">","€","£","¥"," "}, |
||||||
|
{"123",".",",","?","!","`","⌫"}, |
||||||
|
{"ABC"," ","⏎"}, |
||||||
|
}; |
||||||
|
main_layout->addWidget(new KeyboardLayout(this, specials)); |
||||||
|
|
||||||
|
setLayout(main_layout); |
||||||
|
main_layout->setCurrentIndex(0); |
||||||
|
|
||||||
|
setStyleSheet(R"( |
||||||
|
QPushButton { font-size: 40px } |
||||||
|
* { |
||||||
|
background-color: #99777777; |
||||||
|
} |
||||||
|
)"); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
void Keyboard::handleButton(QAbstractButton* m_button){ |
||||||
|
QString id = m_button->text(); |
||||||
|
if(!QString::compare(m_button->text(),"↑")||!QString::compare(m_button->text(),"ABC")){ |
||||||
|
main_layout->setCurrentIndex(0); |
||||||
|
} |
||||||
|
if(!QString::compare(m_button->text(),"⇧")){ |
||||||
|
main_layout->setCurrentIndex(1); |
||||||
|
} |
||||||
|
if(!QString::compare(m_button->text(),"123")){ |
||||||
|
main_layout->setCurrentIndex(2); |
||||||
|
} |
||||||
|
if(!QString::compare(m_button->text(),"#+=")){ |
||||||
|
main_layout->setCurrentIndex(3); |
||||||
|
} |
||||||
|
if(!QString::compare(m_button->text(),"⏎")){ |
||||||
|
main_layout->setCurrentIndex(0); |
||||||
|
} |
||||||
|
emit emitButton(m_button->text()); |
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <vector> |
||||||
|
|
||||||
|
#include <QString> |
||||||
|
#include <QWidget> |
||||||
|
#include <QStackedLayout> |
||||||
|
#include <QAbstractButton> |
||||||
|
|
||||||
|
class KeyboardLayout : public QWidget { |
||||||
|
Q_OBJECT |
||||||
|
|
||||||
|
public: |
||||||
|
explicit KeyboardLayout(QWidget *parent, std::vector<QVector<QString>> layout); |
||||||
|
}; |
||||||
|
|
||||||
|
class Keyboard : public QWidget { |
||||||
|
Q_OBJECT |
||||||
|
|
||||||
|
public: |
||||||
|
explicit Keyboard(QWidget *parent = 0); |
||||||
|
|
||||||
|
private: |
||||||
|
QStackedLayout* main_layout; |
||||||
|
|
||||||
|
private slots: |
||||||
|
void handleButton(QAbstractButton* m_button); |
||||||
|
|
||||||
|
signals: |
||||||
|
void emitButton(QString s); |
||||||
|
}; |
@ -1,33 +1,46 @@ |
|||||||
#pragma once |
#pragma once |
||||||
#include "wifiManager.hpp" |
#include "wifiManager.hpp" |
||||||
|
#include "input_field.hpp" |
||||||
#include <QWidget> |
#include <QWidget> |
||||||
#include <QtDBus> |
#include <QtDBus> |
||||||
#include <QPushButton> |
#include <QPushButton> |
||||||
#include <QButtonGroup> |
#include <QButtonGroup> |
||||||
#include <QVBoxLayout> |
#include <QVBoxLayout> |
||||||
#include <QStackedLayout> |
#include <QStackedLayout> |
||||||
|
#include <QStackedWidget> |
||||||
#include <QTimer> |
#include <QTimer> |
||||||
|
|
||||||
|
|
||||||
class CustomConnectButton : public QPushButton{ |
class CustomConnectButton : public QPushButton{ |
||||||
|
|
||||||
public: |
public: |
||||||
explicit CustomConnectButton(QString text, int iid); |
explicit CustomConnectButton(QString text, int iid); |
||||||
int id; |
int id; |
||||||
}; |
}; |
||||||
|
|
||||||
class WifiUI : public QWidget { |
class WifiUI : public QWidget { |
||||||
Q_OBJECT |
Q_OBJECT |
||||||
|
|
||||||
private: |
private: |
||||||
WifiManager* wifi; |
WifiManager* wifi; |
||||||
QVBoxLayout* vlayout; |
|
||||||
QTimer * timer; |
|
||||||
|
|
||||||
public: |
QStackedWidget* swidget; |
||||||
explicit WifiUI(QWidget *parent = 0); |
QVBoxLayout* vlayout; |
||||||
|
QWidget * wifi_widget; |
||||||
|
|
||||||
private slots: |
InputField *a; |
||||||
void handleButton(QAbstractButton* m_button); |
QEventLoop loop; |
||||||
void refresh(); |
QTimer * timer; |
||||||
|
QString text; |
||||||
|
QString getStringFromUser(); |
||||||
|
|
||||||
|
public: |
||||||
|
explicit WifiUI(QWidget *parent = 0); |
||||||
|
|
||||||
|
private slots: |
||||||
|
void handleButton(QAbstractButton* m_button); |
||||||
|
void refresh(); |
||||||
|
void receiveText(QString text); |
||||||
|
signals: |
||||||
|
void gotText(); |
||||||
}; |
}; |
||||||
|
Loading…
Reference in new issue