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 |
||||
#include "wifiManager.hpp" |
||||
#include "input_field.hpp" |
||||
#include <QWidget> |
||||
#include <QtDBus> |
||||
#include <QPushButton> |
||||
#include <QButtonGroup> |
||||
#include <QVBoxLayout> |
||||
#include <QStackedLayout> |
||||
#include <QStackedWidget> |
||||
#include <QTimer> |
||||
|
||||
|
||||
class CustomConnectButton : public QPushButton{ |
||||
|
||||
public: |
||||
explicit CustomConnectButton(QString text, int iid); |
||||
int id; |
||||
explicit CustomConnectButton(QString text, int iid); |
||||
int id; |
||||
}; |
||||
|
||||
class WifiUI : public QWidget { |
||||
Q_OBJECT |
||||
|
||||
private: |
||||
WifiManager* wifi; |
||||
QVBoxLayout* vlayout; |
||||
QTimer * timer; |
||||
private: |
||||
WifiManager* wifi; |
||||
|
||||
public: |
||||
explicit WifiUI(QWidget *parent = 0); |
||||
QStackedWidget* swidget; |
||||
QVBoxLayout* vlayout; |
||||
QWidget * wifi_widget; |
||||
|
||||
private slots: |
||||
void handleButton(QAbstractButton* m_button); |
||||
void refresh(); |
||||
InputField *a; |
||||
QEventLoop loop; |
||||
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