DiscoInfoWindow::DiscoInfoWindow(IServiceDiscovery *ADiscovery, const Jid &AStreamJid, const Jid &AContactJid, const QString &ANode, QWidget *AParent) : QDialog(AParent) { REPORT_VIEW; ui.setupUi(this); setAttribute(Qt::WA_DeleteOnClose,true); setWindowTitle(tr("Discovery Info - %1").arg(AContactJid.uFull())); IconStorage::staticStorage(RSR_STORAGE_MENUICONS)->insertAutoIcon(this,MNI_SDISCOVERY_DISCOINFO,0,0,"windowIcon"); FNode = ANode; FFormMenu = NULL; FStreamJid = AStreamJid; FContactJid = AContactJid; FDiscovery = ADiscovery; FDataForms = PluginHelper::pluginInstance<IDataForms>(); ui.pbtExtensions->setEnabled(false); ui.lblError->setVisible(false); connect(FDiscovery->instance(),SIGNAL(discoInfoReceived(const IDiscoInfo &)),SLOT(onDiscoInfoReceived(const IDiscoInfo &))); connect(ui.pbtUpdate,SIGNAL(clicked()),SLOT(onUpdateClicked())); connect(ui.lwtFearures,SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),SLOT(onCurrentFeatureChanged(QListWidgetItem *, QListWidgetItem *))); connect(ui.lwtFearures,SIGNAL(itemDoubleClicked(QListWidgetItem *)),SLOT(onListItemDoubleClicked(QListWidgetItem *))); if (!FDiscovery->hasDiscoInfo(FStreamJid,FContactJid,ANode) || !FDiscovery->discoInfo(FStreamJid,FContactJid,ANode).error.isNull()) requestDiscoInfo(); else updateWindow(); }
void ClientInfo::showClientInfo(const Jid &AStreamJid, const Jid &AContactJid, int AInfoTypes) { if (AStreamJid.isValid() && AContactJid.isValid() && AInfoTypes>0) { ClientInfoDialog *dialog = FClientInfoDialogs.value(AContactJid,NULL); if (!dialog) { QString contactName = AContactJid.uNode(); if (FDiscovery!=NULL && FDiscovery->discoInfo(AStreamJid,AContactJid.bare()).identity.value(0).category=="conference") contactName = AContactJid.resource(); if (contactName.isEmpty()) contactName = FDiscovery!=NULL ? FDiscovery->discoInfo(AStreamJid,AContactJid).identity.value(0).name : AContactJid.domain(); if (FRosterManager) { IRoster *roster = FRosterManager->findRoster(AStreamJid); if (roster) { IRosterItem ritem = roster->findItem(AContactJid); if (!ritem.name.isEmpty()) contactName = ritem.name; } } dialog = new ClientInfoDialog(this,AStreamJid,AContactJid,!contactName.isEmpty() ? contactName : AContactJid.uFull(),AInfoTypes); connect(dialog,SIGNAL(clientInfoDialogClosed(const Jid &)),SLOT(onClientInfoDialogClosed(const Jid &))); FClientInfoDialogs.insert(AContactJid,dialog); dialog->show(); } else { dialog->setInfoTypes(dialog->infoTypes() | AInfoTypes); WidgetManager::showActivateRaiseWindow(dialog); } } }