1 #include "accountdialog.h"
2 #include "ui_accountdialog.h"
3 #include "newaccountdialog.h"
5 #include <QInputDialog>
9 #include <QtConcurrentMap>
13 QListWidgetItem asyncTestItem(const QListWidgetItem &item)
16 QListWidgetItem item2= item;
17 item2.setText("boby");
26 AccountDialog::AccountDialog(QWidget *parent) :
28 ui(new Ui::AccountDialog)
32 mFuturWatcher = new QFutureWatcher<QListWidgetItem>(this);
33 connect(mFuturWatcher,SIGNAL(resultReadyAt(int)),this,SLOT(setAsyncItem(int)));
35 connect(ui->addButton,SIGNAL(clicked()),this,SLOT(add()));
36 connect(ui->editButton,SIGNAL(clicked()),this,SLOT(edit()));
37 connect(ui->remButton,SIGNAL(clicked()),this,SLOT(rem()));
38 connect(ui->useButton,SIGNAL(clicked()),this,SLOT(use()));
39 connect(ui->listWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(enableUi()));
45 AccountDialog::~AccountDialog()
50 void AccountDialog::add()
53 NewAccountDialog *dialog = new NewAccountDialog(this);
57 QString AccountDialog::currentIp()
61 QString useKey = settings.value("config/currentKey").toString();
63 if ( !useKey.isEmpty())
64 useIp = settings.value("account/"+useKey).toString();
66 else return QString();
71 void AccountDialog::load()
73 ui->editButton->setEnabled(false);
74 ui->remButton->setEnabled(false);
75 ui->useButton->setEnabled(false);
76 ui->listWidget->clear(); // tjr effacer , sinon on rajoute
80 QString useKey = settings.value("config/currentKey").toString();
82 QList <QListWidgetItem> asycItems;
84 settings.beginGroup("account");
85 foreach ( QString key, settings.allKeys())
87 QListWidgetItem * item = new QListWidgetItem;
90 item->setData(Qt::UserRole, settings.value(key));
92 QFont font = item->font();
96 ui->listWidget->addItem(item);
97 asycItems.append(*item);
102 // ... create and add in the list widget
104 // QFuture<QListWidgetItem> itemFutur = QtConcurrent::mapped(asycItems, asyncTestItem);
107 mFuturWatcher->setFuture(QtConcurrent::mapped(asycItems, asyncTestItem));
110 QListWidgetItem AccountDialog::asyncTestItem(const QListWidgetItem& item)
112 //==========> NEED TO USE POINTER TO AVOID setAsyncItem! But I don't know how;..
113 QListWidgetItem newItem = item;
115 QTcpSocket * socket = new QTcpSocket;
117 QString host = settings.value("account/"+item.text()).toString();
118 QStringList hostSplit = host.split(":");
119 QString ip = hostSplit.at(0);
120 QString port = hostSplit.at(1);
123 socket->connectToHost(ip,port.toInt());
125 if (socket->waitForConnected(1000))
126 newItem.setIcon(QIcon::fromTheme("widgets_tickmark_list"));
128 newItem.setIcon(QIcon::fromTheme("statusarea_presence_busy_error"));
137 void AccountDialog::setAsyncItem(int row) // EDIT THE ROW AFTER ASYNC FUNCTION FINISHED
139 QListWidgetItem newItem = mFuturWatcher->resultAt(row);
140 QListWidgetItem * item = ui->listWidget->item(row);
142 item->setIcon(newItem.icon());
150 void AccountDialog::edit()
152 QString currentIp = ui->listWidget->currentItem()->data(Qt::UserRole).toString();
153 QString currentKey = ui->listWidget->currentItem()->text();
155 NewAccountDialog *dialog = new NewAccountDialog(this);
156 dialog->edit(currentKey, currentIp);
162 void AccountDialog::rem()
164 QString key = ui->listWidget->currentItem()->text();
167 settings.beginGroup("account");
168 settings.remove(key);
171 load(); // On recharge les compte
174 void AccountDialog::use()
176 QString currentKey = ui->listWidget->currentItem()->text();
178 settings.setValue("config/currentKey", currentKey);
182 void AccountDialog::enableUi()
184 ui->editButton->setEnabled(true);
185 ui->remButton->setEnabled(true);
186 ui->useButton->setEnabled(true);