forked from psi-im/psi
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaccountscombobox.cpp
105 lines (86 loc) · 3.13 KB
/
accountscombobox.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/*
* accountscombobox.cpp
* Copyright (C) 2001-2008 Justin Karneges, Michail Pishchagin
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "accountscombobox.h"
#include "psiaccount.h"
#include "psicon.h"
#include "psicontactlist.h"
AccountsComboBox::AccountsComboBox(QWidget *parent) :
QComboBox(parent), controller_(nullptr), account_(nullptr), onlineOnly_(false)
{
setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed));
connect(this, SIGNAL(activated(int)), this, SLOT(changeAccount()));
}
AccountsComboBox::~AccountsComboBox() { }
PsiAccount *AccountsComboBox::account() const { return account_; }
void AccountsComboBox::setAccount(PsiAccount *account)
{
account_ = account;
updateAccounts();
}
PsiCon *AccountsComboBox::controller() const { return controller_; }
void AccountsComboBox::setController(PsiCon *controller)
{
if (controller_) {
disconnect(controller_, SIGNAL(accountCountChanged()), this, SLOT(updateAccounts()));
disconnect(controller_, SIGNAL(accountActivityChanged()), this, SLOT(updateAccounts()));
}
controller_ = controller;
if (controller_) {
connect(controller_, SIGNAL(accountCountChanged()), this, SLOT(updateAccounts()));
connect(controller_, SIGNAL(accountActivityChanged()), this, SLOT(updateAccounts()));
if (controller_->contactList()->haveEnabledAccounts()) {
setAccount(controller_->contactList()->enabledAccounts().first());
}
}
updateAccounts();
}
bool AccountsComboBox::onlineOnly() const { return onlineOnly_; }
void AccountsComboBox::setOnlineOnly(bool onlineOnly)
{
onlineOnly_ = onlineOnly;
updateAccounts();
}
void AccountsComboBox::changeAccount()
{
account_ = nullptr;
if (currentIndex() >= 0 && currentIndex() < accounts().count())
account_ = accounts().at(currentIndex());
emit activated(account_);
}
void AccountsComboBox::updateAccounts()
{
clear();
for (PsiAccount *account : accounts())
addItem(account->nameWithJid());
if (accounts().indexOf(account_) == -1) {
account_ = accounts().isEmpty() ? nullptr : accounts().first();
emit activated(account_);
}
setCurrentIndex(accounts().indexOf(account_));
}
QList<PsiAccount *> AccountsComboBox::accounts() const
{
QList<PsiAccount *> result;
if (controller_) {
for (PsiAccount *account : controller_->contactList()->enabledAccounts())
if (!onlineOnly_ || account->isAvailable())
result << account;
}
return result;
}