55#include < QLoggingCategory>
66#include < QStandardItem>
77#include < QNetworkInterface>
8-
8+ #include < QMenu>
9+ #include < QInputDialog>
910#include " DlgSettings.h"
1011#include " ui_DlgSettings.h"
1112
@@ -15,6 +16,7 @@ CDlgSettings::CDlgSettings(QSharedPointer<CParameterFtpServer> para, QWidget *pa
1516 , ui(new Ui::CDlgSettings)
1617 , m_Para(para)
1718{
19+ bool check = false ;
1820 ui->setupUi (this );
1921 Q_ASSERT (m_Para);
2022
@@ -26,6 +28,7 @@ CDlgSettings::CDlgSettings(QSharedPointer<CParameterFtpServer> para, QWidget *pa
2628 ui->cbReadOnly ->setChecked (m_Para->GetReadOnly ());
2729 ui->sbConnectCount ->setValue (m_Para->GetConnectCount ());
2830 ui->sbConnectCount ->setToolTip (tr (" -1: Enable all\n 0: Disable all\n >0: Connect count" ));
31+
2932 ui->cbListenAll ->setChecked (m_Para->GetListenAll ());
3033 ui->lvListen ->setModel (&m_ModelNetWorkInterface);
3134 foreach (auto iface, QNetworkInterface::allInterfaces ()) {
@@ -53,6 +56,21 @@ CDlgSettings::CDlgSettings(QSharedPointer<CParameterFtpServer> para, QWidget *pa
5356 }
5457 }
5558 }
59+
60+ ui->lvBlacklist ->setModel (&m_ModelBlack);
61+ check = connect (ui->lvBlacklist , SIGNAL (customContextMenuRequested (const QPoint&)),
62+ this , SLOT (slotBlackListContextMenuRequested (const QPoint&)));
63+ Q_ASSERT (check);
64+ foreach (auto ip, m_Para->GetBlacklist ()) {
65+ m_ModelBlack.appendRow (new QStandardItem (ip));
66+ }
67+ ui->lvWhtelist ->setModel (&m_ModelWhite);
68+ check = connect (ui->lvWhtelist , SIGNAL (customContextMenuRequested (const QPoint&)),
69+ this , SLOT (slotWhiteListContextMenuRequested (const QPoint&)));
70+ foreach (auto ip, m_Para->GetWhitelist ()) {
71+ m_ModelWhite.appendRow (new QStandardItem (ip));
72+ }
73+ Q_ASSERT (check);
5674}
5775
5876CDlgSettings::~CDlgSettings ()
@@ -77,6 +95,7 @@ void CDlgSettings::accept()
7795 m_Para->SetAnonymousLogin (ui->cbAnonmousLogin ->isChecked ());
7896 m_Para->SetReadOnly (ui->cbReadOnly ->isChecked ());
7997 m_Para->SetConnectCount (ui->sbConnectCount ->value ());
98+
8099 m_Para->SetListenAll (ui->cbListenAll ->isChecked ());
81100 QStringList lstInterface;
82101 for (int row = 0 ; row < m_ModelNetWorkInterface.rowCount (); row++) {
@@ -86,6 +105,18 @@ void CDlgSettings::accept()
86105 }
87106 }
88107 m_Para->SetListen (lstInterface);
108+
109+ QStringList lstBlack;
110+ for (int i = 0 ; i < m_ModelBlack.rowCount (); ++i) {
111+ lstBlack << m_ModelBlack.item (i)->text ();
112+ }
113+ m_Para->SetBlacklist (lstBlack);
114+ QStringList lstWhite;
115+ for (int i = 0 ; i < m_ModelWhite.rowCount (); ++i) {
116+ lstWhite << m_ModelWhite.item (i)->text ();
117+ }
118+ m_Para->SetWhitelist (lstWhite);
119+
89120 QDialog::accept ();
90121}
91122
@@ -101,3 +132,46 @@ void CDlgSettings::on_cbListenAll_checkStateChanged(const Qt::CheckState &arg1)
101132 ui->lvListen ->setEnabled (Qt::Checked != arg1);
102133}
103134
135+ void CDlgSettings::slotWhiteListContextMenuRequested (const QPoint& pos)
136+ {
137+ QMenu m;
138+ QItemSelectionModel* pSelect = ui->lvWhtelist ->selectionModel ();
139+ QModelIndexList lstIndex = pSelect->selectedRows ();
140+ m.addAction (tr (" Add" ), [this ](){
141+ QString szIp = QInputDialog::getText (this , tr (" Add whilte list" ), tr (" Add ip address:" ));
142+ QStandardItem* item = new QStandardItem (szIp);
143+ m_ModelWhite.appendRow (item);
144+ });
145+ if (!lstIndex.isEmpty ()) {
146+ m.addAction (tr (" Remove" ), [this , lstIndex]() {
147+ foreach (auto idx, lstIndex) {
148+ m_ModelWhite.removeRow (idx.row ());
149+ }
150+ });
151+ }
152+
153+ QPoint p = ui->lvWhtelist ->mapToGlobal (pos);
154+ m.exec (p);
155+ }
156+
157+ void CDlgSettings::slotBlackListContextMenuRequested (const QPoint& pos)
158+ {
159+ QMenu m;
160+ QItemSelectionModel* pSelect = ui->lvBlacklist ->selectionModel ();
161+ QModelIndexList lstIndex = pSelect->selectedRows ();
162+ m.addAction (tr (" Add" ), [this ](){
163+ QString szIp = QInputDialog::getText (this , tr (" Add black list" ), tr (" Add ip address:" ));
164+ QStandardItem* item = new QStandardItem (szIp);
165+ m_ModelBlack.appendRow (item);
166+ });
167+ if (!lstIndex.isEmpty ()) {
168+ m.addAction (tr (" Remove" ), [this , lstIndex]() {
169+ foreach (auto idx, lstIndex) {
170+ m_ModelBlack.removeRow (idx.row ());
171+ }
172+ });
173+ }
174+
175+ QPoint p = ui->lvBlacklist ->mapToGlobal (pos);
176+ m.exec (p);
177+ }
0 commit comments