File indexing completed on 2024-12-01 04:36:51
0001 /* 0002 SPDX-FileCopyrightText: 2020-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "servermenu.h" 0008 #include "accountmanager.h" 0009 #include "model/rocketchataccountmodel.h" 0010 #include "rocketchataccount.h" 0011 #include "ruqola.h" 0012 #include <KActionCollection> 0013 #include <KLocalizedString> 0014 #include <QActionGroup> 0015 #include <QMenu> 0016 0017 ServerMenu::ServerMenu(QWidget *parent) 0018 : KActionMenu(parent) 0019 { 0020 setText(i18n("Server")); 0021 connect(menu(), &QMenu::aboutToShow, this, &ServerMenu::slotUpdateAccountMenu); 0022 } 0023 0024 ServerMenu::~ServerMenu() = default; 0025 0026 void ServerMenu::setActionCollection(KActionCollection *ac) 0027 { 0028 mActionCollection = ac; 0029 } 0030 0031 void ServerMenu::slotUpdateAccountMenu() 0032 { 0033 menu()->clear(); 0034 auto accountManager = Ruqola::self()->accountManager(); 0035 auto *model = accountManager->rocketChatAccountProxyModel(); 0036 const QString currentAccountName = accountManager->currentAccount(); 0037 const int accountNumber = model->rowCount(); 0038 if (accountNumber == 0) { 0039 // Nothing 0040 } else if (accountNumber == 1) { 0041 const auto index = model->index(0, 0); 0042 auto account = index.data(RocketChatAccountModel::Account).value<RocketChatAccount *>(); 0043 auto action = new QAction(account->displayName(), this); 0044 menu()->addAction(action); 0045 action->setEnabled(false); 0046 } else { 0047 auto group = new QActionGroup(this); 0048 group->setExclusive(true); 0049 for (int i = 0; i < accountNumber; ++i) { 0050 const auto index = model->index(i, 0); 0051 auto account = index.data(RocketChatAccountModel::Account).value<RocketChatAccount *>(); 0052 if (account->accountEnabled()) { 0053 const QString accountName = account->accountName(); 0054 const QString displayName = account->displayName(); 0055 auto action = new QAction(displayName, this); 0056 action->setCheckable(true); 0057 group->addAction(action); 0058 if (currentAccountName == accountName) { 0059 action->setChecked(true); 0060 } 0061 menu()->addAction(action); 0062 if (mActionCollection) { 0063 mActionCollection->setDefaultShortcut(action, QKeySequence(QStringLiteral("CTRL+%1").arg(i))); 0064 } 0065 connect(action, &QAction::triggered, this, [accountName, accountManager]() { 0066 accountManager->setCurrentAccount(accountName); 0067 }); 0068 } 0069 } 0070 } 0071 } 0072 0073 #include "moc_servermenu.cpp"