#include "squawk.h" #include "ui_squawk.h" #include #include Squawk::Squawk(QWidget *parent) : QMainWindow(parent), m_ui(new Ui::Squawk), accounts(0), rosterModel() { m_ui->setupUi(this); m_ui->roster->setModel(&rosterModel); for (int i = 0; i < Shared::availabilityNames.size(); ++i) { m_ui->comboBox->addItem(QIcon::fromTheme(Shared::availabilityThemeIcons[i]), Shared::availabilityNames[i]); } m_ui->comboBox->setCurrentIndex(Shared::offline); connect(m_ui->actionAccounts, SIGNAL(triggered()), this, SLOT(onAccounts())); connect(m_ui->comboBox, SIGNAL(activated(int)), this, SLOT(onComboboxActivated(int))); //m_ui->mainToolBar->addWidget(m_ui->comboBox); } Squawk::~Squawk() { } void Squawk::onAccounts() { if (accounts == 0) { accounts = new Accounts(rosterModel.accountsModel, this); accounts->setAttribute(Qt::WA_DeleteOnClose); connect(accounts, SIGNAL(destroyed(QObject*)), this, SLOT(onAccountsClosed(QObject*))); connect(accounts, SIGNAL(newAccount(const QMap&)), this, SIGNAL(newAccountRequest(const QMap&))); accounts->show(); } else { accounts->show(); accounts->raise(); accounts->activateWindow(); } } void Squawk::closeEvent(QCloseEvent* event) { if (accounts != 0) { accounts->close(); } QMainWindow::closeEvent(event); } void Squawk::onAccountsClosed(QObject* parent) { accounts = 0; } void Squawk::newAccount(const QMap& account) { rosterModel.addAccount(account); } void Squawk::onComboboxActivated(int index) { if (index != Shared::offline) { int size = rosterModel.accountsModel->rowCount(QModelIndex()); if (size > 0) { emit changeState(index); for (int i = 0; i < size; ++i) { Models::Account* acc = rosterModel.accountsModel->getAccount(i); if (acc->getState() == Shared::disconnected) { emit connectAccount(acc->getName()); } } } else { m_ui->comboBox->setCurrentIndex(Shared::offline); } } else { emit changeState(index); int size = rosterModel.accountsModel->rowCount(QModelIndex()); for (int i = 0; i != size; ++i) { Models::Account* acc = rosterModel.accountsModel->getAccount(i); if (acc->getState() != Shared::disconnected) { emit disconnectAccount(acc->getName()); } } } } void Squawk::accountConnectionStateChanged(const QString& account, int state) { rosterModel.updateAccount(account, "state", state); } void Squawk::accountAvailabilityChanged(const QString& account, int state) { rosterModel.updateAccount(account, "availability", state); } void Squawk::addContact(const QString& account, const QString& jid, const QString& group, const QMap& data) { rosterModel.addContact(account, jid, group, data); } void Squawk::addGroup(const QString& account, const QString& name) { rosterModel.addGroup(account, name); } void Squawk::removeGroup(const QString& account, const QString& name) { rosterModel.removeGroup(account, name); } void Squawk::changeContact(const QString& account, const QString& jid, const QMap& data) { rosterModel.changeContact(account, jid, data); } void Squawk::removeContact(const QString& account, const QString& jid) { rosterModel.removeContact(account, jid); } void Squawk::removeContact(const QString& account, const QString& jid, const QString& group) { rosterModel.removeContact(account, jid, group); } void Squawk::addPresence(const QString& account, const QString& jid, const QString& name, const QMap& data) { rosterModel.addPresence(account, jid, name, data); } void Squawk::removePresence(const QString& account, const QString& jid, const QString& name) { rosterModel.removePresence(account, jid, name); } void Squawk::stateChanged(int state) { m_ui->comboBox->setCurrentIndex(state); }