Add icon for when no default account is selected

Also fixed a bug where the icon on the accounts button wouldn't change
when the user checked the "Use as default" checkbox in the account
selection dialog.
This commit is contained in:
Andrew 2013-11-28 15:46:04 -06:00
parent 8232271c00
commit f7b64a551b
5 changed files with 90 additions and 64 deletions

View File

@ -12,6 +12,7 @@
<file alias="settings">resources/icons/toolbar/settings.png</file> <file alias="settings">resources/icons/toolbar/settings.png</file>
<file alias="viewfolder">resources/icons/toolbar/viewfolder.png</file> <file alias="viewfolder">resources/icons/toolbar/viewfolder.png</file>
<file alias="cat">resources/icons/toolbar/Cat.png</file> <file alias="cat">resources/icons/toolbar/Cat.png</file>
<file alias="noaccount">resources/icons/toolbar/NoAccount.png</file>
</qresource> </qresource>
<qresource prefix="/icons/instances"> <qresource prefix="/icons/instances">
<file alias="brick">resources/icons/instances/brick.png</file> <file alias="brick">resources/icons/instances/brick.png</file>

View File

@ -168,13 +168,12 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
statusBar()->addPermanentWidget(m_statusRight, 0); statusBar()->addPermanentWidget(m_statusRight, 0);
// Add "manage accounts" button, right align // Add "manage accounts" button, right align
QWidget* spacer = new QWidget(); QWidget* spacer = new QWidget();
spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
ui->mainToolBar->addWidget(spacer); ui->mainToolBar->addWidget(spacer);
accountMenu = new QMenu(this); accountMenu = new QMenu(this);
manageAccountsAction = new QAction(tr("Manage accounts"), this); manageAccountsAction = new QAction(tr("Manage Accounts"), this);
manageAccountsAction->setCheckable(false); manageAccountsAction->setCheckable(false);
connect(manageAccountsAction, SIGNAL(triggered(bool)), this, SLOT(on_actionManageAccounts_triggered())); connect(manageAccountsAction, SIGNAL(triggered(bool)), this, SLOT(on_actionManageAccounts_triggered()));
@ -186,12 +185,18 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
accountMenuButton->setPopupMode(QToolButton::InstantPopup); accountMenuButton->setPopupMode(QToolButton::InstantPopup);
accountMenuButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); accountMenuButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
accountMenuButton->setLayoutDirection(Qt::RightToLeft); accountMenuButton->setLayoutDirection(Qt::RightToLeft);
accountMenuButton->setIcon(QPixmap(":/icons/toolbar/noaccount").scaled(48, 48, Qt::KeepAspectRatio));
QWidgetAction *accountMenuButtonAction = new QWidgetAction(this); QWidgetAction *accountMenuButtonAction = new QWidgetAction(this);
accountMenuButtonAction->setDefaultWidget(accountMenuButton); accountMenuButtonAction->setDefaultWidget(accountMenuButton);
ui->mainToolBar->addAction(accountMenuButtonAction); ui->mainToolBar->addAction(accountMenuButtonAction);
// Update the menu when the active account changes.
// Shouldn't have to use lambdas here like this, but if I don't, the compiler throws a fit. Template hell sucks...
connect(MMC->accounts().get(), &MojangAccountList::activeAccountChanged, [this] { activeAccountChanged(); });
connect(MMC->accounts().get(), &MojangAccountList::listChanged, [this] { repopulateAccountsMenu(); });
std::shared_ptr<MojangAccountList> accounts = MMC->accounts(); std::shared_ptr<MojangAccountList> accounts = MMC->accounts();
// TODO: Nicer way to iterate? // TODO: Nicer way to iterate?
@ -258,12 +263,12 @@ void MainWindow::repopulateAccountsMenu()
MojangAccountPtr active_account = accounts->activeAccount(); MojangAccountPtr active_account = accounts->activeAccount();
QString active_username = ""; QString active_username = "";
if(active_account != nullptr) if (active_account != nullptr)
{ {
active_username = accounts->activeAccount()->username(); active_username = accounts->activeAccount()->username();
} }
if(accounts->count() <= 0) if (accounts->count() <= 0)
{ {
QAction *action = new QAction(tr("No accounts added!"), this); QAction *action = new QAction(tr("No accounts added!"), this);
action->setEnabled(false); action->setEnabled(false);
@ -274,7 +279,7 @@ void MainWindow::repopulateAccountsMenu()
else else
{ {
// TODO: Nicer way to iterate? // TODO: Nicer way to iterate?
for(int i = 0; i < accounts->count(); i++) for (int i = 0; i < accounts->count(); i++)
{ {
MojangAccountPtr account = accounts->at(i); MojangAccountPtr account = accounts->at(i);
@ -283,7 +288,7 @@ void MainWindow::repopulateAccountsMenu()
section->setEnabled(false); section->setEnabled(false);
accountMenu->addAction(section); accountMenu->addAction(section);
for(AccountProfile profile : account->profiles()) for (AccountProfile profile : account->profiles())
{ {
QAction *action = new QAction(profile.name(), this); QAction *action = new QAction(profile.name(), this);
action->setData(account->username()); action->setData(account->username());
@ -302,8 +307,9 @@ void MainWindow::repopulateAccountsMenu()
} }
} }
QAction *action = new QAction(tr("No default"), this); QAction *action = new QAction(tr("No Default Account"), this);
action->setCheckable(true); action->setCheckable(true);
action->setIcon(QPixmap(":/icons/toolbar/noaccount").scaled(48, 48, Qt::KeepAspectRatio));
action->setData(""); action->setData("");
if(active_username.isEmpty()) if(active_username.isEmpty())
{ {
@ -325,11 +331,11 @@ void MainWindow::changeActiveAccount()
QAction* sAction = (QAction*) sender(); QAction* sAction = (QAction*) sender();
// Profile's associated Mojang username // Profile's associated Mojang username
// Will need to change when profiles are properly implemented // Will need to change when profiles are properly implemented
if(sAction->data().type() != QVariant::Type::String) return; if (sAction->data().type() != QVariant::Type::String) return;
QVariant data = sAction->data(); QVariant data = sAction->data();
QString id = ""; QString id = "";
if(!data.isNull()) if (!data.isNull())
{ {
id = data.toString(); id = data.toString();
} }
@ -345,17 +351,18 @@ void MainWindow::activeAccountChanged()
MojangAccountPtr account = MMC->accounts()->activeAccount(); MojangAccountPtr account = MMC->accounts()->activeAccount();
if(account != nullptr && account->username() != "") if (account != nullptr && account->username() != "")
{ {
const AccountProfile *profile = account->currentProfile(); const AccountProfile *profile = account->currentProfile();
if(profile != nullptr) if (profile != nullptr)
{ {
accountMenuButton->setIcon(SkinUtils::getFaceFromCache(profile->name())); accountMenuButton->setIcon(SkinUtils::getFaceFromCache(profile->name()));
return; return;
} }
} }
accountMenuButton->setIcon(QIcon()); // Set the icon to the "no account" icon.
accountMenuButton->setIcon(QPixmap(":/icons/toolbar/noaccount").scaled(48, 48, Qt::KeepAspectRatio));
} }
bool MainWindow::eventFilter(QObject *obj, QEvent *ev) bool MainWindow::eventFilter(QObject *obj, QEvent *ev)

View File

@ -106,7 +106,7 @@ void MojangAccountList::setActiveAccount(const QString& username)
} }
} }
endResetModel(); endResetModel();
onListChanged(); onActiveChanged();
} }
@ -116,8 +116,15 @@ void MojangAccountList::onListChanged()
// TODO: Alert the user if this fails. // TODO: Alert the user if this fails.
saveList(); saveList();
// TODO: stop this getting called from setActiveAccount emit listChanged();
//emit listChanged(); }
void MojangAccountList::onActiveChanged()
{
if (m_autosave)
saveList();
emit activeAccountChanged();
} }

View File

@ -133,6 +133,11 @@ signals:
*/ */
void listChanged(); void listChanged();
/*!
* Signal emitted to indicate that the active account has changed.
*/
void activeAccountChanged();
protected: protected:
/*! /*!
* Called whenever the list changes. * Called whenever the list changes.
@ -140,6 +145,12 @@ protected:
*/ */
void onListChanged(); void onListChanged();
/*!
* Called whenever the active account changes.
* Emits the activeAccountChanged() signal and autosaves the list if enabled.
*/
void onActiveChanged();
QList<MojangAccountPtr> m_accounts; QList<MojangAccountPtr> m_accounts;
/*! /*!

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 B