blob: 7e431eed4d4eb5c12c32ab457bdcb7190ba5102b [file] [log] [blame]
#include "chatroom-discovery-dialog.hpp"
#include "ui_chatroom-discovery-dialog.h"
namespace chronochat {
using ndn::Name;
ChatroomDiscoveryDialog::ChatroomDiscoveryDialog(QWidget* parent)
: QDialog(parent)
, ui(new Ui::ChatroomDiscoveryDialog)
, m_standardItemModel(new QStandardItemModel(0, 3, this))
, m_chatroomDiscoveryViewDialog(new ChatroomDiscoveryViewDialog)
{
ui->setupUi(this);
connect(ui->cancelButton, SIGNAL(clicked()),
this, SLOT(onCancelButtonClicked()));
connect(ui->joinButton, SIGNAL(clicked()),
this, SLOT(onJoinButtonClicked()));
connect(ui->viewButton, SIGNAL(clicked()),
this, SLOT(onViewButtonClicked()));
connect(ui->chatroomListView, SIGNAL(clicked(QModelIndex)),
this, SLOT(onChatroomListViewClicked(QModelIndex)));
connect(ui->chatroomListView, SIGNAL(doubleClicked(QModelIndex)),
this, SLOT(onChatroomListViewDoubleClicked(QModelIndex)));
updateChatroomList();
}
ChatroomDiscoveryDialog::~ChatroomDiscoveryDialog()
{
delete ui;
}
void
ChatroomDiscoveryDialog::updateChatroomList()
{
m_standardItemModel->clear();
m_standardItemModel
->setHorizontalHeaderItem(0, new QStandardItem(QString("Chatroom Name")));
m_standardItemModel
->setHorizontalHeaderItem(1, new QStandardItem(QString("Chatroom Trust Model")));
m_standardItemModel
->setHorizontalHeaderItem(2, new QStandardItem(QString("Participants or Contacts")));
QHeaderView *m_headerView = ui->chatroomListView->horizontalHeader();
m_headerView->setResizeMode((QHeaderView::ResizeMode)3);
m_headerView->setStretchLastSection(true);
ui->chatroomListView->setModel(m_standardItemModel);
int i = 0;
for (Chatrooms::const_iterator it = m_chatrooms.begin();
it != m_chatrooms.end(); ++it, ++i) {
QStandardItem *item = new QStandardItem(QString::fromStdString(it->first.toUri()));
item->setEditable(false);
m_standardItemModel->setItem(i, 0, item);
if (it->second.getTrustModel() == ChatroomInfo::TRUST_MODEL_WEBOFTRUST)
item = new QStandardItem(QString("Web of trust"));
else
item = new QStandardItem(QString("Hierarchical"));
item->setEditable(false);
m_standardItemModel->setItem(i, 1, item);
QString content;
for (std::list<Name>::const_iterator nameIt = it->second.getParticipants().begin();
nameIt != it->second.getParticipants().end(); nameIt++) {
content.append(QString::fromStdString(nameIt->toUri())).append(",");
}
item = new QStandardItem(content);
item->setEditable(false);
m_standardItemModel->setItem(i, 2, item);
}
}
void
ChatroomDiscoveryDialog::onDiscoverChatroomChanged(const chronochat::ChatroomInfo& info, bool isAdd)
{
if (isAdd)
m_chatrooms[info.getName()] = info;
else
m_chatrooms.erase(info.getName());
updateChatroomList();
}
void
ChatroomDiscoveryDialog::onCancelButtonClicked()
{
this->close();
}
void
ChatroomDiscoveryDialog::onJoinButtonClicked()
{
if(ui->chatroomListView->selectionModel()->selectedRows().size() == 0) {
QMessageBox::information(this, tr("ChronoChat"), tr("Please select a chatroom to join"));
}
else {
m_selectedRow = ui->chatroomListView->selectionModel()->selectedRows()[0].row();
QStandardItem* selectedChatroomName = m_standardItemModel->item(m_selectedRow, 0);
emit startChatroom(selectedChatroomName->text(), false);
{
// Tmp disabled
// QStandardItem* selectedChatroomTrustModel = m_standardItemModel->item(m_selectedRow, 1);
// if(selectedChatroomTrustModel->text() == "Hierarchical") {
// emit startChatroom(selectedChatroomName->text(), false);
// }
// else if(selectedChatroomTrustModel->text() == "Web of trust") {
// ChatroomDiscoveryLogic::ChatroomList::const_iterator it;
// it = m_chatroomList->find(Name::Component(selectedChatroomName->text().toStdString()));
// if(it->second.getContacts().size() == 0) {
// QMessageBox messageBox;
// messageBox.addButton(QMessageBox::Ok);
// messageBox.setIcon(QMessageBox::Information);
// messageBox.setText
// ("You do not have a contact in this chatroom. Please choose another chatroom to join");
// messageBox.exec();
// }
// else {
// m_sendInvitationRequestDialog->setChatroomName(selectedChatroomName->text());
// m_sendInvitationRequestDialog->setContacts(it->second.getContacts());
// m_sendInvitationRequestDialog->show();
// }
// }
}
}
}
void
ChatroomDiscoveryDialog::onChatroomListViewDoubleClicked(const QModelIndex &index)
{
onJoinButtonClicked();
}
void
ChatroomDiscoveryDialog::onChatroomListViewClicked(const QModelIndex &index)
{
ui->chatroomListView->selectRow(index.row());
m_selectedRow = index.row();
}
void
ChatroomDiscoveryDialog::onViewButtonClicked()
{
if(ui->chatroomListView->selectionModel()->selectedRows().size() == 0) {
QMessageBox messageBox;
messageBox.addButton(QMessageBox::Ok);
messageBox.setIcon(QMessageBox::Information);
messageBox.setText("Please select a chatroom to view");
messageBox.exec();
}
else {
m_selectedRow = ui->chatroomListView->selectionModel()->selectedRows()[0].row();
QStandardItem* selectedChatroomName = m_standardItemModel->item(m_selectedRow);
m_chatroomDiscoveryViewDialog->setChatroomName(selectedChatroomName->text());
// QStandardItem *m_selectedTrustModel = m_standardItemModel->item(m_selectedRow, 1);
// m_chatroomDiscoveryViewDialog->setChatroomTrustModel(m_selectedTrustModel->text());
//use chatroomlist as parameter to call set participants
//maybe for different chatroom with different trust model???
//participants can be contacts
Chatrooms::const_iterator it =
m_chatrooms.find(Name::Component(selectedChatroomName->text().toStdString()));
if (it != m_chatrooms.end()) {
m_chatroomDiscoveryViewDialog->setChatroomParticipants(it->second.getParticipants());
m_chatroomDiscoveryViewDialog->show();
}
}
}
} // namespace chronochat
#if WAF
#include "chatroom-discovery-dialog.moc"
#endif