view bellaciao.cpp @ 4:220e5619bf87

Profiles selection now fill contact list + new Jid class
author Goffi <goffi@goffi.org>
date Thu, 11 Aug 2011 00:02:25 +0200
parents fee291c8d42a
children 48045176d1c6
line wrap: on
line source

/*
Bellaciao: a Salut à Toi frontend
Copyright (C) 2011  Jérôme Poisson (goffi@goffi.org)

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "bellaciao.h"
#include "settings.h"
#include "jid.h"

Bellaciao* Bellaciao::_instance=0;

Bellaciao::Bellaciao()
    :QMainWindow(0)
{
    m_bridge = Bridge::getBridge();
    m_session = Session::getSession();

    //Ui
    setupUi(this);
    const QString & media_dir = m_bridge->getConfig("", "media_dir");
    setWindowIcon(QIcon(media_dir+"/icons/apps/32/sat.png"));
    m_contactList = new ContactList(this);
    

    //Signals & Slots
    connect(actionSettings, SIGNAL(triggered()), this, SLOT(showSettings()));
    connect(actionQuit, SIGNAL(triggered()), this, SLOT(quit()));

    //D-Bus Signals
    connect(m_bridge, SIGNAL(connected(QString)), this, SLOT(connected(QString)));
    connect(m_bridge, SIGNAL(newContact(const QString&, StringDict, const QStringList&, const QString&)), this, SLOT(addContact(const QString&, StringDict, const QStringList&, const QString&)));


    addDockWidget(Qt::LeftDockWidgetArea, m_contactList);
    
   
    //TODO: retrieve saved session's settings from SàT, and fill contactList 
        

}

Bellaciao* Bellaciao::getInstance()
{
    if (_instance==0)
        _instance = new Bellaciao;

    return _instance;
}

void Bellaciao::connectProfiles()
/* Connect profiles, and fill contact lists*/
{
    const QList<QString> & profiles = m_session->getProfiles();
    m_contactList->clear();
    foreach(const QString& profile, profiles) {
        //We autoconnect profile at the moment, behaviour can change in the future
        if (m_bridge->isConnected(profile))
            fillContactList(profile);
        m_bridge->connect(profile);
    }
}

void Bellaciao::fillContactList(const QString& profile)
{
   
    const QList<ContactT>& contacts = m_bridge->getContacts(profile);

    foreach(const ContactT &contact, contacts)
        m_contactList->addContact(contact.jid);

}

//slots

//D-Bus slots

void Bellaciao::connected(const QString & profile)
{
    fillContactList(profile);
}

void Bellaciao::addContact(const QString &s_jid, StringDict attributes, const QStringList &groups, const QString &profile)
{
    Jid jid = Jid(s_jid);
    m_contactList->addContact(jid);
}

void Bellaciao::quit()
{
    if ( QMessageBox::question (
            this,
            tr("Quit?"),
            tr("Do you really want to quit ?"),
            QMessageBox::Yes | QMessageBox::No,
            QMessageBox::No
            ) == QMessageBox::Yes
       )
    {
        qApp->quit();
    }
}

void Bellaciao::showSettings()
{
    Settings::getDialog()->show();
    Settings::getDialog()->raise();
}

void Bellaciao::on_actionToggle_fullscreen_triggered()
{
    if (isFullScreen())
        showNormal();
    else
        showFullScreen();
}