#include "contactlistwidget.h" #include "globals.h" #include "dialogs/viewcertdialog.h" #include "dialogs/showpicaiddialog.h" #include "msguirouter.h" #include #include #include #include ContactListWidget::ContactListWidget(QWidget *parent) : QListWidget(parent) { addcontactAct = new QAction(tr("&Add Contact..."), this); addcontactAct->setStatusTip(tr("add new contact")); connect(addcontactAct,SIGNAL(triggered()),this,SLOT(add_contact())); delcontactAct = new QAction(tr("&Delete Contact"),this); connect(delcontactAct,SIGNAL(triggered()),this,SLOT(del_contact())); startchatAct = new QAction(tr("Start &Chat"), this); connect(startchatAct, SIGNAL(triggered()), this, SLOT(start_chat())); viewcertAct = new QAction(tr("&View Certificate"), this); connect(viewcertAct, SIGNAL(triggered()), this, SLOT(view_cert())); showidAct = new QAction(tr("Show Pica Pica &ID"), this); connect(showidAct, SIGNAL(triggered()), this, SLOT(show_id())); connect(this, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(start_chat())); setContactsStorage(new Contacts(config_dbname, Accounts::GetCurrentAccount().id)); } ContactListWidget::~ContactListWidget() { delete storage; } void ContactListWidget::contextMenuEvent(QContextMenuEvent *event) { QMenu menu(this); if (this->itemAt(event->pos())) menu.addAction(delcontactAct); menu.addAction(addcontactAct); if (this->itemAt(event->pos())) menu.addAction(startchatAct); if (this->itemAt(event->pos())) menu.addAction(viewcertAct); if (this->itemAt(event->pos())) menu.addAction(showidAct); menu.exec(event->globalPos()); } void ContactListWidget::setContactsStorage(Contacts *ct) { clear(); // this->addItems(ct->GetContacts()); storage=ct; contact_records=ct->GetContacts(); for (int i=0;iitem(i)]=&contact_records[i]; this->item(i)->setStatusTip(contact_records[i].id.toBase64()); this->item(i)->setToolTip(contact_records[i].id.toBase64().constData()); } } void ContactListWidget::add_contact() { bool ok; QString input=QInputDialog::getText(this,tr("Add New Contact"),tr("Pica Pica ID: "),QLineEdit::Normal,NULL,&ok); if (ok && !input.isEmpty()) { QByteArray user_id = QByteArray::fromBase64(input.toAscii()).left(PICA_ID_SIZE); if (user_id.size() != PICA_ID_SIZE) { QMessageBox mbx; mbx.setIcon(QMessageBox::Warning); mbx.setText(tr("Invalid user ID")); mbx.exec(); return; } for(int i=0;iAdd(user_id); if (!storage->isOK()) { QMessageBox mbx; mbx.setIcon(QMessageBox::Warning); mbx.setText(storage->GetLastError()); mbx.exec(); return; } addItem(QString("(%1) ").arg(user_id.toBase64().constData())); contact_records.append(r); wgitem_to_recs[this->item(this->count()-1)]=&contact_records.last(); } } void ContactListWidget::del_contact() { QMessageBox mbx; mbx.setText(QString(tr("Are you sure you want to remove user \"%1\" from your contact list?")).arg(currentItem()->text())); mbx.setIcon(QMessageBox::Question); mbx.addButton(QMessageBox::Yes); mbx.addButton(QMessageBox::No); mbx.setDefaultButton(QMessageBox::No); if (QMessageBox::Yes==mbx.exec()) { QByteArray rm_id; QListWidgetItem *rm_ptr; storage->Delete(rm_id = wgitem_to_recs[currentItem()]->id); delete (rm_ptr=takeItem(currentRow())); for(int i=0;istart_chat(wgitem_to_recs[currentItem()]->id); } void ContactListWidget::view_cert() { QString cert_pem = storage->GetContactCert(wgitem_to_recs[currentItem()]->id); if (!storage->isOK()) { QMessageBox mbx; mbx.setText(storage->GetLastError()); mbx.exec(); } if (!cert_pem.isEmpty()) { ViewCertDialog vcd; vcd.SetCert(cert_pem); vcd.exec(); } else { QMessageBox mbx; mbx.setText(tr("Certificate is not stored for this contact yet")); mbx.exec(); } } void ContactListWidget::show_id() { ShowPicaIdDialog d(wgitem_to_recs[currentItem()]->name, wgitem_to_recs[currentItem()]->id, tr("Contact's ID")); d.exec(); } void ContactListWidget::Reload() { setContactsStorage(storage); }