|
|
@ -2,14 +2,8 @@ |
|
|
|
#include <QHBoxLayout> |
|
|
|
#include <QHBoxLayout> |
|
|
|
#include <QLabel> |
|
|
|
#include <QLabel> |
|
|
|
#include <QPixmap> |
|
|
|
#include <QPixmap> |
|
|
|
#include <QPushButton> |
|
|
|
|
|
|
|
#include <QRandomGenerator> |
|
|
|
|
|
|
|
#include <algorithm> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "common/params.h" |
|
|
|
|
|
|
|
#include "hardware/hw.h" |
|
|
|
|
|
|
|
#include "networking.hpp" |
|
|
|
#include "networking.hpp" |
|
|
|
#include "util.h" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void clearLayout(QLayout* layout) { |
|
|
|
void clearLayout(QLayout* layout) { |
|
|
|
while (QLayoutItem* item = layout->takeAt(0)) { |
|
|
|
while (QLayoutItem* item = layout->takeAt(0)) { |
|
|
@ -23,12 +17,6 @@ void clearLayout(QLayout* layout) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
QWidget* layoutToWidget(QLayout* l, QWidget* parent){ |
|
|
|
|
|
|
|
QWidget* q = new QWidget(parent); |
|
|
|
|
|
|
|
q->setLayout(l); |
|
|
|
|
|
|
|
return q; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Networking functions
|
|
|
|
// Networking functions
|
|
|
|
|
|
|
|
|
|
|
|
Networking::Networking(QWidget* parent, bool show_advanced) : QWidget(parent), show_advanced(show_advanced){ |
|
|
|
Networking::Networking(QWidget* parent, bool show_advanced) : QWidget(parent), show_advanced(show_advanced){ |
|
|
@ -61,9 +49,9 @@ void Networking::attemptInitialization(){ |
|
|
|
|
|
|
|
|
|
|
|
if (show_advanced) { |
|
|
|
if (show_advanced) { |
|
|
|
QPushButton* advancedSettings = new QPushButton("Advanced"); |
|
|
|
QPushButton* advancedSettings = new QPushButton("Advanced"); |
|
|
|
advancedSettings->setStyleSheet(R"(margin-right: 30px)"); |
|
|
|
advancedSettings->setStyleSheet("margin-right: 30px;"); |
|
|
|
advancedSettings->setFixedSize(350, 100); |
|
|
|
advancedSettings->setFixedSize(350, 100); |
|
|
|
connect(advancedSettings, &QPushButton::released, [=](){s->setCurrentWidget(an);}); |
|
|
|
connect(advancedSettings, &QPushButton::released, [=](){ s->setCurrentWidget(an); }); |
|
|
|
vlayout->addSpacing(10); |
|
|
|
vlayout->addSpacing(10); |
|
|
|
vlayout->addWidget(advancedSettings, 0, Qt::AlignRight); |
|
|
|
vlayout->addWidget(advancedSettings, 0, Qt::AlignRight); |
|
|
|
vlayout->addSpacing(10); |
|
|
|
vlayout->addSpacing(10); |
|
|
@ -73,7 +61,8 @@ void Networking::attemptInitialization(){ |
|
|
|
connect(wifiWidget, SIGNAL(connectToNetwork(Network)), this, SLOT(connectToNetwork(Network))); |
|
|
|
connect(wifiWidget, SIGNAL(connectToNetwork(Network)), this, SLOT(connectToNetwork(Network))); |
|
|
|
vlayout->addWidget(wifiWidget, 1); |
|
|
|
vlayout->addWidget(wifiWidget, 1); |
|
|
|
|
|
|
|
|
|
|
|
wifiScreen = layoutToWidget(vlayout, this); |
|
|
|
QWidget* wifiScreen = new QWidget(this); |
|
|
|
|
|
|
|
wifiScreen->setLayout(vlayout); |
|
|
|
s->addWidget(wifiScreen); |
|
|
|
s->addWidget(wifiScreen); |
|
|
|
|
|
|
|
|
|
|
|
an = new AdvancedNetworking(this, wifi); |
|
|
|
an = new AdvancedNetworking(this, wifi); |
|
|
@ -138,6 +127,7 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid |
|
|
|
|
|
|
|
|
|
|
|
QVBoxLayout* vlayout = new QVBoxLayout; |
|
|
|
QVBoxLayout* vlayout = new QVBoxLayout; |
|
|
|
vlayout->setMargin(40); |
|
|
|
vlayout->setMargin(40); |
|
|
|
|
|
|
|
vlayout->setSpacing(20); |
|
|
|
|
|
|
|
|
|
|
|
// Back button
|
|
|
|
// Back button
|
|
|
|
QPushButton* back = new QPushButton("Back"); |
|
|
|
QPushButton* back = new QPushButton("Back"); |
|
|
@ -146,41 +136,24 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid |
|
|
|
vlayout->addWidget(back, 0, Qt::AlignLeft); |
|
|
|
vlayout->addWidget(back, 0, Qt::AlignLeft); |
|
|
|
|
|
|
|
|
|
|
|
// Enable tethering layout
|
|
|
|
// Enable tethering layout
|
|
|
|
QHBoxLayout* tetheringToggleLayout = new QHBoxLayout; |
|
|
|
ToggleControl *tetheringToggle = new ToggleControl("Enable Tethering", "", "", wifi->tetheringEnabled()); |
|
|
|
tetheringToggleLayout->addWidget(new QLabel("Enable tethering")); |
|
|
|
vlayout->addWidget(tetheringToggle); |
|
|
|
Toggle* toggle_switch = new Toggle; |
|
|
|
QObject::connect(tetheringToggle, SIGNAL(toggleFlipped(bool)), this, SLOT(toggleTethering(bool))); |
|
|
|
toggle_switch->setFixedSize(150, 100); |
|
|
|
|
|
|
|
tetheringToggleLayout->addWidget(toggle_switch); |
|
|
|
|
|
|
|
tetheringToggleLayout->addSpacing(40); |
|
|
|
|
|
|
|
if (wifi->tetheringEnabled()) { |
|
|
|
|
|
|
|
toggle_switch->togglePosition(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
QObject::connect(toggle_switch, SIGNAL(stateChanged(bool)), this, SLOT(toggleTethering(bool))); |
|
|
|
|
|
|
|
vlayout->addWidget(layoutToWidget(tetheringToggleLayout, this), 0); |
|
|
|
|
|
|
|
vlayout->addWidget(horizontal_line(), 0); |
|
|
|
vlayout->addWidget(horizontal_line(), 0); |
|
|
|
|
|
|
|
|
|
|
|
// Change tethering password
|
|
|
|
// Change tethering password
|
|
|
|
QHBoxLayout *tetheringPassword = new QHBoxLayout; |
|
|
|
editPasswordButton = new ButtonControl("Tethering Password", "EDIT", "", [=](){ |
|
|
|
tetheringPassword->addWidget(new QLabel("Edit tethering password"), 1); |
|
|
|
|
|
|
|
editPasswordButton = new QPushButton("EDIT"); |
|
|
|
|
|
|
|
editPasswordButton->setFixedWidth(500); |
|
|
|
|
|
|
|
connect(editPasswordButton, &QPushButton::released, [=](){ |
|
|
|
|
|
|
|
QString pass = InputDialog::getText("Enter new tethering password", 8); |
|
|
|
QString pass = InputDialog::getText("Enter new tethering password", 8); |
|
|
|
if (pass.size()) { |
|
|
|
if (pass.size()) { |
|
|
|
wifi->changeTetheringPassword(pass); |
|
|
|
wifi->changeTetheringPassword(pass); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
tetheringPassword->addWidget(editPasswordButton, 1, Qt::AlignRight); |
|
|
|
vlayout->addWidget(editPasswordButton, 0); |
|
|
|
vlayout->addWidget(layoutToWidget(tetheringPassword, this), 0); |
|
|
|
|
|
|
|
vlayout->addWidget(horizontal_line(), 0); |
|
|
|
vlayout->addWidget(horizontal_line(), 0); |
|
|
|
|
|
|
|
|
|
|
|
// IP adress
|
|
|
|
// IP address
|
|
|
|
QHBoxLayout* IPlayout = new QHBoxLayout; |
|
|
|
ipLabel = new LabelControl("IP Address", wifi->ipv4_address); |
|
|
|
IPlayout->addWidget(new QLabel("IP address"), 0); |
|
|
|
vlayout->addWidget(ipLabel, 0); |
|
|
|
ipLabel = new QLabel(wifi->ipv4_address); |
|
|
|
|
|
|
|
ipLabel->setStyleSheet("color: #aaaaaa"); |
|
|
|
|
|
|
|
IPlayout->addWidget(ipLabel, 0, Qt::AlignRight); |
|
|
|
|
|
|
|
vlayout->addWidget(layoutToWidget(IPlayout, this), 0); |
|
|
|
|
|
|
|
vlayout->addWidget(horizontal_line(), 0); |
|
|
|
vlayout->addWidget(horizontal_line(), 0); |
|
|
|
|
|
|
|
|
|
|
|
// SSH keys
|
|
|
|
// SSH keys
|
|
|
@ -188,6 +161,7 @@ AdvancedNetworking::AdvancedNetworking(QWidget* parent, WifiManager* wifi): QWid |
|
|
|
vlayout->addWidget(horizontal_line(), 0); |
|
|
|
vlayout->addWidget(horizontal_line(), 0); |
|
|
|
vlayout->addWidget(new SshControl()); |
|
|
|
vlayout->addWidget(new SshControl()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vlayout->addStretch(1); |
|
|
|
setLayout(vlayout); |
|
|
|
setLayout(vlayout); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -218,7 +192,6 @@ WifiUI::WifiUI(QWidget *parent, WifiManager* wifi) : QWidget(parent), wifi(wifi) |
|
|
|
vlayout->setSpacing(25); |
|
|
|
vlayout->setSpacing(25); |
|
|
|
|
|
|
|
|
|
|
|
setLayout(vlayout); |
|
|
|
setLayout(vlayout); |
|
|
|
page = 0; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void WifiUI::refresh() { |
|
|
|
void WifiUI::refresh() { |
|
|
@ -229,70 +202,40 @@ void WifiUI::refresh() { |
|
|
|
connectButtons = new QButtonGroup(this); // TODO check if this is a leak
|
|
|
|
connectButtons = new QButtonGroup(this); // TODO check if this is a leak
|
|
|
|
QObject::connect(connectButtons, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(handleButton(QAbstractButton*))); |
|
|
|
QObject::connect(connectButtons, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(handleButton(QAbstractButton*))); |
|
|
|
|
|
|
|
|
|
|
|
int networks_per_page = height() / 180; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int i = 0; |
|
|
|
int i = 0; |
|
|
|
int pageCount = (wifi->seen_networks.size() - 1) / networks_per_page; |
|
|
|
|
|
|
|
page = std::max(0, std::min(page, pageCount)); |
|
|
|
|
|
|
|
for (Network &network : wifi->seen_networks) { |
|
|
|
for (Network &network : wifi->seen_networks) { |
|
|
|
QHBoxLayout *hlayout = new QHBoxLayout; |
|
|
|
QHBoxLayout *hlayout = new QHBoxLayout; |
|
|
|
if (page * networks_per_page <= i && i < (page + 1) * networks_per_page) { |
|
|
|
hlayout->addSpacing(50); |
|
|
|
// SSID
|
|
|
|
|
|
|
|
hlayout->addSpacing(50); |
|
|
|
QLabel *ssid_label = new QLabel(QString::fromUtf8(network.ssid)); |
|
|
|
QString ssid = QString::fromUtf8(network.ssid); |
|
|
|
ssid_label->setStyleSheet("font-size: 55px;"); |
|
|
|
if(ssid.length() > 20){ |
|
|
|
hlayout->addWidget(ssid_label, 1, Qt::AlignLeft); |
|
|
|
ssid = ssid.left(20 - 3) + "…"; |
|
|
|
|
|
|
|
} |
|
|
|
// TODO: don't use images for this
|
|
|
|
|
|
|
|
// strength indicator
|
|
|
|
QLabel *ssid_label = new QLabel(ssid); |
|
|
|
unsigned int strength_scale = network.strength / 17; |
|
|
|
ssid_label->setStyleSheet(R"( |
|
|
|
QPixmap pix("../assets/images/network_" + QString::number(strength_scale) + ".png"); |
|
|
|
font-size: 55px; |
|
|
|
QLabel *icon = new QLabel(); |
|
|
|
)"); |
|
|
|
icon->setPixmap(pix.scaledToWidth(100, Qt::SmoothTransformation)); |
|
|
|
ssid_label->setFixedWidth(this->width()*0.5); |
|
|
|
icon->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); |
|
|
|
hlayout->addWidget(ssid_label, 0, Qt::AlignLeft); |
|
|
|
hlayout->addWidget(icon, 0, Qt::AlignRight); |
|
|
|
|
|
|
|
|
|
|
|
// TODO: don't use images for this
|
|
|
|
// connect button
|
|
|
|
// strength indicator
|
|
|
|
QPushButton* btn = new QPushButton(network.security_type == SecurityType::UNSUPPORTED ? "Unsupported" : (network.connected == ConnectedType::CONNECTED ? "Connected" : (network.connected == ConnectedType::CONNECTING ? "Connecting" : "Connect"))); |
|
|
|
unsigned int strength_scale = network.strength / 17; |
|
|
|
btn->setDisabled(network.connected == ConnectedType::CONNECTED || network.connected == ConnectedType::CONNECTING || network.security_type == SecurityType::UNSUPPORTED); |
|
|
|
QPixmap pix("../assets/images/network_" + QString::number(strength_scale) + ".png"); |
|
|
|
btn->setFixedWidth(350); |
|
|
|
QLabel *icon = new QLabel(); |
|
|
|
hlayout->addWidget(btn, 0, Qt::AlignRight); |
|
|
|
icon->setPixmap(pix.scaledToWidth(100, Qt::SmoothTransformation)); |
|
|
|
|
|
|
|
icon->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); |
|
|
|
connectButtons->addButton(btn, i); |
|
|
|
hlayout->addWidget(icon, 0, Qt::AlignRight); |
|
|
|
|
|
|
|
|
|
|
|
vlayout->addLayout(hlayout, 1); |
|
|
|
// connect button
|
|
|
|
// Don't add the last horizontal line
|
|
|
|
QPushButton* btn = new QPushButton(network.security_type == SecurityType::UNSUPPORTED ? "Unsupported" : (network.connected == ConnectedType::CONNECTED ? "Connected" : (network.connected == ConnectedType::CONNECTING ? "Connecting" : "Connect"))); |
|
|
|
if (i+1 < wifi->seen_networks.size()) { |
|
|
|
btn->setDisabled(network.connected == ConnectedType::CONNECTED || network.connected == ConnectedType::CONNECTING || network.security_type == SecurityType::UNSUPPORTED); |
|
|
|
vlayout->addWidget(horizontal_line(), 0); |
|
|
|
btn->setFixedWidth(350); |
|
|
|
|
|
|
|
hlayout->addWidget(btn, 0, Qt::AlignRight); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
connectButtons->addButton(btn, i); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vlayout->addLayout(hlayout, 1); |
|
|
|
|
|
|
|
// Don't add the last horizontal line
|
|
|
|
|
|
|
|
if (page * networks_per_page <= i+1 && i+1 < (page + 1) * networks_per_page && i+1 < wifi->seen_networks.size()) { |
|
|
|
|
|
|
|
vlayout->addWidget(horizontal_line(), 0); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
i++; |
|
|
|
i++; |
|
|
|
} |
|
|
|
} |
|
|
|
vlayout->addStretch(3); |
|
|
|
vlayout->addStretch(3); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Setup buttons for pagination
|
|
|
|
|
|
|
|
QHBoxLayout *prev_next_buttons = new QHBoxLayout; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QPushButton* prev = new QPushButton("Previous"); |
|
|
|
|
|
|
|
prev->setEnabled(page); |
|
|
|
|
|
|
|
QObject::connect(prev, SIGNAL(released()), this, SLOT(prevPage())); |
|
|
|
|
|
|
|
prev_next_buttons->addWidget(prev); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QPushButton* next = new QPushButton("Next"); |
|
|
|
|
|
|
|
next->setEnabled(wifi->seen_networks.size() > (page + 1) * networks_per_page); |
|
|
|
|
|
|
|
QObject::connect(next, SIGNAL(released()), this, SLOT(nextPage())); |
|
|
|
|
|
|
|
prev_next_buttons->addWidget(next); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vlayout->addLayout(prev_next_buttons, 2); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void WifiUI::handleButton(QAbstractButton* button) { |
|
|
|
void WifiUI::handleButton(QAbstractButton* button) { |
|
|
@ -300,13 +243,3 @@ void WifiUI::handleButton(QAbstractButton* button) { |
|
|
|
Network n = wifi->seen_networks[connectButtons->id(btn)]; |
|
|
|
Network n = wifi->seen_networks[connectButtons->id(btn)]; |
|
|
|
emit connectToNetwork(n); |
|
|
|
emit connectToNetwork(n); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void WifiUI::prevPage() { |
|
|
|
|
|
|
|
page--; |
|
|
|
|
|
|
|
refresh(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void WifiUI::nextPage() { |
|
|
|
|
|
|
|
page++; |
|
|
|
|
|
|
|
refresh(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|