diff options
Diffstat (limited to 'pica-client')
| -rw-r--r-- | pica-client/dialogs/nodesdialog.cpp | 48 | ||||
| -rw-r--r-- | pica-client/dialogs/nodesdialog.h | 4 | ||||
| -rw-r--r-- | pica-client/nodes.cpp | 12 | ||||
| -rw-r--r-- | pica-client/nodes.h | 1 |
4 files changed, 65 insertions, 0 deletions
diff --git a/pica-client/dialogs/nodesdialog.cpp b/pica-client/dialogs/nodesdialog.cpp index 6b4ce74..2a3eb86 100644 --- a/pica-client/dialogs/nodesdialog.cpp +++ b/pica-client/dialogs/nodesdialog.cpp @@ -25,6 +25,9 @@ #include <QHBoxLayout> #include <QListWidget> #include <QMenu> +#include <QRegExp> +#include <QMessageBox> +#include <QInputDialog> NodesDialog::NodesDialog(QWidget *parent) : QDialog(parent) @@ -32,12 +35,17 @@ NodesDialog::NodesDialog(QWidget *parent) : Nodes nodes(config_dbname); lwNodes = new QListWidget(this); pbOk = new QPushButton(tr("OK"), this); + pbAdd = new QPushButton(tr("Add"), this); + pbDelete = new QPushButton(tr("Delete"), this); QHBoxLayout *lh = new QHBoxLayout(this); QVBoxLayout *lv = new QVBoxLayout(); lh->addWidget(lwNodes, 4, Qt::AlignLeft); + lv->addWidget(pbAdd, 0, Qt::AlignTop); + lv->addWidget(pbDelete, 0, Qt::AlignTop); lv->addWidget(pbOk, 0, Qt::AlignTop); + lv->addStretch(); lh->addLayout(lv, 0); setLayout(lh); @@ -51,6 +59,8 @@ NodesDialog::NodesDialog(QWidget *parent) : } connect(pbOk, SIGNAL(clicked()), this, SLOT(OK())); + connect(pbDelete, SIGNAL(clicked()), this, SLOT(Delete())); + connect(pbAdd, SIGNAL(clicked()), this, SLOT(Add())); setWindowTitle(tr("Known nodes")); } @@ -59,3 +69,41 @@ void NodesDialog::OK() { done(0); } + +void NodesDialog::Add() +{ + QRegExp rx("(.+):(\\d{1,5})"); + bool ok; + QString input = QInputDialog::getText(this, tr("Add New Node"), + tr("hostname:port (ex. picanode.example:com:2299 1.2.3.4:1234)"), QLineEdit::Normal, NULL, &ok); + + if (ok && rx.exactMatch(input)) + { + Nodes nodes(config_dbname); + Nodes::NodeRecord nr; + + nr.address = rx.cap(1); + nr.port = rx.cap(2).toUInt(); + + nodes.Add(nr); + new QListWidgetItem(nr.address.append(':').append(QString::number(nr.port)), lwNodes); + } +} + +void NodesDialog::Delete() +{ + if (lwNodes->currentItem()) + { + Nodes nodes(config_dbname); + Nodes::NodeRecord nr; + QRegExp rx("(.+):(\\d{1,5})"); + + if (rx.exactMatch(lwNodes->currentItem()->text())) + { + nr.address = rx.cap(1); + nr.port = rx.cap(2).toUInt(); + nodes.Delete(nr); + delete lwNodes->takeItem(lwNodes->currentRow()); + } + } +} diff --git a/pica-client/dialogs/nodesdialog.h b/pica-client/dialogs/nodesdialog.h index 35ecbe8..8eca10d 100644 --- a/pica-client/dialogs/nodesdialog.h +++ b/pica-client/dialogs/nodesdialog.h @@ -34,10 +34,14 @@ signals: public slots: private slots: void OK(); + void Delete(); + void Add(); private: QListWidget *lwNodes; QPushButton *pbOk; + QPushButton *pbDelete; + QPushButton *pbAdd; }; #endif // NODESDIALOG_H diff --git a/pica-client/nodes.cpp b/pica-client/nodes.cpp index 983bb56..1c7fae0 100644 --- a/pica-client/nodes.cpp +++ b/pica-client/nodes.cpp @@ -42,6 +42,18 @@ void Nodes::Add(NodeRecord &n) lasterr = query.lastError(); } +void Nodes::Delete(NodeRecord &n) +{ + QSqlQuery query; + + query.prepare("delete from nodes where address = :addr and port = :port"); + query.bindValue(":addr", n.address); + query.bindValue(":port", n.port); + query.exec(); + + lasterr = query.lastError(); +} + QList<Nodes::NodeRecord> Nodes::GetNodes() { QList<NodeRecord> L; diff --git a/pica-client/nodes.h b/pica-client/nodes.h index 3ddca51..e15988b 100644 --- a/pica-client/nodes.h +++ b/pica-client/nodes.h @@ -34,6 +34,7 @@ public: Nodes(QString storage); void Add(NodeRecord &n); + void Delete(NodeRecord &n); QList<NodeRecord> GetNodes(); void MakeClean();//remove old inactive node records void UpdateStatus(NodeRecord &n, bool alive); |
