Exemple #1
0
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);
  }));
}
Exemple #2
0
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();
        }
    }
Exemple #3
0
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;
}