diff --git a/ConsoleClient.pro.user b/ConsoleClient.pro.user index efb7232..a5c4750 100644 --- a/ConsoleClient.pro.user +++ b/ConsoleClient.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/addgroupdialog.ui b/addgroupdialog.ui index dcea08a..166252e 100644 --- a/addgroupdialog.ui +++ b/addgroupdialog.ui @@ -151,12 +151,12 @@ 10 140 - 59 + 101 16 - TextLabel + Password diff --git a/mainwindow.cpp b/mainwindow.cpp index 50ee309..c9170e3 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -298,10 +298,8 @@ void MainWindow::on_action_Edit_triggered() g->User = dlg.User->text(); g->Pass = dlg.Pass->text(); - while (item->childCount()) - delete item->child(0); - - loadGroup(item); + if (reload) + reloadGroup(item); } WriteSettings(); @@ -521,50 +519,68 @@ void MainWindow::ConnContext(const QPoint &pos) item->setSelected(true); QMenu ctx("Connection actions", this); - if (item != 0) + if (!item) { - if (item->type() == GroupItem) + connect (ctx.addAction("Add ..."), SIGNAL(triggered()), this, SLOT(addRootConnection())); + connect (ctx.addAction("Add Group..."), SIGNAL(triggered()), ui->actionNew_group, SLOT(trigger())); + } + else + { + QUuid uuid = item->data(0, Qt::UserRole).toUuid(); + if (uuid.isNull()) + return; + + // Connection items + if (item->type() == ConnectionItem) { - if (item->childCount() > 0) + ConnectionData *conn = 0; + if (connections.contains(uuid)) + conn = connections[uuid]; + + if (conn != 0) + { + connect (ctx.addAction("Connect"), SIGNAL(triggered()), ui->action_Connect, SLOT(trigger())); + ctx.addSeparator(); + // Existing in the database and not dynamic + if (!conn->Dynamic) + connect (ctx.addAction("Edit ..."), SIGNAL(triggered()), ui->action_Edit, SLOT(trigger())); + } + + + // Orphan -> we can only delete, else normal connection + if (conn == 0 || (!conn->Dynamic)) + connect (ctx.addAction("Delete"), SIGNAL(triggered()), ui->actionDelete, SLOT(trigger())); + } + else if(item->type() == GroupItem) + { + GroupData *grp = 0; + if (groups.contains(uuid)) + grp = groups[uuid]; + + if (grp && item->childCount() > 0) { connect (ctx.addAction("Connect Group"), SIGNAL(triggered()), ui->action_Connect, SLOT(trigger())); ctx.addSeparator(); } - } - else - { - connect (ctx.addAction("Connect"), SIGNAL(triggered()), ui->action_Connect, SLOT(trigger())); - ctx.addSeparator(); - } - connect (ctx.addAction("Add ..."), SIGNAL(triggered()), ui->action_New, SLOT(trigger())); - } - else - { - connect (ctx.addAction("Add ..."), SIGNAL(triggered()), this, SLOT(addRootConnection())); - } - ConnectionData *conn = 0; - if (item) - { - QUuid uuid = item->data(0, Qt::UserRole).toUuid(); - if (!uuid.isNull() && connections.contains(uuid)) - conn = connections[uuid]; - } - if (item != 0 && (conn == 0 || conn->Dynamic == false)) - { - connect (ctx.addAction("Edit ..."), SIGNAL(triggered()), ui->action_Edit, SLOT(trigger())); + if (grp) + { + if (!grp->Dynamic) + connect (ctx.addAction("Add ..."), SIGNAL(triggered()), ui->action_New, SLOT(trigger())); + connect(ctx.addAction("Edit ..."), SIGNAL(triggered()), ui->action_Edit, SLOT(trigger())); + if (grp->Dynamic) + { + ctx.addSeparator(); + connect (ctx.addAction("Refresh"), SIGNAL(triggered()), this, SLOT(onRefreshDynamicItem())); + } + } + + if (item->childCount() == 0 || (grp && grp->Dynamic)) + connect (ctx.addAction("Delete"), SIGNAL(triggered()), ui->actionDelete_group, SLOT(trigger())); + } + ctx.addSeparator(); + connect (ctx.addAction("Add Group..."), SIGNAL(triggered()), ui->actionNew_group, SLOT(trigger())); } - if (item != 0 && item->type() != GroupItem) - { - if (conn == 0 || (!conn->Dynamic)) - connect (ctx.addAction("Delete"), SIGNAL(triggered()), ui->actionDelete, SLOT(trigger())); - } - else if (item != 0 && item->childCount() == 0) - { - connect (ctx.addAction("Delete"), SIGNAL(triggered()), ui->actionDelete_group, SLOT(trigger())); - } - ctx.addSeparator(); - connect (ctx.addAction("Add Group..."), SIGNAL(triggered()), ui->actionNew_group, SLOT(trigger())); ctx.exec(ui->connList->mapToGlobal(pos)); } @@ -650,8 +666,10 @@ GroupData *MainWindow::createGroup() { GroupData *grp = new GroupData(); + grp->Uuid = QUuid::createUuid(); grp->Name = "New group"; + grp->Dynamic = false; groups[grp->Uuid] = grp; @@ -909,11 +927,7 @@ void MainWindow::groupLoaded() QList pieces = line.split(" "); if (pieces.count() < 2) continue; - QString name = pieces[0]; - if (name.trimmed() == "") - continue; - - QString host = pieces[1]; + QString host = pieces[0]; int port = 9000; QList addrparts = host.split(":"); @@ -923,6 +937,13 @@ void MainWindow::groupLoaded() port = addrparts[1].toInt(); } + pieces.removeFirst(); + QString name = pieces.join(" "); + if (name.trimmed() == "") + continue; + + name[0] = name[0].toUpper(); + ConnectionData *c = new ConnectionData(); c->Name = name; c->Uuid = QUuid::createUuid(); @@ -954,3 +975,33 @@ void MainWindow::on_action_About_triggered() dlg.exec(); } + +void MainWindow::onRefreshDynamicItem() +{ + QTreeWidgetItem *item = selectedItem(); + + if (item == 0 || item->type() != GroupItem) + return; + + reloadGroup(item); +} + +void MainWindow::clearGroup(QTreeWidgetItem *item) +{ + while (item->childCount()) + delete item->child(0); + + QUuid id = item->data(0, Qt::UserRole).toUuid(); + + for (QMap::Iterator it = connections.begin() ; it != connections.end() ; ++it) + { + if ((*it)->Group == id) + connections.remove(it.key()); + } +} + +void MainWindow::reloadGroup(QTreeWidgetItem *item) +{ + clearGroup(item); + loadGroup(item); +} diff --git a/mainwindow.h b/mainwindow.h index d2a66e7..93a3400 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -81,11 +81,14 @@ protected: void loadGroup(QTreeWidgetItem *item); void showEvent(QShowEvent *event); + void reloadGroup(QTreeWidgetItem *item); + void clearGroup(QTreeWidgetItem *item); protected slots: void addRootConnection(); void addChildConnection(); void treeWidgetItemChanged(QTreeWidgetItem *item, int column); void groupLoaded(); + void onRefreshDynamicItem(); private: QTreeWidgetItem *findOrAddGroup(QString groupName); Ui::MainWindow *ui;