AccountView::AccountView(QWidget *parent) : QWidget(parent) { setupUi(this); // Init account drop down menu account_menu_ = new QMenu; mAccountBtn->setMenu(account_menu_); mAccountBtn->setPopupMode(QToolButton::InstantPopup); mAccountBtn->setFixedSize(QSize(AvatarService::kAvatarSize, AvatarService::kAvatarSize)); onAccountChanged(); connect(AvatarService::instance(), SIGNAL(avatarUpdated(const QString&, const QImage&)), this, SLOT(updateAvatar())); mAccountBtn->setCursor(Qt::PointingHandCursor); mAccountBtn->installEventFilter(this); account_menu_->installEventFilter(this); connect(seafApplet->accountManager(), SIGNAL(accountRequireRelogin(const Account&)), this, SLOT(reloginAccount(const Account &))); connect(seafApplet->accountManager(), SIGNAL(requireAddAccount()), this, SLOT(showAddAccountDialog())); connect(mServerAddr, SIGNAL(linkActivated(const QString&)), this, SLOT(visitServerInBrowser(const QString&))); }
AccountView::AccountView(QWidget *parent) : QWidget(parent) { setupUi(this); // Init account drop down menu account_menu_ = new QMenu; mAccountBtn->setMenu(account_menu_); mAccountBtn->setPopupMode(QToolButton::InstantPopup); mAccountBtn->setFixedSize(QSize(AvatarService::kAvatarSize, AvatarService::kAvatarSize)); onAccountChanged(); connect(AvatarService::instance(), SIGNAL(avatarUpdated(const QString&, const QImage&)), this, SLOT(updateAvatar())); mAccountBtn->setCursor(Qt::PointingHandCursor); mAccountBtn->installEventFilter(this); account_menu_->installEventFilter(this); connect(seafApplet->accountManager(), SIGNAL(requireAddAccount()), this, SLOT(showAddAccountDialog())); connect(mServerAddr, SIGNAL(linkActivated(const QString&)), this, SLOT(visitServerInBrowser(const QString&))); // Must get the pixmap from QIcon because QIcon would load the 2x version // automatically. mRefreshLabel->setPixmap(QIcon(":/images/toolbar/refresh-new.png").pixmap(20)); mRefreshLabel->installEventFilter(this); }
/** * Update the account menu when accounts changed */ void CloudView::updateAccountMenu() { // Remove all menu items account_menu_->clear(); // Add accounts again const std::vector<Account>& accounts = seafApplet->accountManager()->accounts(); if (!accounts.empty()) { if (!hasAccount()) { setCurrentAccount(accounts[0]); } for (int i = 0, n = accounts.size(); i < n; i++) { Account account = accounts[i]; QAction *action = makeAccountAction(accounts[i]); if (account == current_account_) { action->setChecked(true); } account_menu_->addAction(action); } account_menu_->addSeparator(); } // Add rest items add_account_action_ = new QAction(tr("Add an account"), this); add_account_action_->setIcon(awesome->icon(icon_plus)); add_account_action_->setIconVisibleInMenu(true); connect(add_account_action_, SIGNAL(triggered()), this, SLOT(showAddAccountDialog())); account_menu_->addAction(add_account_action_); if (hasAccount()) { add_account_action_->setVisible(false); // disk42 delete_account_action_ = new QAction(tr("Delete this account"), this); delete_account_action_->setIcon(awesome->icon(icon_remove)); delete_account_action_->setIconVisibleInMenu(true); connect(delete_account_action_, SIGNAL(triggered()), this, SLOT(deleteAccount())); account_menu_->addAction(delete_account_action_); } }
/** * Update the account menu when accounts changed */ void AccountView::onAccountChanged() { const std::vector<Account>& accounts = seafApplet->accountManager()->accounts(); // Remove all menu items account_menu_->clear(); if (!accounts.empty()) { for (size_t i = 0, n = accounts.size(); i < n; i++) { const Account &account = accounts[i]; QString text = account.username + "(" + account.serverUrl.host() + ")"; if (!account.isValid()) { text += ", " + tr("not logged in"); } QMenu *submenu = new QMenu(text, account_menu_); if (i == 0) { submenu->setIcon(QIcon(":/images/account-checked.png")); } else { submenu->setIcon(QIcon(":/images/account-else.png")); } QAction *submenu_action = submenu->menuAction(); submenu_action->setData(QVariant::fromValue(account)); connect(submenu_action, SIGNAL(triggered()), this, SLOT(onAccountItemClicked())); QAction *action = new QAction(tr("Choose"), submenu); action->setIcon(QIcon(":/images/account-checked.png")); action->setIconVisibleInMenu(true); action->setData(QVariant::fromValue(account)); connect(action, SIGNAL(triggered()), this, SLOT(onAccountItemClicked())); submenu->addAction(action); submenu->setDefaultAction(action); QAction *account_settings_action = new QAction(tr("Account settings"), this); account_settings_action->setIcon(QIcon(":/images/account-settings.png")); account_settings_action->setIconVisibleInMenu(true); account_settings_action->setData(QVariant::fromValue(account)); connect(account_settings_action, SIGNAL(triggered()), this, SLOT(editAccountSettings())); submenu->addAction(account_settings_action); QAction *toggle_action = new QAction(this); toggle_action->setIcon(QIcon(":/images/logout.png")); toggle_action->setIconVisibleInMenu(true); toggle_action->setData(QVariant::fromValue(account)); connect(toggle_action, SIGNAL(triggered()), this, SLOT(toggleAccount())); if (account.isValid()) toggle_action->setText(tr("Logout")); else toggle_action->setText(tr("Login")); submenu->addAction(toggle_action); QAction *delete_account_action = new QAction(tr("Delete"), this); delete_account_action->setIcon(QIcon(":/images/delete-account.png")); delete_account_action->setIconVisibleInMenu(true); delete_account_action->setData(QVariant::fromValue(account)); connect(delete_account_action, SIGNAL(triggered()), this, SLOT(deleteAccount())); submenu->addAction(delete_account_action); account_menu_->addMenu(submenu); } account_menu_->addSeparator(); } add_account_action_ = new QAction(tr("Add an account"), this); add_account_action_->setIcon(QIcon(":/images/add-account.png")); add_account_action_->setIconVisibleInMenu(true); connect(add_account_action_, SIGNAL(triggered()), this, SLOT(showAddAccountDialog())); account_menu_->addAction(add_account_action_); updateAccountInfoDisplay(); }