sites list reimplement

This commit is contained in:
pokamest 2021-02-25 21:16:00 +03:00
parent 65961d8d2e
commit c683884868
3 changed files with 84 additions and 71 deletions

View file

@ -1,6 +1,7 @@
#include <QApplication>
#include <QClipboard>
#include <QDesktopServices>
#include <QHBoxLayout>
#include <QJsonDocument>
#include <QJsonObject>
#include <QKeyEvent>
@ -61,12 +62,6 @@ MainWindow::MainWindow(QWidget *parent) :
setupTray();
setupUiConnections();
customSitesModel = new QStringListModel();
ui->listView_sites_custom->setModel(customSitesModel);
connect(ui->listView_sites_custom, &QListView::doubleClicked, [&](const QModelIndex &index){
QDesktopServices::openUrl("https://" + index.data().toString());
});
connect(ui->lineEdit_sites_add_custom, &QLineEdit::returnPressed, [&](){
ui->pushButton_sites_add_custom->click();
});
@ -569,7 +564,6 @@ void MainWindow::setupUiConnections()
connect(ui->pushButton_back_from_share, &QPushButton::clicked, this, [this](){ goToPage(Page::GeneralSettings); });
connect(ui->pushButton_sites_add_custom, &QPushButton::clicked, this, [this](){ onPushButtonAddCustomSitesClicked(); });
connect(ui->pushButton_sites_delete_custom, &QPushButton::clicked, this, [this](){ onPushButtonDeleteCustomSiteClicked(); });
connect(ui->radioButton_mode_selected_sites, &QRadioButton::toggled, ui->pushButton_vpn_add_site, &QPushButton::setEnabled);
@ -741,11 +735,8 @@ void MainWindow::onPushButtonAddCustomSitesClicked()
}
}
void MainWindow::onPushButtonDeleteCustomSiteClicked()
void MainWindow::onPushButtonDeleteCustomSiteClicked(const QString &siteToDelete)
{
QModelIndex index = ui->listView_sites_custom->currentIndex();
QString siteToDelete = index.data(Qt::DisplayRole).toString();
if (siteToDelete.isEmpty()) {
return;
}
@ -762,7 +753,6 @@ void MainWindow::onPushButtonDeleteCustomSiteClicked()
qDebug() << "Deleted custom ip:" << ipToDelete;
m_settings.setCustomIps(customIps);
updateSettings();
if (m_vpnConnection->connectionState() == VpnProtocol::ConnectionState::Connected) {
@ -773,7 +763,6 @@ void MainWindow::onPushButtonDeleteCustomSiteClicked()
void MainWindow::updateSettings()
{
customSitesModel->setStringList(m_settings.customSites());
ui->radioButton_mode_selected_sites->setChecked(m_settings.customRouting());
ui->pushButton_vpn_add_site->setEnabled(m_settings.customRouting());
@ -782,6 +771,12 @@ void MainWindow::updateSettings()
ui->lineEdit_network_settings_dns1->setText(m_settings.primaryDns());
ui->lineEdit_network_settings_dns2->setText(m_settings.secondaryDns());
ui->listWidget_sites->clear();
for(const QString &site : m_settings.customSites()) {
makeSitesListItem(ui->listWidget_sites, site);
}
}
void MainWindow::updateShareCode()
@ -797,3 +792,32 @@ void MainWindow::updateShareCode()
//qDebug() << "Share code" << QJsonDocument(o).toJson();
}
void MainWindow::makeSitesListItem(QListWidget *listWidget, const QString &address)
{
QSize size(330, 25);
QWidget* widget = new QWidget;
widget->resize(size);
QLabel *label = new QLabel(address, widget);
label->resize(size);
QPushButton* btn = new QPushButton(widget);
btn->resize(size);
QPushButton* btn1 = new QPushButton(widget);
btn1->resize(30, 25);
btn1->move(300, 0);
btn1->setCursor(QCursor(Qt::PointingHandCursor));
connect(btn1, &QPushButton::clicked, this, [this, label]() {
onPushButtonDeleteCustomSiteClicked(label->text());
return;
});
QListWidgetItem* item = new QListWidgetItem(listWidget);
item->setSizeHint(size);
listWidget->setItemWidget(item, widget);
widget->setStyleSheet(styleSheet());
}

View file

@ -2,6 +2,7 @@
#define MAINWINDOW_H
#include <QLabel>
#include <QListWidget>
#include <QMainWindow>
#include <QProgressBar>
#include <QPushButton>
@ -53,7 +54,7 @@ private slots:
void onPushButtonForgetServer(bool);
void onPushButtonAddCustomSitesClicked();
void onPushButtonDeleteCustomSiteClicked();
void onPushButtonDeleteCustomSiteClicked(const QString &siteToDelete);
void onTrayActionConnect(); // connect from context menu
void setTrayState(VpnProtocol::ConnectionState state);
@ -78,7 +79,7 @@ private:
void updateSettings();
void updateShareCode();
void makeSitesListItem(QListWidget* listWidget, const QString &address);
Ui::MainWindow *ui;
VpnConnection* m_vpnConnection;
@ -90,7 +91,6 @@ private:
QSystemTrayIcon m_tray;
QMenu* m_menu;
QStringListModel *customSitesModel = nullptr;
QRegExpValidator m_ipAddressValidator;
bool canMove = false;

View file

@ -254,7 +254,7 @@ QPushButton:hover {
<string notr="true"/>
</property>
<property name="currentIndex">
<number>8</number>
<number>3</number>
</property>
<widget class="QWidget" name="page_start">
<widget class="QLabel" name="label_23">
@ -1175,22 +1175,6 @@ background: rgba(167, 167, 167, 0.1);
color: #181922;
}</string>
</property>
<widget class="QListView" name="listView_sites">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>381</width>
<height>0</height>
</rect>
</property>
<property name="cursor" stdset="0">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
</widget>
<widget class="QPushButton" name="pushButton_back_from_sites">
<property name="geometry">
<rect>
@ -1273,22 +1257,6 @@ color: #100A44;
<bool>true</bool>
</property>
</widget>
<widget class="QListView" name="listView_sites_custom">
<property name="geometry">
<rect>
<x>20</x>
<y>200</y>
<width>341</width>
<height>361</height>
</rect>
</property>
<property name="cursor" stdset="0">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_sites_add_custom">
<property name="geometry">
<rect>
@ -1354,28 +1322,6 @@ background: #211966;
<string>+</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_sites_delete_custom">
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>90</x>
<y>584</y>
<width>201</width>
<height>21</height>
</rect>
</property>
<property name="cursor">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="styleSheet">
<string notr="true">color: #181922;</string>
</property>
<property name="text">
<string>Delete selected site</string>
</property>
</widget>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
@ -1401,6 +1347,49 @@ color: #333333;</string>
<string>Web site or hostname or IP address</string>
</property>
</widget>
<widget class="QListWidget" name="listWidget_sites">
<property name="geometry">
<rect>
<x>20</x>
<y>200</y>
<width>340</width>
<height>400</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">QWidget {
margin: 0px;
padding: 0px;
}
QPushButton:hover {
image: url(:/images/close.png);
image-position: right center;
}
QListView {
show-decoration-selected: 1; /* make the selection span the entire width of the view */
}
QListView::item:selected:!active {
background: transparent;
border: none;
}
QListView::item:selected:active {
background: transparent;
border: none;
}
QListView::item:hover {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #FAFBFE, stop: 1 #ECEEFF);
}</string>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum>
</property>
</widget>
</widget>
<widget class="QWidget" name="page_general_settings">
<widget class="QPushButton" name="pushButton_back_from_settings">