#include <QSettings>
#include <QTcpSocket>
#include <QFuture>
-#include <QtConcurrentRun>
+#include <QtConcurrentMap>
+
+
+
+QListWidgetItem asyncTestItem(const QListWidgetItem &item)
+{
+
+ QListWidgetItem item2= item;
+ item2.setText("boby");
+
+ return item;
+
+}
+
+
+
+
AccountDialog::AccountDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::AccountDialog)
{
ui->setupUi(this);
+ mFuturWatcher = new QFutureWatcher<QListWidgetItem>(this);
+ connect(mFuturWatcher,SIGNAL(resultReadyAt(int)),this,SLOT(setAsyncItem(int)));
+
connect(ui->addButton,SIGNAL(clicked()),this,SLOT(add()));
connect(ui->editButton,SIGNAL(clicked()),this,SLOT(edit()));
connect(ui->remButton,SIGNAL(clicked()),this,SLOT(rem()));
dialog->exec();
load();
}
+QString AccountDialog::currentIp()
+{
+
+ QSettings settings;
+ QString useKey = settings.value("config/currentKey").toString();
+ QString useIp ;
+ if ( !useKey.isEmpty())
+ useIp = settings.value("account/"+useKey).toString();
+
+ else return QString();
+
+ return useIp;
+}
void AccountDialog::load()
{
ui->listWidget->clear(); // tjr effacer , sinon on rajoute
QSettings settings;
- settings.beginGroup("config");
- QString useKey = settings.value("currentKey").toString();
- settings.endGroup();
+
+ QString useKey = settings.value("config/currentKey").toString();
+
+ QList <QListWidgetItem> asycItems;
settings.beginGroup("account");
foreach ( QString key, settings.allKeys())
item->setFont(font);
}
ui->listWidget->addItem(item);
+ asycItems.append(*item);
}
settings.endGroup();
+ // ... create and add in the list widget
+
+ // QFuture<QListWidgetItem> itemFutur = QtConcurrent::mapped(asycItems, asyncTestItem);
-}
+ mFuturWatcher->setFuture(QtConcurrent::mapped(asycItems, asyncTestItem));
+}
-void AccountDialog::asyncTestConnection()
+QListWidgetItem AccountDialog::asyncTestItem(const QListWidgetItem& item)
{
+ //==========> NEED TO USE POINTER TO AVOID setAsyncItem! But I don't know how;..
+ QListWidgetItem newItem = item;
+
+ QTcpSocket * socket = new QTcpSocket;
QSettings settings;
- settings.beginGroup("account");
+ QString host = settings.value("account/"+item.text()).toString();
+ QStringList hostSplit = host.split(":");
+ QString ip = hostSplit.at(0);
+ QString port = hostSplit.at(1);
- for ( int i=0; i<ui->listWidget->count(); ++i)
- {
- QListWidgetItem * item = ui->listWidget->item(i);
- QString key = item->text();
- QString hostIp = settings.value(key).toString();
- qDebug()<<hostIp;
- QTcpSocket * socket = new QTcpSocket(this);
- socket->connectToHost(hostIp, 80);
+ socket->connectToHost(ip,port.toInt());
- if (socket->waitForConnected(1000))
- item->setBackgroundColor(Qt::green);
- else
- item->setBackgroundColor(Qt::red);
+ if (socket->waitForConnected(1000))
+ newItem.setIcon(QIcon::fromTheme("widgets_tickmark_list"));
+ else
+ newItem.setIcon(QIcon::fromTheme("statusarea_presence_busy_error"));
+ return newItem;
+
+
+}
+
+
+
+void AccountDialog::setAsyncItem(int row) // EDIT THE ROW AFTER ASYNC FUNCTION FINISHED
+{
+ QListWidgetItem newItem = mFuturWatcher->resultAt(row);
+ QListWidgetItem * item = ui->listWidget->item(row);
+
+ item->setIcon(newItem.icon());
- }
- settings.endGroup();
}
+
void AccountDialog::edit()
{
QString currentIp = ui->listWidget->currentItem()->data(Qt::UserRole).toString();
void AccountDialog::use()
{
QString currentKey = ui->listWidget->currentItem()->text();
-
QSettings settings;
- settings.beginGroup("config");
- settings.setValue("currentKey", currentKey);
- settings.endGroup();
-
+ settings.setValue("config/currentKey", currentKey);
load();
}