summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ui/qt5/CMakeLists.txt1
-rw-r--r--ui/qt5/horizonwizard.cc2
-rw-r--r--ui/qt5/netmanualpage.cc156
-rw-r--r--ui/qt5/netmanualpage.hh37
4 files changed, 196 insertions, 0 deletions
diff --git a/ui/qt5/CMakeLists.txt b/ui/qt5/CMakeLists.txt
index b536dcb..22391c4 100644
--- a/ui/qt5/CMakeLists.txt
+++ b/ui/qt5/CMakeLists.txt
@@ -18,6 +18,7 @@ set(UI_SOURCES
networkifacepage.cc
netsimplewifipage.cc
netdhcppage.cc
+ netmanualpage.cc
datetimepage.cc
hostnamepage.cc
pkgsimple.cc
diff --git a/ui/qt5/horizonwizard.cc b/ui/qt5/horizonwizard.cc
index 6128d2b..72af147 100644
--- a/ui/qt5/horizonwizard.cc
+++ b/ui/qt5/horizonwizard.cc
@@ -44,6 +44,7 @@ extern "C" {
#include "networkingpage.hh"
#include "networkifacepage.hh"
#include "netsimplewifipage.hh"
+#include "netmanualpage.hh"
#include "netdhcppage.hh"
#include "datetimepage.hh"
#include "hostnamepage.hh"
@@ -211,6 +212,7 @@ HorizonWizard::HorizonWizard(QWidget *parent) : QWizard(parent) {
setPage(Page_Network_Iface, new NetworkIfacePage);
setPage(Page_Network_Wireless, new NetworkSimpleWirelessPage);
setPage(Page_Network_DHCP, new NetDHCPPage);
+ setPage(Page_Network_Manual, new NetManualPage);
setPage(Page_DateTime, new DateTimePage);
setPage(Page_Hostname, new HostnamePage);
setPage(Page_PkgSimple, new PkgSimplePage);
diff --git a/ui/qt5/netmanualpage.cc b/ui/qt5/netmanualpage.cc
new file mode 100644
index 0000000..52f41bf
--- /dev/null
+++ b/ui/qt5/netmanualpage.cc
@@ -0,0 +1,156 @@
+/*
+ * netmanualpage.cc - Implementation of the UI.Network.Manual page
+ * horizon-qt5, the Qt 5 user interface for
+ * Project Horizon
+ *
+ * Copyright (c) 2020 Adélie Linux and contributors. All rights reserved.
+ * This code is licensed under the AGPL 3.0 license, as noted in the
+ * LICENSE-code file in the root directory of this repository.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+#include "netmanualpage.hh"
+
+#include <QVBoxLayout>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QLineEdit>
+
+NetManualPage::NetManualPage(QWidget *parent) : HorizonWizardPage(parent) {
+ loadWatermark("network");
+ setTitle(tr("Configure Your Network"));
+
+ QLabel *descLabel = new QLabel(tr("Input the details for your network connection."));
+
+ QVBoxLayout *v4Pane = new QVBoxLayout;
+ useV4 = new QCheckBox(tr("Enable IPv&4"));
+ useV4->setChecked(true);
+ v4Addr = new QLineEdit;
+ v4Addr->setInputMask("900.900.900.900;_");
+ v4Gateway = new QLineEdit;
+ v4Gateway->setInputMask("900.900.900.900;_");
+ v4DNS = new QLineEdit;
+ v4DNS->setInputMask("900.900.900.900;_");
+ v4DNS->setText("9.9.9.9");
+
+ connect(useV4, &QCheckBox::toggled, [=](bool ticked) {
+ v4Addr->setEnabled(ticked);
+ v4Gateway->setEnabled(ticked);
+ v4DNS->setEnabled(ticked);
+ this->horizonWizard()->ipv4.use = ticked;
+ emit completeChanged();
+ });
+ connect(v4Addr, &QLineEdit::textEdited, [=] {
+ this->horizonWizard()->ipv4.address = v4Addr->text();
+ emit completeChanged();
+ });
+ connect(v4Gateway, &QLineEdit::textEdited, [=] {
+ this->horizonWizard()->ipv4.gateway = v4Gateway->text();
+ emit completeChanged();
+ });
+ connect(v4DNS, &QLineEdit::textEdited, [=] {
+ this->horizonWizard()->ipv4.dns = v4DNS->text();
+ emit completeChanged();
+ });
+
+ v4Pane->addWidget(useV4);
+ v4Pane->addSpacing(20);
+ v4Pane->addWidget(new QLabel(tr("IPv4 Address:")));
+ v4Pane->addWidget(v4Addr);
+ v4Pane->addWidget(new QLabel(tr("IPv4 Gateway:")));
+ v4Pane->addWidget(v4Gateway);
+ v4Pane->addWidget(new QLabel(tr("IPv4 DNS Server:")));
+ v4Pane->addWidget(v4DNS);
+
+ QVBoxLayout *v6Pane = new QVBoxLayout;
+ useV6 = new QCheckBox(tr("Enable IPv&6"));
+ useV6->setChecked(true);
+ v6Addr = new QLineEdit;
+ v6Gateway = new QLineEdit;
+ v6DNS = new QLineEdit;
+ v6DNS->setText("2620:fe::fe");
+
+ connect(useV6, &QCheckBox::toggled, [=](bool ticked) {
+ v6Addr->setEnabled(ticked);
+ v6Gateway->setEnabled(ticked);
+ v6DNS->setEnabled(ticked);
+ this->horizonWizard()->ipv6.use = true;
+ emit completeChanged();
+ });
+ connect(v6Addr, &QLineEdit::textEdited, [=] {
+ this->horizonWizard()->ipv6.address = v6Addr->text();
+ emit completeChanged();
+ });
+ connect(v6Gateway, &QLineEdit::textEdited, [=] {
+ this->horizonWizard()->ipv6.gateway = v6Gateway->text();
+ emit completeChanged();
+ });
+ connect(v6DNS, &QLineEdit::textEdited, [=] {
+ this->horizonWizard()->ipv6.dns = v6DNS->text();
+ emit completeChanged();
+ });
+
+ v6Pane->addWidget(useV6);
+ v6Pane->addSpacing(20);
+ v6Pane->addWidget(new QLabel(tr("IPv6 Address:")));
+ v6Pane->addWidget(v6Addr);
+ v6Pane->addWidget(new QLabel(tr("IPv6 Gateway:")));
+ v6Pane->addWidget(v6Gateway);
+ v6Pane->addWidget(new QLabel(tr("IPv6 DNS Server:")));
+ v6Pane->addWidget(v6DNS);
+
+ QHBoxLayout *paneLayout = new QHBoxLayout;
+ paneLayout->addLayout(v4Pane);
+ paneLayout->addLayout(v6Pane);
+
+ QVBoxLayout *overallLayout = new QVBoxLayout;
+ overallLayout->addWidget(descLabel);
+
+ ifaceWidget = new QWidget;
+ QHBoxLayout *ifaceLayout = new QHBoxLayout;
+ ifaceWidget->setLayout(ifaceLayout);
+
+ overallLayout->addWidget(ifaceWidget);
+ overallLayout->addStretch();
+ overallLayout->addLayout(paneLayout);
+ overallLayout->addStretch();
+ setLayout(overallLayout);
+}
+
+void NetManualPage::initializePage() {
+ if(horizonWizard()->interfaces.size() != 1) {
+ ifaceWidget->show();
+ } else {
+ ifaceWidget->hide();
+ }
+
+ this->horizonWizard()->ipv4.use = true;
+ this->horizonWizard()->ipv4.dns = "9.9.9.9";
+ this->horizonWizard()->ipv6.use = true;
+ this->horizonWizard()->ipv6.dns = "2620:fe::fe";
+}
+
+#include <iostream>
+
+bool NetManualPage::isComplete() const {
+ /* REQ: UI.Network.Manual.Enable: At least one must be ticked. */
+ if(!useV6->isChecked() && !useV4->isChecked()) return false;
+
+ bool valid = true;
+
+ if(useV6->isChecked()) {
+ valid = !v6Addr->text().isEmpty() && v6Addr->hasAcceptableInput() &&
+ !v6DNS->text().isEmpty() && v6DNS->hasAcceptableInput();
+ }
+
+ /* If both are checked, we just mix in v6 validity. */
+ if(useV4->isChecked()) {
+ return !v4Addr->text().isEmpty() && v4Addr->hasAcceptableInput() &&
+ !v4DNS->text().isEmpty() && v4DNS->hasAcceptableInput() &&
+ valid;
+ }
+
+ /* Okay, only v6 matters. */
+ return valid;
+}
diff --git a/ui/qt5/netmanualpage.hh b/ui/qt5/netmanualpage.hh
new file mode 100644
index 0000000..a7c84ce
--- /dev/null
+++ b/ui/qt5/netmanualpage.hh
@@ -0,0 +1,37 @@
+/*
+ * netmanualpage.hh - Definition of the UI.Network.Manual page
+ * horizon-qt5, the Qt 5 user interface for
+ * Project Horizon
+ *
+ * Copyright (c) 2020 Adélie Linux and contributors. All rights reserved.
+ * This code is licensed under the AGPL 3.0 license, as noted in the
+ * LICENSE-code file in the root directory of this repository.
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+#ifndef NETMANUALPAGE_HH
+#define NETMANUALPAGE_HH
+
+#include "horizonwizardpage.hh"
+
+#include <QCheckBox>
+#include <QLineEdit>
+#include <QSpinBox>
+
+class NetManualPage : public HorizonWizardPage {
+public:
+ NetManualPage(QWidget *parent = nullptr);
+
+ void initializePage() override;
+ bool isComplete() const override;
+private:
+ QWidget *ifaceWidget;
+ QCheckBox *useV6, *useV4;
+
+ QLineEdit *v6Addr, *v6Gateway, *v6DNS;
+ QSpinBox *v6Prefix;
+ QLineEdit *v4Addr, *v4Gateway, *v4DNS;
+};
+
+#endif /* !NETMANUALPAGE_HH */