NavigationBar::NavigationBar(System const &system, Parent *parent) : Widget(system, parent) , modeChangedSignal() , languageChangedSignal() , languageItem(nullptr) , modeItem(nullptr) { // bar & menus auto bar = new Bar{this}; auto searchEdit = new LineEdit; auto contentsMenu = new Menu; auto languageMenu = new Menu; auto modeMenu = new Menu; searchEdit->setEmptyText(tr("Search")); bar->setResponsive(true); bar->addSearch(searchEdit); bar->addMenu(contentsMenu); bar->addMenu(languageMenu); bar->addMenu(modeMenu); // items languageItem = new Item{""}; modeItem = new Item{""}; Link contentsLink(Link::InternalPath, "/index"); contentsMenu->addItem("Index", new Text(tr("Index")))->setLink(contentsLink); contentsMenu->itemAt(0)->setSelectable(false); languageMenu->addItem(languageItem); modeMenu->addItem(modeItem); // popup menus auto languagePopup = new PopupMenu; auto modePopup = new PopupMenu; languageItem->setMenu(languagePopup); modeItem->setMenu(modePopup); // languages languageItem->setText(system.languageStr()); auto count = system.languageCount(); for (decltype(count) i = 0; i < count; ++i) { auto str = system.languageStr(i); auto tag = system.languageTag(i); auto item = new Item(str); languagePopup->addItem(item); item->clicked().connect(std::bind([this](String const &tag, String const &str) { languageChanged().emit(tag); languageItem->setText(str); }, tag, str)); } // modes auto guestItem = new Item{""}; auto adminItem = new Item{""}; modeItem->setText(tr("Guest")); guestItem->setText(tr("Guest")); adminItem->setText(tr("Admin")); modePopup->addItem(guestItem); modePopup->addItem(adminItem); guestItem->clicked().connect(std::bind([this]{ modeChanged().emit(String{"guest"}); modeItem->setText(tr("Guest")); })); adminItem->clicked().connect(std::bind([this]{ modeChanged().emit(String{"admin"}); modeItem->setText(tr("Admin")); })); // search searchEdit->enterPressed().connect(std::bind([this, searchEdit]{ auto str = searchEdit->text().toUTF8(); if (str.empty()) return; search().emit(str); })); }
void *JabberBrowser::processEvent(Event *e) { if (e->type() == EventAgentInfo){ JabberAgentInfo *data = (JabberAgentInfo*)(e->param()); if (m_search_id == data->ReqID.ptr){ if (data->Type.ptr == NULL){ if (data->nOptions.value){ QString err; if (data->Label.ptr && *data->Label.ptr) err = i18n(data->Label.ptr); if (err.isEmpty()) err = i18n("Error %1") .arg(data->nOptions.value); m_search_id = ""; Command cmd; cmd->id = CmdBrowseSearch; cmd->param = this; Event eWidget(EventCommandWidget, cmd); QWidget *parent = (QWidget*)(eWidget.process()); if (parent == NULL) parent = this; BalloonMsg::message(err, parent); delete m_search; }else{ m_search->jidSearch->addWidget(data); connect(this, SIGNAL(addSearch(QWidget*, Client*, const QString&)), topLevelWidget(), SLOT(addSearch(QWidget*, Client*, const QString&))); emit addSearch(m_search, m_client, m_search->m_jid); disconnect(this, SIGNAL(addSearch(QWidget*, Client*, const QString&)), topLevelWidget(), SLOT(addSearch(QWidget*, Client*, const QString&))); } m_search_id = ""; m_search = NULL; return e->param(); } m_search->jidSearch->addWidget(data); return e->param(); } if (m_reg_id == data->ReqID.ptr){ if (data->Type.ptr == NULL){ if (data->nOptions.value){ QString err; if (data->Label.ptr && *data->Label.ptr) err = i18n(data->Label.ptr); if (err.isEmpty()) err = i18n("Error %1") .arg(data->nOptions.value); m_reg_id = ""; delete m_reg; m_reg = NULL; Command cmd; cmd->id = CmdRegister; cmd->param = this; Event eWidget(EventCommandWidget, cmd); QWidget *parent = (QWidget*)(eWidget.process()); if (parent == NULL) parent = this; BalloonMsg::message(err, parent); }else{ m_reg->m_search->addWidget(data); QTimer::singleShot(0, this, SLOT(showReg())); } m_reg_id = ""; return e->param(); } m_reg->m_search->addWidget(data); return e->param(); } if (m_config_id == data->ReqID.ptr){ if (data->Type.ptr == NULL){ if (data->nOptions.value){ QString err; if (data->Label.ptr && *data->Label.ptr) err = i18n(data->Label.ptr); if (err.isEmpty()) err = i18n("Error %1") .arg(data->nOptions.value); m_config_id = ""; delete m_config; m_config = NULL; Command cmd; cmd->id = CmdBrowseConfigure; cmd->param = this; Event eWidget(EventCommandWidget, cmd); QWidget *parent = (QWidget*)(eWidget.process()); if (parent == NULL) parent = this; BalloonMsg::message(err, parent); }else{ m_config->m_search->addWidget(data); QTimer::singleShot(0, this, SLOT(showConfig())); } m_config_id = ""; return e->param(); } m_config->m_search->addWidget(data); return e->param(); } }
void *JabberAdd::processEvent(Event *e) { if (e->type() == EventDiscoItem){ DiscoItem *item = (DiscoItem*)(e->param()); if (m_id_browse == item->id){ if (item->jid.empty()){ if (!item->node.empty()){ QString url; if (m_client->getUseVHost()) url = QString::fromUtf8(m_client->getVHost()); if (url.isEmpty()) url = QString::fromUtf8(m_client->getServer()); m_id_disco = m_client->discoItems(url.utf8(), ""); } m_id_browse = ""; checkDone(); return e->param(); } addSearch(item->jid.c_str(), "", item->features.c_str(), item->type.c_str()); return e->param(); } if (m_id_disco == item->id){ if (item->jid.empty()){ m_id_disco = ""; checkDone(); return e->param(); } ItemInfo info; info.jid = item->jid; info.node = item->node; info.id = m_client->discoInfo(info.jid.c_str(), info.node.c_str()); m_disco_items.push_back(info); return e->param(); } list<ItemInfo>::iterator it; for (it = m_disco_items.begin(); it != m_disco_items.end(); ++it){ if ((*it).id == item->id){ addSearch((*it).jid.c_str(), (*it).node.c_str(), item->features.c_str(), item->type.c_str()); m_disco_items.erase(it); checkDone(); break; } } } if (e->type() == EventAgentInfo){ JabberAgentInfo *data = (JabberAgentInfo*)(e->param()); list<AgentSearch>::iterator it; for (it = m_agents.begin(); it != m_agents.end(); ++it) if ((*it).id_info == data->ReqID.ptr) break; if (it == m_agents.end()) return NULL; if (data->Type.ptr == NULL){ (*it).id_info = ""; if (m_first.isEmpty()) (*it).fill |= FILL_FIRST; if (m_last.isEmpty()) (*it).fill |= FILL_LAST; if (m_nick.isEmpty()) (*it).fill |= FILL_NICK; if (m_mail.isEmpty()) (*it).fill |= FILL_MAIL; if ((*it).fill != FILL_ALL){ m_agents.erase(it); checkDone(); return e->param();; } (*it).id_search = m_client->search((*it).jid.c_str(), (*it).node.c_str(), (*it).condition.utf8()); if ((*it).condition.left(6) != "x:data"){ addAttr("", i18n("JID")); addAttr("first", i18n("First name")); addAttr("last", i18n("Last name")); addAttr("nick", i18n("Nick")); addAttr("email", i18n("E-Mail")); addAttrs(); } return e->param(); } if (!strcmp(data->Type.ptr, "x")){ (*it).condition = "x:data"; (*it).fill = 0; return e->param(); } QString value; QString field; if (data->Field.ptr && (!strcmp(data->Type.ptr, "text-single") || !strcmp(data->Type.ptr, "text-private") || !strcmp(data->Type.ptr, "text-multi"))){ field = data->Field.ptr; if (!strcmp(data->Field.ptr, "first") && !m_first.isEmpty()){ value = m_first; (*it).fill |= FILL_FIRST; } if (!strcmp(data->Field.ptr, "last") && !m_last.isEmpty()){ value = m_last; (*it).fill |= FILL_LAST; } if ((!strcmp(data->Field.ptr, "nickname") || !strcmp(data->Field.ptr, "nick")) && !m_nick.isEmpty()){ value = m_nick; (*it).fill |= FILL_NICK; } if (!strcmp(data->Field.ptr, "email") && !m_mail.isEmpty()){ value = m_mail; (*it).fill |= FILL_MAIL; } } if (!strcmp(data->Type.ptr, "first") && !m_first.isEmpty()){ field = data->Type.ptr; value = m_first; (*it).fill |= FILL_FIRST; } if (!strcmp(data->Type.ptr, "last") && !m_last.isEmpty()){ field = data->Type.ptr; value = m_last; (*it).fill |= FILL_LAST; } if ((!strcmp(data->Type.ptr, "nickname") || !strcmp(data->Type.ptr, "nick")) && !m_nick.isEmpty()){ field = data->Type.ptr; value = m_nick; (*it).fill |= FILL_NICK; } if (!strcmp(data->Type.ptr, "email") && !m_mail.isEmpty()){ field = data->Type.ptr; value = m_mail; (*it).fill |= FILL_MAIL; } if (!value.isEmpty()){ if (!(*it).condition.isEmpty()) (*it).condition += ";"; (*it).condition += field; (*it).condition += "="; (*it).condition += quoteChars(value, ";"); } return e->param(); } if (e->type() == EventSearch){ JabberSearchData *data = (JabberSearchData*)(e->param()); list<AgentSearch>::iterator it; for (it = m_agents.begin(); it != m_agents.end(); ++it) if ((*it).id_search == data->ID.ptr) break; if (it == m_agents.end()) return NULL; if (data->JID.ptr == NULL){ addAttr("", i18n("JID")); for (unsigned i = 0; i < data->nFields.value; i++){ addAttr(get_str(data->Fields, i * 2), get_str(data->Fields, i * 2 + 1)); (*it).fields.push_back(get_str(data->Fields, i * 2)); } addAttrs(); return e->param(); } QString icon = "Jabber"; if ((*it).type == "icq"){ icon = "ICQ"; }else if ((*it).type == "aim"){ icon = "AIM"; }else if ((*it).type == "msn"){ icon = "MSN"; }else if ((*it).type == "yahoo"){ icon = "Yahoo!"; } if (data->Status.ptr){ if (!strcmp(data->Status.ptr, "online")){ icon += "_online"; }else{ icon += "_offline"; } } QStringList l; l.append(icon); l.append(QString::fromUtf8(data->JID.ptr)); for (unsigned i = 0; i < m_fields.size(); i++){ QString v; if (m_fields[i] == ""){ v = QString::fromUtf8(data->JID.ptr); }else if ((m_fields[i] == "first") && data->First.ptr){ v = QString::fromUtf8(data->First.ptr); }else if ((m_fields[i] == "last") && data->Last.ptr){ v = QString::fromUtf8(data->Last.ptr); }else if ((m_fields[i] == "nick") && data->Nick.ptr){ v = QString::fromUtf8(data->Nick.ptr); }else if ((m_fields[i] == "email") && data->EMail.ptr){ v = QString::fromUtf8(data->EMail.ptr); }else{ for (unsigned n = 0; n < (*it).fields.size(); n++){ if ((*it).fields[n] == m_fields[i]){ v = QString::fromUtf8(get_str(data->Fields, n)); break; } } } l.append(v); } emit addItem(l, this); } if (e->type() == EventSearchDone){ const char *id = (const char*)(e->param()); list<AgentSearch>::iterator it; for (it = m_agents.begin(); it != m_agents.end(); ++it) if ((*it).id_search == id) break; if (it == m_agents.end()) return NULL; m_agents.erase(it); checkDone(); return e->param(); } return NULL; }