NOISSUE refactor the MainWindow UI creation
It was ugly generated code with no rhyme or reason to it. Now all the relevant code is grouped and language switching works a little better.
This commit is contained in:
		@@ -90,58 +90,149 @@
 | 
			
		||||
#include <InstanceImportTask.h>
 | 
			
		||||
#include "UpdateController.h"
 | 
			
		||||
 | 
			
		||||
// WHY: to hold the pre-translation strings together with the QAction pointer, so it can be retranslated without a lot of ugly code
 | 
			
		||||
class TranslatedAction
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	TranslatedAction(){}
 | 
			
		||||
	TranslatedAction(QWidget *parent)
 | 
			
		||||
	{
 | 
			
		||||
		m_contained = new QAction(parent);
 | 
			
		||||
	}
 | 
			
		||||
	~TranslatedAction()
 | 
			
		||||
	{
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	void setTooltipId(const char * tooltip)
 | 
			
		||||
	{
 | 
			
		||||
		m_tooltip = tooltip;
 | 
			
		||||
	}
 | 
			
		||||
	void setTextId(const char * text)
 | 
			
		||||
	{
 | 
			
		||||
		m_text = text;
 | 
			
		||||
	}
 | 
			
		||||
	operator QAction*()
 | 
			
		||||
	{
 | 
			
		||||
		return m_contained;
 | 
			
		||||
	}
 | 
			
		||||
	QAction * operator->()
 | 
			
		||||
	{
 | 
			
		||||
		return m_contained;
 | 
			
		||||
	}
 | 
			
		||||
	void retranslate()
 | 
			
		||||
	{
 | 
			
		||||
		if(m_text)
 | 
			
		||||
		{
 | 
			
		||||
			m_contained->setText(QApplication::translate("MainWindow", m_text));
 | 
			
		||||
		}
 | 
			
		||||
		if(m_tooltip)
 | 
			
		||||
		{
 | 
			
		||||
			m_contained->setToolTip(QApplication::translate("MainWindow", m_tooltip));
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
private:
 | 
			
		||||
	QAction * m_contained = nullptr;
 | 
			
		||||
	const char * m_text = nullptr;
 | 
			
		||||
	const char * m_tooltip = nullptr;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// WHY: to hold the pre-translation strings together with the QToolbar pointer, so it can be retranslated without a lot of ugly code
 | 
			
		||||
class TranslatedToolbar
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	TranslatedToolbar(){}
 | 
			
		||||
	TranslatedToolbar(QWidget *parent)
 | 
			
		||||
	{
 | 
			
		||||
		m_contained = new QToolBar(parent);
 | 
			
		||||
	}
 | 
			
		||||
	~TranslatedToolbar()
 | 
			
		||||
	{
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	void setWindowTitleId(const char * title)
 | 
			
		||||
	{
 | 
			
		||||
		m_title = title;
 | 
			
		||||
	}
 | 
			
		||||
	operator QToolBar*()
 | 
			
		||||
	{
 | 
			
		||||
		return m_contained;
 | 
			
		||||
	}
 | 
			
		||||
	QToolBar * operator->()
 | 
			
		||||
	{
 | 
			
		||||
		return m_contained;
 | 
			
		||||
	}
 | 
			
		||||
	void retranslate()
 | 
			
		||||
	{
 | 
			
		||||
		if(m_title)
 | 
			
		||||
		{
 | 
			
		||||
			m_contained->setWindowTitle(QApplication::translate("MainWindow", m_title));
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
private:
 | 
			
		||||
	QToolBar * m_contained = nullptr;
 | 
			
		||||
	const char * m_title = nullptr;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class MainWindow::Ui
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	QAction *actionAddInstance;
 | 
			
		||||
	QAction *actionViewInstanceFolder;
 | 
			
		||||
	QAction *actionRefresh;
 | 
			
		||||
	QAction *actionViewCentralModsFolder;
 | 
			
		||||
	QAction *actionCheckUpdate;
 | 
			
		||||
	QAction *actionSettings;
 | 
			
		||||
	QAction *actionReportBug;
 | 
			
		||||
	QAction *actionPatreon;
 | 
			
		||||
	QAction *actionMoreNews;
 | 
			
		||||
	QAction *actionAbout;
 | 
			
		||||
	QAction *actionLaunchInstance;
 | 
			
		||||
	QAction *actionRenameInstance;
 | 
			
		||||
	QAction *actionChangeInstGroup;
 | 
			
		||||
	QAction *actionChangeInstIcon;
 | 
			
		||||
	QAction *actionEditInstNotes;
 | 
			
		||||
	QAction *actionEditInstance;
 | 
			
		||||
	QAction *actionWorlds;
 | 
			
		||||
	QAction *actionViewSelectedInstFolder;
 | 
			
		||||
	QAction *actionDeleteInstance;
 | 
			
		||||
	QAction *actionConfig_Folder;
 | 
			
		||||
	QAction *actionCAT;
 | 
			
		||||
	QAction *actionREDDIT;
 | 
			
		||||
	QAction *actionDISCORD;
 | 
			
		||||
	QAction *actionCopyInstance;
 | 
			
		||||
	QAction *actionManageAccounts;
 | 
			
		||||
	QAction *actionLaunchInstanceOffline;
 | 
			
		||||
	QAction *actionScreenshots;
 | 
			
		||||
	QAction *actionInstanceSettings;
 | 
			
		||||
	QAction *actionExportInstance;
 | 
			
		||||
	QWidget *centralWidget;
 | 
			
		||||
	QHBoxLayout *horizontalLayout;
 | 
			
		||||
	QToolBar *mainToolBar;
 | 
			
		||||
	QStatusBar *statusBar;
 | 
			
		||||
	QToolBar *instanceToolBar;
 | 
			
		||||
	QToolBar *newsToolBar;
 | 
			
		||||
	TranslatedAction actionAddInstance;
 | 
			
		||||
	TranslatedAction actionViewInstanceFolder;
 | 
			
		||||
	TranslatedAction actionRefresh;
 | 
			
		||||
	TranslatedAction actionViewCentralModsFolder;
 | 
			
		||||
	TranslatedAction actionCheckUpdate;
 | 
			
		||||
	TranslatedAction actionSettings;
 | 
			
		||||
	TranslatedAction actionReportBug;
 | 
			
		||||
	TranslatedAction actionPatreon;
 | 
			
		||||
	TranslatedAction actionMoreNews;
 | 
			
		||||
	TranslatedAction actionAbout;
 | 
			
		||||
	TranslatedAction actionManageAccounts;
 | 
			
		||||
	TranslatedAction actionLaunchInstance;
 | 
			
		||||
	TranslatedAction actionRenameInstance;
 | 
			
		||||
	TranslatedAction actionChangeInstGroup;
 | 
			
		||||
	TranslatedAction actionChangeInstIcon;
 | 
			
		||||
	TranslatedAction actionEditInstNotes;
 | 
			
		||||
	TranslatedAction actionEditInstance;
 | 
			
		||||
	TranslatedAction actionWorlds;
 | 
			
		||||
	TranslatedAction actionViewSelectedInstFolder;
 | 
			
		||||
	TranslatedAction actionDeleteInstance;
 | 
			
		||||
	TranslatedAction actionConfig_Folder;
 | 
			
		||||
	TranslatedAction actionCAT;
 | 
			
		||||
	TranslatedAction actionREDDIT;
 | 
			
		||||
	TranslatedAction actionDISCORD;
 | 
			
		||||
	TranslatedAction actionCopyInstance;
 | 
			
		||||
	TranslatedAction actionLaunchInstanceOffline;
 | 
			
		||||
	TranslatedAction actionScreenshots;
 | 
			
		||||
	TranslatedAction actionInstanceSettings;
 | 
			
		||||
	TranslatedAction actionExportInstance;
 | 
			
		||||
	QVector<TranslatedAction *> all_actions;
 | 
			
		||||
 | 
			
		||||
	LabeledToolButton *renameButton = nullptr;
 | 
			
		||||
	LabeledToolButton *changeIconButton = nullptr;
 | 
			
		||||
 | 
			
		||||
	QWidget *centralWidget = nullptr;
 | 
			
		||||
	QHBoxLayout *horizontalLayout = nullptr;
 | 
			
		||||
	QStatusBar *statusBar = nullptr;
 | 
			
		||||
 | 
			
		||||
	TranslatedToolbar mainToolBar;
 | 
			
		||||
	TranslatedToolbar instanceToolBar;
 | 
			
		||||
	TranslatedToolbar newsToolBar;
 | 
			
		||||
	QVector<TranslatedToolbar *> all_toolbars;
 | 
			
		||||
	bool m_kill = false;
 | 
			
		||||
 | 
			
		||||
	void updateLaunchAction()
 | 
			
		||||
	{
 | 
			
		||||
		if(m_kill)
 | 
			
		||||
		{
 | 
			
		||||
			actionLaunchInstance->setText(tr("Kill"));
 | 
			
		||||
			actionLaunchInstance->setToolTip(tr("Kill the running instance"));
 | 
			
		||||
			actionLaunchInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Kill"));
 | 
			
		||||
			actionLaunchInstance.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Kill the running instance"));
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			actionLaunchInstance->setText(tr("Launch"));
 | 
			
		||||
			actionLaunchInstance->setToolTip(tr("Launch the selected instance."));
 | 
			
		||||
			actionLaunchInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Launch"));
 | 
			
		||||
			actionLaunchInstance.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Launch the selected instance."));
 | 
			
		||||
		}
 | 
			
		||||
		actionLaunchInstance.retranslate();
 | 
			
		||||
	}
 | 
			
		||||
	void setLaunchAction(bool kill)
 | 
			
		||||
	{
 | 
			
		||||
@@ -149,6 +240,313 @@ public:
 | 
			
		||||
		updateLaunchAction();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void createMainToolbar(QMainWindow *MainWindow)
 | 
			
		||||
	{
 | 
			
		||||
		mainToolBar = new QToolBar(MainWindow);
 | 
			
		||||
		mainToolBar->setObjectName(QStringLiteral("mainToolBar"));
 | 
			
		||||
		mainToolBar->setMovable(false);
 | 
			
		||||
		mainToolBar->setAllowedAreas(Qt::TopToolBarArea);
 | 
			
		||||
		mainToolBar->setToolButtonStyle(Qt::ToolButtonIconOnly);
 | 
			
		||||
		mainToolBar->setFloatable(false);
 | 
			
		||||
		mainToolBar.setWindowTitleId(QT_TRANSLATE_NOOP("MainWindow", "Main Toolbar"));
 | 
			
		||||
 | 
			
		||||
		actionAddInstance = TranslatedAction(MainWindow);
 | 
			
		||||
		actionAddInstance->setObjectName(QStringLiteral("actionAddInstance"));
 | 
			
		||||
		actionAddInstance->setIcon(MMC->getThemedIcon("new"));
 | 
			
		||||
		actionAddInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Add Instance"));
 | 
			
		||||
		actionAddInstance.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Add a new instance."));
 | 
			
		||||
		all_actions.append(&actionAddInstance);
 | 
			
		||||
		mainToolBar->addAction(actionAddInstance);
 | 
			
		||||
 | 
			
		||||
		mainToolBar->addSeparator();
 | 
			
		||||
 | 
			
		||||
		actionViewInstanceFolder = TranslatedAction(MainWindow);
 | 
			
		||||
		actionViewInstanceFolder->setObjectName(QStringLiteral("actionViewInstanceFolder"));
 | 
			
		||||
		actionViewInstanceFolder->setIcon(MMC->getThemedIcon("viewfolder"));
 | 
			
		||||
		actionViewInstanceFolder.setTextId(QT_TRANSLATE_NOOP("MainWindow", "View Instance Folder"));
 | 
			
		||||
		actionViewInstanceFolder.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open the instance folder in a file browser."));
 | 
			
		||||
		all_actions.append(&actionViewInstanceFolder);
 | 
			
		||||
		mainToolBar->addAction(actionViewInstanceFolder);
 | 
			
		||||
 | 
			
		||||
		actionViewCentralModsFolder = TranslatedAction(MainWindow);
 | 
			
		||||
		actionViewCentralModsFolder->setObjectName(QStringLiteral("actionViewCentralModsFolder"));
 | 
			
		||||
		actionViewCentralModsFolder->setIcon(MMC->getThemedIcon("centralmods"));
 | 
			
		||||
		actionViewCentralModsFolder.setTextId(QT_TRANSLATE_NOOP("MainWindow", "View Central Mods Folder"));
 | 
			
		||||
		actionViewCentralModsFolder.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open the central mods folder in a file browser."));
 | 
			
		||||
		all_actions.append(&actionViewCentralModsFolder);
 | 
			
		||||
		mainToolBar->addAction(actionViewCentralModsFolder);
 | 
			
		||||
 | 
			
		||||
		actionRefresh = TranslatedAction(MainWindow);
 | 
			
		||||
		actionRefresh->setObjectName(QStringLiteral("actionRefresh"));
 | 
			
		||||
		actionRefresh->setIcon(MMC->getThemedIcon("refresh"));
 | 
			
		||||
		actionRefresh.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Refresh"));
 | 
			
		||||
		actionRefresh.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Reload the instance list."));
 | 
			
		||||
		all_actions.append(&actionRefresh);
 | 
			
		||||
		mainToolBar->addAction(actionRefresh);
 | 
			
		||||
 | 
			
		||||
		mainToolBar->addSeparator();
 | 
			
		||||
 | 
			
		||||
		if(BuildConfig.UPDATER_ENABLED)
 | 
			
		||||
		{
 | 
			
		||||
			actionCheckUpdate = TranslatedAction(MainWindow);
 | 
			
		||||
			actionCheckUpdate->setObjectName(QStringLiteral("actionCheckUpdate"));
 | 
			
		||||
			actionCheckUpdate->setIcon(MMC->getThemedIcon("checkupdate"));
 | 
			
		||||
			actionCheckUpdate.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Check for Updates"));
 | 
			
		||||
			actionCheckUpdate.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Check for new updates for MultiMC."));
 | 
			
		||||
			all_actions.append(&actionCheckUpdate);
 | 
			
		||||
			mainToolBar->addAction(actionCheckUpdate);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		actionSettings = TranslatedAction(MainWindow);
 | 
			
		||||
		actionSettings->setObjectName(QStringLiteral("actionSettings"));
 | 
			
		||||
		actionSettings->setIcon(MMC->getThemedIcon("settings"));
 | 
			
		||||
		actionSettings->setMenuRole(QAction::PreferencesRole);
 | 
			
		||||
		actionSettings.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Settings"));
 | 
			
		||||
		actionSettings.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Change settings."));
 | 
			
		||||
		all_actions.append(&actionSettings);
 | 
			
		||||
		mainToolBar->addAction(actionSettings);
 | 
			
		||||
 | 
			
		||||
		mainToolBar->addSeparator();
 | 
			
		||||
 | 
			
		||||
		actionReportBug = TranslatedAction(MainWindow);
 | 
			
		||||
		actionReportBug->setObjectName(QStringLiteral("actionReportBug"));
 | 
			
		||||
		actionReportBug->setIcon(MMC->getThemedIcon("bug"));
 | 
			
		||||
		actionReportBug.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Report a Bug"));
 | 
			
		||||
		actionReportBug.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open the bug tracker to report a bug with MultiMC."));
 | 
			
		||||
		all_actions.append(&actionReportBug);
 | 
			
		||||
		mainToolBar->addAction(actionReportBug);
 | 
			
		||||
 | 
			
		||||
		actionAbout = TranslatedAction(MainWindow);
 | 
			
		||||
		actionAbout->setObjectName(QStringLiteral("actionAbout"));
 | 
			
		||||
		actionAbout->setIcon(MMC->getThemedIcon("about"));
 | 
			
		||||
		actionAbout->setMenuRole(QAction::AboutRole);
 | 
			
		||||
		actionAbout.setTextId(QT_TRANSLATE_NOOP("MainWindow", "About MultiMC"));
 | 
			
		||||
		actionAbout.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "View information about MultiMC."));
 | 
			
		||||
		all_actions.append(&actionAbout);
 | 
			
		||||
		mainToolBar->addAction(actionAbout);
 | 
			
		||||
 | 
			
		||||
		mainToolBar->addSeparator();
 | 
			
		||||
 | 
			
		||||
		actionPatreon = TranslatedAction(MainWindow);
 | 
			
		||||
		actionPatreon->setObjectName(QStringLiteral("actionPatreon"));
 | 
			
		||||
		actionPatreon->setIcon(MMC->getThemedIcon("patreon"));
 | 
			
		||||
		actionPatreon.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Support us on Patreon!"));
 | 
			
		||||
		actionPatreon.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open the MultiMC Patreon page."));
 | 
			
		||||
		all_actions.append(&actionPatreon);
 | 
			
		||||
		mainToolBar->addAction(actionPatreon);
 | 
			
		||||
 | 
			
		||||
		actionREDDIT = TranslatedAction(MainWindow);
 | 
			
		||||
		actionREDDIT->setObjectName(QStringLiteral("actionREDDIT"));
 | 
			
		||||
		actionREDDIT->setIcon(MMC->getThemedIcon("reddit-alien"));
 | 
			
		||||
		actionREDDIT.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Reddit"));
 | 
			
		||||
		actionREDDIT.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open MultiMC subreddit."));
 | 
			
		||||
		all_actions.append(&actionREDDIT);
 | 
			
		||||
		mainToolBar->addAction(actionREDDIT);
 | 
			
		||||
 | 
			
		||||
		actionDISCORD = TranslatedAction(MainWindow);
 | 
			
		||||
		actionDISCORD->setObjectName(QStringLiteral("actionDISCORD"));
 | 
			
		||||
		actionDISCORD->setIcon(MMC->getThemedIcon("discord"));
 | 
			
		||||
		actionDISCORD.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Discord"));
 | 
			
		||||
		actionDISCORD.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open MultiMC discord voice chat."));
 | 
			
		||||
		all_actions.append(&actionDISCORD);
 | 
			
		||||
		mainToolBar->addAction(actionDISCORD);
 | 
			
		||||
 | 
			
		||||
		actionCAT = TranslatedAction(MainWindow);
 | 
			
		||||
		actionCAT->setObjectName(QStringLiteral("actionCAT"));
 | 
			
		||||
		actionCAT->setCheckable(true);
 | 
			
		||||
		actionCAT->setIcon(MMC->getThemedIcon("cat"));
 | 
			
		||||
		actionCAT.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Meow"));
 | 
			
		||||
		actionCAT.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "It's a fluffy kitty :3"));
 | 
			
		||||
		actionCAT->setPriority(QAction::LowPriority);
 | 
			
		||||
		all_actions.append(&actionCAT);
 | 
			
		||||
		mainToolBar->addAction(actionCAT);
 | 
			
		||||
 | 
			
		||||
		// profile menu and its actions
 | 
			
		||||
		actionManageAccounts = TranslatedAction(MainWindow);
 | 
			
		||||
		actionManageAccounts->setObjectName(QStringLiteral("actionManageAccounts"));
 | 
			
		||||
		actionManageAccounts.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Manage Accounts"));
 | 
			
		||||
		// FIXME: no tooltip!
 | 
			
		||||
		actionManageAccounts->setCheckable(false);
 | 
			
		||||
		actionManageAccounts->setIcon(MMC->getThemedIcon("accounts"));
 | 
			
		||||
		all_actions.append(&actionManageAccounts);
 | 
			
		||||
 | 
			
		||||
		all_toolbars.append(&mainToolBar);
 | 
			
		||||
		MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void createStatusBar(QMainWindow *MainWindow)
 | 
			
		||||
	{
 | 
			
		||||
		statusBar = new QStatusBar(MainWindow);
 | 
			
		||||
		statusBar->setObjectName(QStringLiteral("statusBar"));
 | 
			
		||||
		MainWindow->setStatusBar(statusBar);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void createNewsToolbar(QMainWindow *MainWindow)
 | 
			
		||||
	{
 | 
			
		||||
		newsToolBar = new QToolBar(MainWindow);
 | 
			
		||||
		newsToolBar->setObjectName(QStringLiteral("newsToolBar"));
 | 
			
		||||
		newsToolBar->setMovable(false);
 | 
			
		||||
		newsToolBar->setAllowedAreas(Qt::BottomToolBarArea);
 | 
			
		||||
		newsToolBar->setIconSize(QSize(16, 16));
 | 
			
		||||
		newsToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
 | 
			
		||||
		newsToolBar->setFloatable(false);
 | 
			
		||||
		newsToolBar->setWindowTitle(QT_TRANSLATE_NOOP("MainWindow", "News Toolbar"));
 | 
			
		||||
 | 
			
		||||
		actionMoreNews = TranslatedAction(MainWindow);
 | 
			
		||||
		actionMoreNews->setObjectName(QStringLiteral("actionMoreNews"));
 | 
			
		||||
		actionMoreNews->setIcon(MMC->getThemedIcon("news"));
 | 
			
		||||
		actionMoreNews.setTextId(QT_TRANSLATE_NOOP("MainWindow", "More news..."));
 | 
			
		||||
		actionMoreNews.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open the MultiMC development blog to read more news about MultiMC."));
 | 
			
		||||
		all_actions.append(&actionMoreNews);
 | 
			
		||||
		newsToolBar->addAction(actionMoreNews);
 | 
			
		||||
 | 
			
		||||
		all_toolbars.append(&newsToolBar);
 | 
			
		||||
		MainWindow->addToolBar(Qt::BottomToolBarArea, newsToolBar);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void createInstanceToolbar(QMainWindow *MainWindow)
 | 
			
		||||
	{
 | 
			
		||||
		instanceToolBar = new QToolBar(MainWindow);
 | 
			
		||||
		instanceToolBar->setObjectName(QStringLiteral("instanceToolBar"));
 | 
			
		||||
		// disabled until we have an instance selected
 | 
			
		||||
		instanceToolBar->setEnabled(false);
 | 
			
		||||
		instanceToolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
 | 
			
		||||
		instanceToolBar->setToolButtonStyle(Qt::ToolButtonTextOnly);
 | 
			
		||||
		instanceToolBar->setFloatable(false);
 | 
			
		||||
		instanceToolBar->setWindowTitle(QT_TRANSLATE_NOOP("MainWindow", "Instance Toolbar"));
 | 
			
		||||
 | 
			
		||||
		// NOTE: not added to toolbar, but used for instance context menu (right click)
 | 
			
		||||
		actionChangeInstIcon = TranslatedAction(MainWindow);
 | 
			
		||||
		actionChangeInstIcon->setObjectName(QStringLiteral("actionChangeInstIcon"));
 | 
			
		||||
		actionChangeInstIcon->setIcon(QIcon(":/icons/instances/infinity"));
 | 
			
		||||
		actionChangeInstIcon->setIconVisibleInMenu(true);
 | 
			
		||||
		actionChangeInstIcon.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Change Icon"));
 | 
			
		||||
		actionChangeInstIcon.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Change the selected instance's icon."));
 | 
			
		||||
		all_actions.append(&actionChangeInstIcon);
 | 
			
		||||
 | 
			
		||||
		changeIconButton = new LabeledToolButton(MainWindow);
 | 
			
		||||
		changeIconButton->setObjectName(QStringLiteral("changeIconButton"));
 | 
			
		||||
		changeIconButton->setIcon(MMC->getThemedIcon("news"));
 | 
			
		||||
		changeIconButton->setToolTip(actionChangeInstIcon->toolTip());
 | 
			
		||||
		changeIconButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
 | 
			
		||||
		instanceToolBar->addWidget(changeIconButton);
 | 
			
		||||
 | 
			
		||||
		// NOTE: not added to toolbar, but used for instance context menu (right click)
 | 
			
		||||
		actionRenameInstance = TranslatedAction(MainWindow);
 | 
			
		||||
		actionRenameInstance->setObjectName(QStringLiteral("actionRenameInstance"));
 | 
			
		||||
		actionRenameInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Rename"));
 | 
			
		||||
		actionRenameInstance.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Rename the selected instance."));
 | 
			
		||||
		all_actions.append(&actionRenameInstance);
 | 
			
		||||
 | 
			
		||||
		// the rename label is inside the rename tool button
 | 
			
		||||
		renameButton = new LabeledToolButton(MainWindow);
 | 
			
		||||
		renameButton->setObjectName(QStringLiteral("renameButton"));
 | 
			
		||||
		renameButton->setToolTip(actionRenameInstance->toolTip());
 | 
			
		||||
		renameButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
 | 
			
		||||
		instanceToolBar->addWidget(renameButton);
 | 
			
		||||
 | 
			
		||||
		instanceToolBar->addSeparator();
 | 
			
		||||
 | 
			
		||||
		actionLaunchInstance = TranslatedAction(MainWindow);
 | 
			
		||||
		actionLaunchInstance->setObjectName(QStringLiteral("actionLaunchInstance"));
 | 
			
		||||
		all_actions.append(&actionLaunchInstance);
 | 
			
		||||
		instanceToolBar->addAction(actionLaunchInstance);
 | 
			
		||||
 | 
			
		||||
		actionLaunchInstanceOffline = TranslatedAction(MainWindow);
 | 
			
		||||
		actionLaunchInstanceOffline->setObjectName(QStringLiteral("actionLaunchInstanceOffline"));
 | 
			
		||||
		actionLaunchInstanceOffline.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Launch Offline"));
 | 
			
		||||
		actionLaunchInstanceOffline.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Launch the selected instance in offline mode."));
 | 
			
		||||
		all_actions.append(&actionLaunchInstanceOffline);
 | 
			
		||||
		instanceToolBar->addAction(actionLaunchInstanceOffline);
 | 
			
		||||
 | 
			
		||||
		instanceToolBar->addSeparator();
 | 
			
		||||
 | 
			
		||||
		actionEditInstance = TranslatedAction(MainWindow);
 | 
			
		||||
		actionEditInstance->setObjectName(QStringLiteral("actionEditInstance"));
 | 
			
		||||
		actionEditInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Edit Instance"));
 | 
			
		||||
		actionEditInstance.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Change the instance settings, mods and versions."));
 | 
			
		||||
		all_actions.append(&actionEditInstance);
 | 
			
		||||
		instanceToolBar->addAction(actionEditInstance);
 | 
			
		||||
 | 
			
		||||
		actionInstanceSettings = TranslatedAction(MainWindow);
 | 
			
		||||
		actionInstanceSettings->setObjectName(QStringLiteral("actionInstanceSettings"));
 | 
			
		||||
		actionInstanceSettings.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Instance Settings"));
 | 
			
		||||
		actionInstanceSettings.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Change the settings specific to the instance."));
 | 
			
		||||
		all_actions.append(&actionInstanceSettings);
 | 
			
		||||
		instanceToolBar->addAction(actionInstanceSettings);
 | 
			
		||||
 | 
			
		||||
		actionEditInstNotes = TranslatedAction(MainWindow);
 | 
			
		||||
		actionEditInstNotes->setObjectName(QStringLiteral("actionEditInstNotes"));
 | 
			
		||||
		actionEditInstNotes.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Edit Notes"));
 | 
			
		||||
		actionEditInstNotes.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Edit the notes for the selected instance."));
 | 
			
		||||
		all_actions.append(&actionEditInstNotes);
 | 
			
		||||
		instanceToolBar->addAction(actionEditInstNotes);
 | 
			
		||||
 | 
			
		||||
		actionWorlds = TranslatedAction(MainWindow);
 | 
			
		||||
		actionWorlds->setObjectName(QStringLiteral("actionWorlds"));
 | 
			
		||||
		actionWorlds.setTextId(QT_TRANSLATE_NOOP("MainWindow", "View Worlds"));
 | 
			
		||||
		actionWorlds.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "View the worlds of this instance."));
 | 
			
		||||
		all_actions.append(&actionWorlds);
 | 
			
		||||
		instanceToolBar->addAction(actionWorlds);
 | 
			
		||||
 | 
			
		||||
		actionScreenshots = TranslatedAction(MainWindow);
 | 
			
		||||
		actionScreenshots->setObjectName(QStringLiteral("actionScreenshots"));
 | 
			
		||||
		actionScreenshots.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Manage Screenshots"));
 | 
			
		||||
		actionScreenshots.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "View and upload screenshots for this instance."));
 | 
			
		||||
		all_actions.append(&actionScreenshots);
 | 
			
		||||
		instanceToolBar->addAction(actionScreenshots);
 | 
			
		||||
 | 
			
		||||
		actionChangeInstGroup = TranslatedAction(MainWindow);
 | 
			
		||||
		actionChangeInstGroup->setObjectName(QStringLiteral("actionChangeInstGroup"));
 | 
			
		||||
		actionChangeInstGroup.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Change Group"));
 | 
			
		||||
		actionChangeInstGroup.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Change the selected instance's group."));
 | 
			
		||||
		all_actions.append(&actionChangeInstGroup);
 | 
			
		||||
		instanceToolBar->addAction(actionChangeInstGroup);
 | 
			
		||||
 | 
			
		||||
		instanceToolBar->addSeparator();
 | 
			
		||||
 | 
			
		||||
		actionViewSelectedInstFolder = TranslatedAction(MainWindow);
 | 
			
		||||
		actionViewSelectedInstFolder->setObjectName(QStringLiteral("actionViewSelectedInstFolder"));
 | 
			
		||||
		actionViewSelectedInstFolder.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Instance Folder"));
 | 
			
		||||
		actionViewSelectedInstFolder.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open the selected instance's root folder in a file browser."));
 | 
			
		||||
		all_actions.append(&actionViewSelectedInstFolder);
 | 
			
		||||
		instanceToolBar->addAction(actionViewSelectedInstFolder);
 | 
			
		||||
 | 
			
		||||
		actionConfig_Folder = TranslatedAction(MainWindow);
 | 
			
		||||
		actionConfig_Folder->setObjectName(QStringLiteral("actionConfig_Folder"));
 | 
			
		||||
		actionConfig_Folder.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Config Folder"));
 | 
			
		||||
		actionConfig_Folder.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Open the instance's config folder."));
 | 
			
		||||
		all_actions.append(&actionConfig_Folder);
 | 
			
		||||
		instanceToolBar->addAction(actionConfig_Folder);
 | 
			
		||||
 | 
			
		||||
		instanceToolBar->addSeparator();
 | 
			
		||||
 | 
			
		||||
		actionExportInstance = TranslatedAction(MainWindow);
 | 
			
		||||
		actionExportInstance->setObjectName(QStringLiteral("actionExportInstance"));
 | 
			
		||||
		actionExportInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Export Instance"));
 | 
			
		||||
		// FIXME: missing tooltip
 | 
			
		||||
		all_actions.append(&actionExportInstance);
 | 
			
		||||
		instanceToolBar->addAction(actionExportInstance);
 | 
			
		||||
 | 
			
		||||
		actionDeleteInstance = TranslatedAction(MainWindow);
 | 
			
		||||
		actionDeleteInstance->setObjectName(QStringLiteral("actionDeleteInstance"));
 | 
			
		||||
		actionDeleteInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Delete"));
 | 
			
		||||
		actionDeleteInstance.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Delete the selected instance."));
 | 
			
		||||
		all_actions.append(&actionDeleteInstance);
 | 
			
		||||
		instanceToolBar->addAction(actionDeleteInstance);
 | 
			
		||||
 | 
			
		||||
		actionCopyInstance = TranslatedAction(MainWindow);
 | 
			
		||||
		actionCopyInstance->setObjectName(QStringLiteral("actionCopyInstance"));
 | 
			
		||||
		actionCopyInstance->setIcon(MMC->getThemedIcon("copy"));
 | 
			
		||||
		actionCopyInstance.setTextId(QT_TRANSLATE_NOOP("MainWindow", "Copy Instance"));
 | 
			
		||||
		actionCopyInstance.setTooltipId(QT_TRANSLATE_NOOP("MainWindow", "Copy the selected instance."));
 | 
			
		||||
		all_actions.append(&actionCopyInstance);
 | 
			
		||||
		instanceToolBar->addAction(actionCopyInstance);
 | 
			
		||||
 | 
			
		||||
		all_toolbars.append(&instanceToolBar);
 | 
			
		||||
		MainWindow->addToolBar(Qt::RightToolBarArea, instanceToolBar);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void setupUi(QMainWindow *MainWindow)
 | 
			
		||||
	{
 | 
			
		||||
		if (MainWindow->objectName().isEmpty())
 | 
			
		||||
@@ -157,87 +555,10 @@ public:
 | 
			
		||||
		}
 | 
			
		||||
		MainWindow->resize(694, 563);
 | 
			
		||||
		MainWindow->setWindowIcon(MMC->getThemedIcon("multimc"));
 | 
			
		||||
		actionAddInstance = new QAction(MainWindow);
 | 
			
		||||
		actionAddInstance->setObjectName(QStringLiteral("actionAddInstance"));
 | 
			
		||||
		actionAddInstance->setIcon(MMC->getThemedIcon("new"));
 | 
			
		||||
		actionViewInstanceFolder = new QAction(MainWindow);
 | 
			
		||||
		actionViewInstanceFolder->setObjectName(QStringLiteral("actionViewInstanceFolder"));
 | 
			
		||||
		actionViewInstanceFolder->setIcon(MMC->getThemedIcon("viewfolder"));
 | 
			
		||||
		actionRefresh = new QAction(MainWindow);
 | 
			
		||||
		actionRefresh->setObjectName(QStringLiteral("actionRefresh"));
 | 
			
		||||
		actionRefresh->setIcon(MMC->getThemedIcon("refresh"));
 | 
			
		||||
		actionViewCentralModsFolder = new QAction(MainWindow);
 | 
			
		||||
		actionViewCentralModsFolder->setObjectName(QStringLiteral("actionViewCentralModsFolder"));
 | 
			
		||||
		actionViewCentralModsFolder->setIcon(MMC->getThemedIcon("centralmods"));
 | 
			
		||||
		if(BuildConfig.UPDATER_ENABLED)
 | 
			
		||||
		{
 | 
			
		||||
			actionCheckUpdate = new QAction(MainWindow);
 | 
			
		||||
			actionCheckUpdate->setObjectName(QStringLiteral("actionCheckUpdate"));
 | 
			
		||||
			actionCheckUpdate->setIcon(MMC->getThemedIcon("checkupdate"));
 | 
			
		||||
		}
 | 
			
		||||
		actionSettings = new QAction(MainWindow);
 | 
			
		||||
		actionSettings->setObjectName(QStringLiteral("actionSettings"));
 | 
			
		||||
		actionSettings->setIcon(MMC->getThemedIcon("settings"));
 | 
			
		||||
		actionSettings->setMenuRole(QAction::PreferencesRole);
 | 
			
		||||
		actionReportBug = new QAction(MainWindow);
 | 
			
		||||
		actionReportBug->setObjectName(QStringLiteral("actionReportBug"));
 | 
			
		||||
		actionReportBug->setIcon(MMC->getThemedIcon("bug"));
 | 
			
		||||
		actionPatreon = new QAction(MainWindow);
 | 
			
		||||
		actionPatreon->setObjectName(QStringLiteral("actionPatreon"));
 | 
			
		||||
		actionPatreon->setIcon(MMC->getThemedIcon("patreon"));
 | 
			
		||||
		actionMoreNews = new QAction(MainWindow);
 | 
			
		||||
		actionMoreNews->setObjectName(QStringLiteral("actionMoreNews"));
 | 
			
		||||
		actionMoreNews->setIcon(MMC->getThemedIcon("news"));
 | 
			
		||||
		actionAbout = new QAction(MainWindow);
 | 
			
		||||
		actionAbout->setObjectName(QStringLiteral("actionAbout"));
 | 
			
		||||
		actionAbout->setIcon(MMC->getThemedIcon("about"));
 | 
			
		||||
		actionAbout->setMenuRole(QAction::AboutRole);
 | 
			
		||||
		actionLaunchInstance = new QAction(MainWindow);
 | 
			
		||||
		actionLaunchInstance->setObjectName(QStringLiteral("actionLaunchInstance"));
 | 
			
		||||
		actionRenameInstance = new QAction(MainWindow);
 | 
			
		||||
		actionRenameInstance->setObjectName(QStringLiteral("actionRenameInstance"));
 | 
			
		||||
		actionChangeInstGroup = new QAction(MainWindow);
 | 
			
		||||
		actionChangeInstGroup->setObjectName(QStringLiteral("actionChangeInstGroup"));
 | 
			
		||||
		actionChangeInstIcon = new QAction(MainWindow);
 | 
			
		||||
		actionChangeInstIcon->setObjectName(QStringLiteral("actionChangeInstIcon"));
 | 
			
		||||
		actionChangeInstIcon->setEnabled(true);
 | 
			
		||||
		actionChangeInstIcon->setIcon(QIcon(":/icons/instances/infinity"));
 | 
			
		||||
		actionChangeInstIcon->setIconVisibleInMenu(true);
 | 
			
		||||
		actionEditInstNotes = new QAction(MainWindow);
 | 
			
		||||
		actionEditInstNotes->setObjectName(QStringLiteral("actionEditInstNotes"));
 | 
			
		||||
		actionEditInstance = new QAction(MainWindow);
 | 
			
		||||
		actionEditInstance->setObjectName(QStringLiteral("actionEditInstance"));
 | 
			
		||||
		actionWorlds = new QAction(MainWindow);
 | 
			
		||||
		actionWorlds->setObjectName(QStringLiteral("actionWorlds"));
 | 
			
		||||
		actionViewSelectedInstFolder = new QAction(MainWindow);
 | 
			
		||||
		actionViewSelectedInstFolder->setObjectName(QStringLiteral("actionViewSelectedInstFolder"));
 | 
			
		||||
		actionDeleteInstance = new QAction(MainWindow);
 | 
			
		||||
		actionDeleteInstance->setObjectName(QStringLiteral("actionDeleteInstance"));
 | 
			
		||||
		actionConfig_Folder = new QAction(MainWindow);
 | 
			
		||||
		actionConfig_Folder->setObjectName(QStringLiteral("actionConfig_Folder"));
 | 
			
		||||
		actionCAT = new QAction(MainWindow);
 | 
			
		||||
		actionCAT->setObjectName(QStringLiteral("actionCAT"));
 | 
			
		||||
		actionCAT->setCheckable(true);
 | 
			
		||||
		actionCAT->setIcon(MMC->getThemedIcon("cat"));
 | 
			
		||||
		actionREDDIT = new QAction(MainWindow);
 | 
			
		||||
		actionREDDIT->setObjectName(QStringLiteral("actionREDDIT"));
 | 
			
		||||
		actionREDDIT->setIcon(MMC->getThemedIcon("reddit-alien"));
 | 
			
		||||
		actionDISCORD = new QAction(MainWindow);
 | 
			
		||||
		actionDISCORD->setObjectName(QStringLiteral("actionDISCORD"));
 | 
			
		||||
		actionDISCORD->setIcon(MMC->getThemedIcon("discord"));
 | 
			
		||||
		actionCopyInstance = new QAction(MainWindow);
 | 
			
		||||
		actionCopyInstance->setObjectName(QStringLiteral("actionCopyInstance"));
 | 
			
		||||
		actionCopyInstance->setIcon(MMC->getThemedIcon("copy"));
 | 
			
		||||
		actionManageAccounts = new QAction(MainWindow);
 | 
			
		||||
		actionManageAccounts->setObjectName(QStringLiteral("actionManageAccounts"));
 | 
			
		||||
		actionLaunchInstanceOffline = new QAction(MainWindow);
 | 
			
		||||
		actionLaunchInstanceOffline->setObjectName(QStringLiteral("actionLaunchInstanceOffline"));
 | 
			
		||||
		actionScreenshots = new QAction(MainWindow);
 | 
			
		||||
		actionScreenshots->setObjectName(QStringLiteral("actionScreenshots"));
 | 
			
		||||
		actionInstanceSettings = new QAction(MainWindow);
 | 
			
		||||
		actionInstanceSettings->setObjectName(QStringLiteral("actionInstanceSettings"));
 | 
			
		||||
		actionExportInstance = new QAction(MainWindow);
 | 
			
		||||
		actionExportInstance->setObjectName(QStringLiteral("actionExportInstance"));
 | 
			
		||||
		MainWindow->setWindowTitle("MultiMC 5");
 | 
			
		||||
 | 
			
		||||
		createMainToolbar(MainWindow);
 | 
			
		||||
 | 
			
		||||
		centralWidget = new QWidget(MainWindow);
 | 
			
		||||
		centralWidget->setObjectName(QStringLiteral("centralWidget"));
 | 
			
		||||
		horizontalLayout = new QHBoxLayout(centralWidget);
 | 
			
		||||
@@ -247,68 +568,10 @@ public:
 | 
			
		||||
		horizontalLayout->setSizeConstraint(QLayout::SetDefaultConstraint);
 | 
			
		||||
		horizontalLayout->setContentsMargins(0, 0, 0, 0);
 | 
			
		||||
		MainWindow->setCentralWidget(centralWidget);
 | 
			
		||||
		mainToolBar = new QToolBar(MainWindow);
 | 
			
		||||
		mainToolBar->setObjectName(QStringLiteral("mainToolBar"));
 | 
			
		||||
		mainToolBar->setMovable(false);
 | 
			
		||||
		mainToolBar->setAllowedAreas(Qt::TopToolBarArea);
 | 
			
		||||
		mainToolBar->setToolButtonStyle(Qt::ToolButtonIconOnly);
 | 
			
		||||
		mainToolBar->setFloatable(false);
 | 
			
		||||
		MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);
 | 
			
		||||
		statusBar = new QStatusBar(MainWindow);
 | 
			
		||||
		statusBar->setObjectName(QStringLiteral("statusBar"));
 | 
			
		||||
		MainWindow->setStatusBar(statusBar);
 | 
			
		||||
		instanceToolBar = new QToolBar(MainWindow);
 | 
			
		||||
		instanceToolBar->setObjectName(QStringLiteral("instanceToolBar"));
 | 
			
		||||
		instanceToolBar->setEnabled(true);
 | 
			
		||||
		instanceToolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
 | 
			
		||||
		instanceToolBar->setToolButtonStyle(Qt::ToolButtonTextOnly);
 | 
			
		||||
		instanceToolBar->setFloatable(false);
 | 
			
		||||
		MainWindow->addToolBar(Qt::RightToolBarArea, instanceToolBar);
 | 
			
		||||
		newsToolBar = new QToolBar(MainWindow);
 | 
			
		||||
		newsToolBar->setObjectName(QStringLiteral("newsToolBar"));
 | 
			
		||||
		newsToolBar->setMovable(false);
 | 
			
		||||
		newsToolBar->setAllowedAreas(Qt::BottomToolBarArea);
 | 
			
		||||
		newsToolBar->setIconSize(QSize(16, 16));
 | 
			
		||||
		newsToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
 | 
			
		||||
		newsToolBar->setFloatable(false);
 | 
			
		||||
		MainWindow->addToolBar(Qt::BottomToolBarArea, newsToolBar);
 | 
			
		||||
 | 
			
		||||
		mainToolBar->addAction(actionAddInstance);
 | 
			
		||||
		mainToolBar->addSeparator();
 | 
			
		||||
		mainToolBar->addAction(actionViewInstanceFolder);
 | 
			
		||||
		mainToolBar->addAction(actionViewCentralModsFolder);
 | 
			
		||||
		mainToolBar->addAction(actionRefresh);
 | 
			
		||||
		mainToolBar->addSeparator();
 | 
			
		||||
		if(BuildConfig.UPDATER_ENABLED)
 | 
			
		||||
		{
 | 
			
		||||
			mainToolBar->addAction(actionCheckUpdate);
 | 
			
		||||
		}
 | 
			
		||||
		mainToolBar->addAction(actionSettings);
 | 
			
		||||
		mainToolBar->addSeparator();
 | 
			
		||||
		mainToolBar->addAction(actionReportBug);
 | 
			
		||||
		mainToolBar->addAction(actionAbout);
 | 
			
		||||
		mainToolBar->addSeparator();
 | 
			
		||||
		mainToolBar->addAction(actionPatreon);
 | 
			
		||||
		mainToolBar->addAction(actionREDDIT);
 | 
			
		||||
		mainToolBar->addAction(actionDISCORD);
 | 
			
		||||
		mainToolBar->addAction(actionCAT);
 | 
			
		||||
		instanceToolBar->addAction(actionLaunchInstance);
 | 
			
		||||
		instanceToolBar->addAction(actionLaunchInstanceOffline);
 | 
			
		||||
		instanceToolBar->addSeparator();
 | 
			
		||||
		instanceToolBar->addAction(actionEditInstance);
 | 
			
		||||
		instanceToolBar->addAction(actionInstanceSettings);
 | 
			
		||||
		instanceToolBar->addAction(actionEditInstNotes);
 | 
			
		||||
		instanceToolBar->addAction(actionWorlds);
 | 
			
		||||
		instanceToolBar->addAction(actionScreenshots);
 | 
			
		||||
		instanceToolBar->addAction(actionChangeInstGroup);
 | 
			
		||||
		instanceToolBar->addSeparator();
 | 
			
		||||
		instanceToolBar->addAction(actionViewSelectedInstFolder);
 | 
			
		||||
		instanceToolBar->addAction(actionConfig_Folder);
 | 
			
		||||
		instanceToolBar->addSeparator();
 | 
			
		||||
		instanceToolBar->addAction(actionExportInstance);
 | 
			
		||||
		instanceToolBar->addAction(actionDeleteInstance);
 | 
			
		||||
		instanceToolBar->addAction(actionCopyInstance);
 | 
			
		||||
		newsToolBar->addAction(actionMoreNews);
 | 
			
		||||
		createStatusBar(MainWindow);
 | 
			
		||||
		createNewsToolbar(MainWindow);
 | 
			
		||||
		createInstanceToolbar(MainWindow);
 | 
			
		||||
 | 
			
		||||
		retranslateUi(MainWindow);
 | 
			
		||||
 | 
			
		||||
@@ -317,69 +580,21 @@ public:
 | 
			
		||||
 | 
			
		||||
	void retranslateUi(QMainWindow *MainWindow)
 | 
			
		||||
	{
 | 
			
		||||
		MainWindow->setWindowTitle("MultiMC 5");
 | 
			
		||||
		actionAddInstance->setText(tr("Add Instance"));
 | 
			
		||||
		actionAddInstance->setToolTip(tr("Add a new instance."));
 | 
			
		||||
		actionViewInstanceFolder->setText(tr("View Instance Folder"));
 | 
			
		||||
		actionViewInstanceFolder->setToolTip(tr("Open the instance folder in a file browser."));
 | 
			
		||||
		actionRefresh->setText(tr("Refresh"));
 | 
			
		||||
		actionRefresh->setToolTip(tr("Reload the instance list."));
 | 
			
		||||
		actionViewCentralModsFolder->setText(tr("View Central Mods Folder"));
 | 
			
		||||
		actionViewCentralModsFolder->setToolTip(tr("Open the central mods folder in a file browser."));
 | 
			
		||||
		if(BuildConfig.UPDATER_ENABLED)
 | 
			
		||||
		QString winTitle = tr("MultiMC 5 - Version %1").arg(BuildConfig.printableVersionString());
 | 
			
		||||
		if (!BuildConfig.BUILD_PLATFORM.isEmpty())
 | 
			
		||||
		{
 | 
			
		||||
			actionCheckUpdate->setText(tr("Check for Updates"));
 | 
			
		||||
			actionCheckUpdate->setToolTip(tr("Check for new updates for MultiMC."));
 | 
			
		||||
			winTitle += tr(" on %1", "on platform, as in operating system").arg(BuildConfig.BUILD_PLATFORM);
 | 
			
		||||
		}
 | 
			
		||||
		MainWindow->setWindowTitle(winTitle);
 | 
			
		||||
		// all the actions
 | 
			
		||||
		for(auto * item: all_actions)
 | 
			
		||||
		{
 | 
			
		||||
			item->retranslate();
 | 
			
		||||
		}
 | 
			
		||||
		for(auto * item: all_toolbars)
 | 
			
		||||
		{
 | 
			
		||||
			item->retranslate();
 | 
			
		||||
		}
 | 
			
		||||
		actionSettings->setText(tr("Settings"));
 | 
			
		||||
		actionSettings->setToolTip(tr("Change settings."));
 | 
			
		||||
		actionReportBug->setText(tr("Report a Bug"));
 | 
			
		||||
		actionReportBug->setToolTip(tr("Open the bug tracker to report a bug with MultiMC."));
 | 
			
		||||
		actionPatreon->setText(tr("Support us on Patreon!"));
 | 
			
		||||
		actionPatreon->setToolTip(tr("Open the MultiMC Patreon page."));
 | 
			
		||||
		actionMoreNews->setText(tr("More news..."));
 | 
			
		||||
		actionMoreNews->setToolTip(tr("Open the MultiMC development blog to read more news about MultiMC."));
 | 
			
		||||
		actionAbout->setText(tr("About MultiMC"));
 | 
			
		||||
		actionAbout->setToolTip(tr("View information about MultiMC."));
 | 
			
		||||
		updateLaunchAction();
 | 
			
		||||
		actionRenameInstance->setText(tr("Instance Name"));
 | 
			
		||||
		actionRenameInstance->setToolTip(tr("Rename the selected instance."));
 | 
			
		||||
		actionChangeInstGroup->setText(tr("Change Group"));
 | 
			
		||||
		actionChangeInstGroup->setToolTip(tr("Change the selected instance's group."));
 | 
			
		||||
		actionChangeInstIcon->setText(tr("Change Icon"));
 | 
			
		||||
		actionChangeInstIcon->setToolTip(tr("Change the selected instance's icon."));
 | 
			
		||||
		actionEditInstNotes->setText(tr("Edit Notes"));
 | 
			
		||||
		actionEditInstNotes->setToolTip(tr("Edit the notes for the selected instance."));
 | 
			
		||||
		actionWorlds->setText(tr("View Worlds"));
 | 
			
		||||
		actionWorlds->setToolTip(tr("View the worlds of this instance."));
 | 
			
		||||
		actionEditInstance->setText(tr("Edit Instance"));
 | 
			
		||||
		actionEditInstance->setToolTip(tr("Change the instance settings, mods and versions."));
 | 
			
		||||
		actionViewSelectedInstFolder->setText(tr("Instance Folder"));
 | 
			
		||||
		actionViewSelectedInstFolder->setToolTip(tr("Open the selected instance's root folder in a file browser."));
 | 
			
		||||
		actionDeleteInstance->setText(tr("Delete"));
 | 
			
		||||
		actionDeleteInstance->setToolTip(tr("Delete the selected instance."));
 | 
			
		||||
		actionConfig_Folder->setText(tr("Config Folder"));
 | 
			
		||||
		actionConfig_Folder->setToolTip(tr("Open the instance's config folder."));
 | 
			
		||||
		actionCAT->setText(tr("Meow"));
 | 
			
		||||
		actionCAT->setToolTip(tr("It's a fluffy kitty :3"));
 | 
			
		||||
		actionREDDIT->setText(tr("Reddit"));
 | 
			
		||||
		actionREDDIT->setToolTip(tr("Open MultiMC subreddit."));
 | 
			
		||||
		actionDISCORD->setText(tr("Discord"));
 | 
			
		||||
		actionDISCORD->setToolTip(tr("Open MultiMC discord voice chat."));
 | 
			
		||||
		actionCopyInstance->setText(tr("Copy Instance"));
 | 
			
		||||
		actionCopyInstance->setToolTip(tr("Copy the selected instance."));
 | 
			
		||||
		actionManageAccounts->setText(tr("Manage Accounts"));
 | 
			
		||||
		actionManageAccounts->setToolTip(tr("Manage your Mojang or Minecraft accounts."));
 | 
			
		||||
		actionLaunchInstanceOffline->setText(tr("Launch Offline"));
 | 
			
		||||
		actionLaunchInstanceOffline->setToolTip(tr("Launch the selected instance in offline mode."));
 | 
			
		||||
		actionScreenshots->setText(tr("Manage Screenshots"));
 | 
			
		||||
		actionScreenshots->setToolTip(tr("View and upload screenshots for this instance."));
 | 
			
		||||
		actionInstanceSettings->setText(tr("Instance Settings"));
 | 
			
		||||
		actionInstanceSettings->setToolTip(tr("Change the settings specific to the instance."));
 | 
			
		||||
		actionExportInstance->setText(tr("Export Instance"));
 | 
			
		||||
		mainToolBar->setWindowTitle(tr("Main Toolbar"));
 | 
			
		||||
		instanceToolBar->setWindowTitle(tr("Instance Toolbar"));
 | 
			
		||||
		newsToolBar->setWindowTitle(tr("News Toolbar"));
 | 
			
		||||
	} // retranslateUi
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -387,13 +602,6 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new MainWindow
 | 
			
		||||
{
 | 
			
		||||
	ui->setupUi(this);
 | 
			
		||||
 | 
			
		||||
	QString winTitle = tr("MultiMC 5 - Version %1").arg(BuildConfig.printableVersionString());
 | 
			
		||||
	if (!BuildConfig.BUILD_PLATFORM.isEmpty())
 | 
			
		||||
	{
 | 
			
		||||
		winTitle += tr(" on %1", "on platform, as in operating system").arg(BuildConfig.BUILD_PLATFORM);
 | 
			
		||||
	}
 | 
			
		||||
	setWindowTitle(winTitle);
 | 
			
		||||
 | 
			
		||||
	// OSX magic.
 | 
			
		||||
	setUnifiedTitleAndToolBarOnMac(true);
 | 
			
		||||
 | 
			
		||||
@@ -404,28 +612,6 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new MainWindow
 | 
			
		||||
		connect(q, SIGNAL(activated()), qApp, SLOT(quit()));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// The instance action toolbar customizations
 | 
			
		||||
	{
 | 
			
		||||
		// disabled until we have an instance selected
 | 
			
		||||
		ui->instanceToolBar->setEnabled(false);
 | 
			
		||||
 | 
			
		||||
		changeIconButton = new LabeledToolButton();
 | 
			
		||||
		changeIconButton->setIcon(MMC->getThemedIcon("news"));
 | 
			
		||||
		changeIconButton->setToolTip(ui->actionChangeInstIcon->toolTip());
 | 
			
		||||
		connect(changeIconButton, SIGNAL(clicked(bool)), SLOT(on_actionChangeInstIcon_triggered()));
 | 
			
		||||
		ui->instanceToolBar->insertWidget(ui->actionLaunchInstance, changeIconButton);
 | 
			
		||||
		changeIconButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
 | 
			
		||||
 | 
			
		||||
		// the rename label is inside the rename tool button
 | 
			
		||||
		renameButton = new LabeledToolButton();
 | 
			
		||||
		renameButton->setText("Instance Name");
 | 
			
		||||
		renameButton->setToolTip(ui->actionRenameInstance->toolTip());
 | 
			
		||||
		connect(renameButton, SIGNAL(clicked(bool)), SLOT(on_actionRenameInstance_triggered()));
 | 
			
		||||
		ui->instanceToolBar->insertWidget(ui->actionLaunchInstance, renameButton);
 | 
			
		||||
		ui->instanceToolBar->insertSeparator(ui->actionLaunchInstance);
 | 
			
		||||
		renameButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Add the news label to the news toolbar.
 | 
			
		||||
	{
 | 
			
		||||
		m_newsChecker.reset(new NewsChecker(BuildConfig.NEWS_RSS_URL));
 | 
			
		||||
@@ -493,10 +679,6 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new MainWindow
 | 
			
		||||
	ui->mainToolBar->addWidget(spacer);
 | 
			
		||||
 | 
			
		||||
	accountMenu = new QMenu(this);
 | 
			
		||||
	manageAccountsAction = new QAction(tr("Manage Accounts"), this);
 | 
			
		||||
	manageAccountsAction->setCheckable(false);
 | 
			
		||||
	manageAccountsAction->setIcon(MMC->getThemedIcon("accounts"));
 | 
			
		||||
	connect(manageAccountsAction, SIGNAL(triggered(bool)), this, SLOT(on_actionManageAccounts_triggered()));
 | 
			
		||||
 | 
			
		||||
	repopulateAccountsMenu();
 | 
			
		||||
 | 
			
		||||
@@ -621,16 +803,10 @@ void MainWindow::showInstanceContextMenu(const QPoint &pos)
 | 
			
		||||
		actions = ui->instanceToolBar->actions();
 | 
			
		||||
 | 
			
		||||
		// replace the change icon widget with an actual action
 | 
			
		||||
		QAction *actionChangeIcon = new QAction(tr("Change Icon"), this);
 | 
			
		||||
		actionChangeIcon->setToolTip(ui->actionRenameInstance->toolTip());
 | 
			
		||||
		connect(actionChangeIcon, SIGNAL(triggered(bool)), SLOT(on_actionChangeInstIcon_triggered()));
 | 
			
		||||
		actions.replace(0, actionChangeIcon);
 | 
			
		||||
		actions.replace(0, ui->actionChangeInstIcon);
 | 
			
		||||
 | 
			
		||||
		// replace the rename widget with an actual action
 | 
			
		||||
		QAction *actionRename = new QAction(tr("Rename"), this);
 | 
			
		||||
		actionRename->setToolTip(ui->actionRenameInstance->toolTip());
 | 
			
		||||
		connect(actionRename, SIGNAL(triggered(bool)), SLOT(on_actionRenameInstance_triggered()));
 | 
			
		||||
		actions.replace(1, actionRename);
 | 
			
		||||
		actions.replace(1, ui->actionRenameInstance);
 | 
			
		||||
 | 
			
		||||
		// add header
 | 
			
		||||
		actions.prepend(actionSep);
 | 
			
		||||
@@ -802,7 +978,7 @@ void MainWindow::repopulateAccountsMenu()
 | 
			
		||||
	connect(action, SIGNAL(triggered(bool)), SLOT(changeActiveAccount()));
 | 
			
		||||
 | 
			
		||||
	accountMenu->addSeparator();
 | 
			
		||||
	accountMenu->addAction(manageAccountsAction);
 | 
			
		||||
	accountMenu->addAction(ui->actionManageAccounts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::updatesAllowedChanged(bool allowed)
 | 
			
		||||
@@ -1195,7 +1371,7 @@ void MainWindow::on_actionChangeInstIcon_triggered()
 | 
			
		||||
		m_selectedInstance->setIconKey(dlg.selectedIconKey);
 | 
			
		||||
		auto icon = MMC->icons()->getIcon(dlg.selectedIconKey);
 | 
			
		||||
		ui->actionChangeInstIcon->setIcon(icon);
 | 
			
		||||
		changeIconButton->setIcon(icon);
 | 
			
		||||
		ui->changeIconButton->setIcon(icon);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1205,7 +1381,7 @@ void MainWindow::iconUpdated(QString icon)
 | 
			
		||||
	{
 | 
			
		||||
		auto icon = MMC->icons()->getIcon(m_currentInstIcon);
 | 
			
		||||
		ui->actionChangeInstIcon->setIcon(icon);
 | 
			
		||||
		changeIconButton->setIcon(icon);
 | 
			
		||||
		ui->changeIconButton->setIcon(icon);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1214,7 +1390,7 @@ void MainWindow::updateInstanceToolIcon(QString new_icon)
 | 
			
		||||
	m_currentInstIcon = new_icon;
 | 
			
		||||
	auto icon = MMC->icons()->getIcon(m_currentInstIcon);
 | 
			
		||||
	ui->actionChangeInstIcon->setIcon(icon);
 | 
			
		||||
	changeIconButton->setIcon(icon);
 | 
			
		||||
	ui->changeIconButton->setIcon(icon);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::setSelectedInstanceById(const QString &id)
 | 
			
		||||
@@ -1425,7 +1601,7 @@ void MainWindow::on_actionRenameInstance_triggered()
 | 
			
		||||
			if (ok && name.length())
 | 
			
		||||
			{
 | 
			
		||||
				m_selectedInstance->setName(name);
 | 
			
		||||
				renameButton->setText(name);
 | 
			
		||||
				ui->renameButton->setText(name);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -1540,7 +1716,7 @@ void MainWindow::instanceChanged(const QModelIndex ¤t, const QModelIndex &
 | 
			
		||||
		}
 | 
			
		||||
		ui->actionLaunchInstanceOffline->setEnabled(m_selectedInstance->canLaunch());
 | 
			
		||||
		ui->actionExportInstance->setEnabled(m_selectedInstance->canExport());
 | 
			
		||||
		renameButton->setText(m_selectedInstance->name());
 | 
			
		||||
		ui->renameButton->setText(m_selectedInstance->name());
 | 
			
		||||
		m_statusLeft->setText(m_selectedInstance->getStatusbarDescription());
 | 
			
		||||
		updateInstanceToolIcon(m_selectedInstance->iconKey());
 | 
			
		||||
 | 
			
		||||
@@ -1574,7 +1750,7 @@ void MainWindow::selectionBad()
 | 
			
		||||
 | 
			
		||||
	statusBar()->clearMessage();
 | 
			
		||||
	ui->instanceToolBar->setEnabled(false);
 | 
			
		||||
	renameButton->setText(tr("Rename Instance"));
 | 
			
		||||
	ui->renameButton->setText(tr("Rename Instance"));
 | 
			
		||||
	updateInstanceToolIcon("infinity");
 | 
			
		||||
 | 
			
		||||
	// ...and then see if we can enable the previously selected instance
 | 
			
		||||
 
 | 
			
		||||
@@ -74,6 +74,10 @@ private slots:
 | 
			
		||||
	void on_actionChangeInstGroup_triggered();
 | 
			
		||||
 | 
			
		||||
	void on_actionChangeInstIcon_triggered();
 | 
			
		||||
	void on_changeIconButton_clicked(bool)
 | 
			
		||||
	{
 | 
			
		||||
		on_actionChangeInstIcon_triggered();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void on_actionViewInstanceFolder_triggered();
 | 
			
		||||
 | 
			
		||||
@@ -114,6 +118,10 @@ private slots:
 | 
			
		||||
	void on_actionExportInstance_triggered();
 | 
			
		||||
 | 
			
		||||
	void on_actionRenameInstance_triggered();
 | 
			
		||||
	void on_renameButton_clicked(bool)
 | 
			
		||||
	{
 | 
			
		||||
		on_actionRenameInstance_triggered();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void on_actionEditInstance_triggered();
 | 
			
		||||
 | 
			
		||||
@@ -185,14 +193,11 @@ private:
 | 
			
		||||
	// these are managed by Qt's memory management model!
 | 
			
		||||
	GroupView *view = nullptr;
 | 
			
		||||
	InstanceProxyModel *proxymodel = nullptr;
 | 
			
		||||
	LabeledToolButton *renameButton = nullptr;
 | 
			
		||||
	LabeledToolButton *changeIconButton = nullptr;
 | 
			
		||||
	QToolButton *newsLabel = nullptr;
 | 
			
		||||
	QLabel *m_statusLeft = nullptr;
 | 
			
		||||
	ServerStatus *m_statusRight = nullptr;
 | 
			
		||||
	QMenu *accountMenu = nullptr;
 | 
			
		||||
	QToolButton *accountMenuButton = nullptr;
 | 
			
		||||
	QAction *manageAccountsAction = nullptr;
 | 
			
		||||
 | 
			
		||||
	unique_qobject_ptr<NetJob> skin_download_job;
 | 
			
		||||
	unique_qobject_ptr<NewsChecker> m_newsChecker;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user