diff options
Diffstat (limited to 'pica-client/contactlistwidget.cpp')
| -rw-r--r-- | pica-client/contactlistwidget.cpp | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/pica-client/contactlistwidget.cpp b/pica-client/contactlistwidget.cpp new file mode 100644 index 0000000..bff36bd --- /dev/null +++ b/pica-client/contactlistwidget.cpp @@ -0,0 +1,188 @@ +#include "contactlistwidget.h" +#include "globals.h" +#include "dialogs/viewcertdialog.h" +#include "msguirouter.h" +#include <QMenu> +#include <QMessageBox> +#include <QContextMenuEvent> +#include <QInputDialog> + +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())); + + connect(this, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(start_chat())); + + setContactsStorage(new Contacts(config_dbname, account_id)); +} + +ContactListWidget::~ContactListWidget() +{ + delete storage; +} + + +void ContactListWidget::contextMenuEvent(QContextMenuEvent *event) +{ + QMenu menu(this); + + if (this->itemAt(event->pos())) + menu.addAction(delcontactAct); + + menu.addAction(addcontactAct); + menu.addAction(startchatAct); + menu.addAction(viewcertAct); + menu.exec(event->globalPos()); +} + +void ContactListWidget::setContactsStorage(Contacts *ct) +{ + clear(); + // this->addItems(ct->GetContacts()); + storage=ct; + contact_records=ct->GetContacts(); + + for (int i=0;i<contact_records.size();i++) + { + addItem(QString("(%1) ").arg(contact_records[i].id)+contact_records[i].name); + wgitem_to_recs[this->item(i)]=&contact_records[i]; + this->item(i)->setStatusTip(QString().setNum(contact_records[i].id)); + } +} + +void ContactListWidget::add_contact() +{ + bool ok; + QString input=QInputDialog::getText(this,tr("Add New Contact"),tr("User ID: "),QLineEdit::Normal,NULL,&ok); + + if (ok && !input.isEmpty()) + { + quint32 user_id=input.toUInt(&ok); + + if (!ok) + { + QMessageBox mbx; + mbx.setIcon(QMessageBox::Warning); + mbx.setText(tr("Invalid user ID")); + mbx.exec(); + return; + } + + for(int i=0;i<contact_records.size();i++) + if (contact_records[i].id==user_id) + { + QMessageBox mbx; + mbx.setIcon(QMessageBox::Warning); + mbx.setText(tr("User \"(%1) %2\" already exists").arg(user_id).arg(contact_records[i].name)); + mbx.exec(); + return; + } + + Contacts::ContactRecord r; + + r.id=user_id; + r.name=""; + //void ContactListWidget::debug_onmsginput(QString msg, ChatWindow *sender_window) + //{ + // skynet->SendMessage(sender_window->getPeerId(), msg); + //} + + storage->Add(user_id); + + if (!storage->isOK()) + { + QMessageBox mbx; + mbx.setIcon(QMessageBox::Warning); + mbx.setText(storage->GetLastError()); + mbx.exec(); + return; + } + + addItem(QString("(%1) ").arg(user_id)); + 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()) + { + quint32 rm_id; + QListWidgetItem *rm_ptr; + + storage->Delete(rm_id = wgitem_to_recs[currentItem()]->id); + delete (rm_ptr=takeItem(currentRow())); + + for(int i=0;i<contact_records.size();i++) + { + if (contact_records[i].id==rm_id) + { + contact_records.removeAt(i); + break; + } + } + + wgitem_to_recs.remove(rm_ptr); + } + +} + +void ContactListWidget::start_chat() +{ +// ChatWindow *cw_debug_remove; + +// (cw_debug_remove = new ChatWindow(wgitem_to_recs[currentItem()]->id)) ->show();//debug + +// connect(cw_debug_remove, SIGNAL(msg_input(QString,ChatWindow*)), this, SLOT(debug_onmsginput(QString, ChatWindow*))); + + msguirouter->start_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(); + } +} |
