Fix for windows and update tool menu after closing settings dialog
This commit is contained in:
		| @@ -360,6 +360,51 @@ void MainWindow::showInstanceContextMenu(const QPoint &pos) | ||||
| 	myMenu.exec(view->mapToGlobal(pos)); | ||||
| } | ||||
|  | ||||
| void MainWindow::updateToolsMenu() | ||||
| { | ||||
| 	if (ui->actionLaunchInstance->menu()) | ||||
| 	{ | ||||
| 		ui->actionLaunchInstance->menu()->deleteLater(); | ||||
| 	} | ||||
| 	QMenu *launchMenu = new QMenu(this); | ||||
| 	QAction *normalLaunch = launchMenu->addAction(tr("Launch")); | ||||
| 	connect(normalLaunch, &QAction::triggered, [this](){doLaunch();}); | ||||
| 	launchMenu->addSeparator()->setText(tr("Profilers")); | ||||
| 	for (auto profiler : MMC->profilers().values()) | ||||
| 	{ | ||||
| 		QAction *profilerAction = launchMenu->addAction(profiler->name()); | ||||
| 		QString error; | ||||
| 		if (!profiler->check(&error)) | ||||
| 		{ | ||||
| 			profilerAction->setDisabled(true); | ||||
| 			profilerAction->setToolTip(tr("Profiler not setup correctly. Go into settings, \"External Tools\".")); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			connect(profilerAction, &QAction::triggered, [this, profiler](){doLaunch(true, profiler.get());}); | ||||
| 		} | ||||
| 	} | ||||
| 	launchMenu->addSeparator()->setText(tr("Tools")); | ||||
| 	for (auto tool : MMC->tools().values()) | ||||
| 	{ | ||||
| 		QAction *toolAction = launchMenu->addAction(tool->name()); | ||||
| 		QString error; | ||||
| 		if (!tool->check(&error)) | ||||
| 		{ | ||||
| 			toolAction->setDisabled(true); | ||||
| 			toolAction->setToolTip(tr("Tool not setup correctly. Go into settings, \"External Tools\".")); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			connect(toolAction, &QAction::triggered, [this, tool]() | ||||
| 			{ | ||||
| 				tool->createDetachedTool(m_selectedInstance, this)->run(); | ||||
| 			}); | ||||
| 		} | ||||
| 	} | ||||
| 	ui->actionLaunchInstance->setMenu(launchMenu); | ||||
| } | ||||
|  | ||||
| void MainWindow::repopulateAccountsMenu() | ||||
| { | ||||
| 	accountMenu->clear(); | ||||
| @@ -933,6 +978,7 @@ void MainWindow::on_actionSettings_triggered() | ||||
| 	// FIXME: quick HACK to make this work. improve, optimize. | ||||
| 	proxymodel->invalidate(); | ||||
| 	proxymodel->sort(0); | ||||
| 	updateToolsMenu(); | ||||
| } | ||||
|  | ||||
| void MainWindow::on_actionManageAccounts_triggered() | ||||
| @@ -1429,47 +1475,7 @@ void MainWindow::instanceChanged(const QModelIndex ¤t, const QModelIndex & | ||||
| 		m_statusLeft->setText(m_selectedInstance->getStatusbarDescription()); | ||||
| 		updateInstanceToolIcon(m_selectedInstance->iconKey()); | ||||
|  | ||||
| 		if (ui->actionLaunchInstance->menu()) | ||||
| 		{ | ||||
| 			ui->actionLaunchInstance->menu()->deleteLater(); | ||||
| 		} | ||||
| 		QMenu *launchMenu = new QMenu; | ||||
| 		QAction *normalLaunch = launchMenu->addAction(tr("Launch")); | ||||
| 		connect(normalLaunch, &QAction::triggered, [this](){doLaunch();}); | ||||
| 		launchMenu->addSeparator()->setText(tr("Profilers")); | ||||
| 		for (auto profiler : MMC->profilers().values()) | ||||
| 		{ | ||||
| 			QAction *profilerAction = launchMenu->addAction(profiler->name()); | ||||
| 			QString error; | ||||
| 			if (!profiler->check(&error)) | ||||
| 			{ | ||||
| 				profilerAction->setDisabled(true); | ||||
| 				profilerAction->setToolTip(tr("Profiler not setup correctly. Go into settings, \"External Tools\".")); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				connect(profilerAction, &QAction::triggered, [this, profiler](){doLaunch(true, profiler.get());}); | ||||
| 			} | ||||
| 		} | ||||
| 		launchMenu->addSeparator()->setText(tr("Tools")); | ||||
| 		for (auto tool : MMC->tools().values()) | ||||
| 		{ | ||||
| 			QAction *toolAction = launchMenu->addAction(tool->name()); | ||||
| 			QString error; | ||||
| 			if (!tool->check(&error)) | ||||
| 			{ | ||||
| 				toolAction->setDisabled(true); | ||||
| 				toolAction->setToolTip(tr("Tool not setup correctly. Go into settings, \"External Tools\".")); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				connect(toolAction, &QAction::triggered, [this, tool]() | ||||
| 				{ | ||||
| 					tool->createDetachedTool(m_selectedInstance, this)->run(); | ||||
| 				}); | ||||
| 			} | ||||
| 		} | ||||
| 		ui->actionLaunchInstance->setMenu(launchMenu); | ||||
| 		updateToolsMenu(); | ||||
|  | ||||
| 		MMC->settings()->set("SelectedInstance", m_selectedInstance->id()); | ||||
| 	} | ||||
|   | ||||
| @@ -141,6 +141,8 @@ slots: | ||||
|  | ||||
| 	void showInstanceContextMenu(const QPoint&); | ||||
|  | ||||
| 	void updateToolsMenu(); | ||||
|  | ||||
| public | ||||
| slots: | ||||
| 	void instanceActivated(QModelIndex); | ||||
|   | ||||
| @@ -23,8 +23,16 @@ void MCEditTool::runImpl() | ||||
| 	{ | ||||
| 		return; | ||||
| 	} | ||||
| 	const QString program = | ||||
| 		QDir(mceditPath).absoluteFilePath("mcedit.py"); | ||||
| 	QDir mceditDir(mceditPath); | ||||
| 	QString program; | ||||
| 	if (mceditDir.exists("mcedit.py")) | ||||
| 	{ | ||||
| 		program = mceditDir.absoluteFilePath("mcedit.py"); | ||||
| 	} | ||||
| 	else if (mceditDir.exists("mcedit.exe")) | ||||
| 	{ | ||||
| 		program = mceditDir.absoluteFilePath("mcedit.exe"); | ||||
| 	} | ||||
| 	QProcess::startDetached(program, QStringList() << save, mceditPath); | ||||
| } | ||||
|  | ||||
| @@ -53,7 +61,7 @@ bool MCEditFactory::check(const QString &path, QString *error) | ||||
| 		*error = QObject::tr("Path does not exist"); | ||||
| 		return false; | ||||
| 	} | ||||
| 	if (!dir.exists("mcedit.py")) | ||||
| 	if (!dir.exists("mcedit.py") && !dir.exists("mcedit.exe")) | ||||
| 	{ | ||||
| 		*error = QObject::tr("Path does not contain mcedit.py"); | ||||
| 		return false; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user