示例#1
0
bool MainWindow::savePath(const QString &path)
{
	if (!controller)
		return false;
	
	if (path.isEmpty())
		return showSaveAsDialog();
	
	const FileFormat *format = FileFormats.findFormatForFilename(path);
	if (format->isExportLossy())
	{
		QString message = tr("This map is being saved as a \"%1\" file. Information may be lost.\n\nPress Yes to save in this format.\nPress No to choose a different format.").arg(format->description());
		int result = QMessageBox::warning(this, tr("Warning"), message, QMessageBox::Yes, QMessageBox::No);
		if (result != QMessageBox::Yes)
			return showSaveAsDialog();
	}
	
	if (!controller->save(path))
		return false;
	
	setMostRecentlyUsedFile(path);
	
	setHasAutosaveConflict(false);
	removeAutosaveFile();
	
	if (path != currentPath())
	{
		setCurrentPath(path);
		removeAutosaveFile();
	}
	
	setHasUnsavedChanges(false);
	
	return true;
}
	void MapEditorWindow::setupMenu()
	{
		auto *menu = new QMenuBar(this);

		QMenu* fileMenu = new QMenu("File");

		QAction *newAction = new QAction("New...", this);
		newAction->setShortcut(QKeySequence("Ctrl+N"));
		fileMenu->addAction(newAction);
		connect(newAction, SIGNAL(triggered()), this, SLOT(showNewDialog()));

		QAction *openAction = new QAction("Open...", this);
		openAction->setShortcut(QKeySequence("Ctrl+O"));
		fileMenu->addAction(openAction);
		connect(openAction, SIGNAL(triggered()), this, SLOT(showOpenDialog()));

		saveAction = new QAction("Save", this);
		saveAction->setEnabled(false);
		saveAction->setShortcut(QKeySequence("Ctrl+S"));
		fileMenu->addAction(saveAction);
		connect(saveAction, SIGNAL(triggered()), this, SLOT(executeSaveAction()));

		saveAsAction = new QAction("Save as...", this);
		saveAsAction->setEnabled(false);
		saveAsAction->setShortcut(QKeySequence("Ctrl+Shift+S"));
		fileMenu->addAction(saveAsAction);
		connect(saveAsAction, SIGNAL(triggered()), this, SLOT(showSaveAsDialog()));

		closeAction = new QAction("Close", this);
		closeAction->setEnabled(false);
		closeAction->setShortcut(QKeySequence("Ctrl+W"));
		fileMenu->addAction(closeAction);
		connect(closeAction, SIGNAL(triggered()), this, SLOT(executeCloseAction()));

		fileMenu->addSeparator();

		QAction *exitAction = new QAction("Exit", this);
		fileMenu->addAction(exitAction);
		connect(exitAction, SIGNAL(triggered()), this, SLOT(executeExitAction()));

		QMenu *viewMenu = new QMenu("View");

		QMenu *viewObjectMenu = new QMenu("Object");
		viewMenu->addMenu(viewObjectMenu);
		QAction *viewPhysicsShapeAction = new QAction("Physics Shape", this);
		viewPhysicsShapeAction->setEnabled(false);
		viewPhysicsShapeAction->setCheckable(true);
		viewPhysicsShapeAction->setChecked(true);
		viewObjectMenu->addAction(viewPhysicsShapeAction);
		viewActions[SceneDisplayer::MODEL_PHYSICS] = viewPhysicsShapeAction;
		connect(viewPhysicsShapeAction, SIGNAL(triggered()), this, SLOT(executeViewPropertiesChangeAction()));

		QMenu *viewLightMenu = new QMenu("Light");
		viewMenu->addMenu(viewLightMenu);
		QAction *viewLightScopeAction = new QAction("Light Scope", this);
		viewLightScopeAction->setEnabled(false);
		viewLightScopeAction->setCheckable(true);
		viewLightScopeAction->setChecked(true);
		viewLightMenu->addAction(viewLightScopeAction);
		viewActions[SceneDisplayer::LIGHT_SCOPE] = viewLightScopeAction;
		connect(viewLightScopeAction, SIGNAL(triggered()), this, SLOT(executeViewPropertiesChangeAction()));

		QMenu *viewSoundMenu = new QMenu("Sound");
		viewMenu->addMenu(viewSoundMenu);
		QAction *viewSoundTriggerAction = new QAction("Sound Trigger", this);
		viewSoundTriggerAction->setEnabled(false);
		viewSoundTriggerAction->setCheckable(true);
		viewSoundTriggerAction->setChecked(true);
		viewSoundMenu->addAction(viewSoundTriggerAction);
		viewActions[SceneDisplayer::SOUND_TRIGGER] = viewSoundTriggerAction;
		connect(viewSoundTriggerAction, SIGNAL(triggered()), this, SLOT(executeViewPropertiesChangeAction()));

		QMenu *viewAIMenu = new QMenu("AI");
		viewMenu->addMenu(viewAIMenu);
		QAction *viewNavMeshAction = new QAction("Navigation Mesh", this);
		viewNavMeshAction->setEnabled(false);
		viewNavMeshAction->setCheckable(true);
		viewNavMeshAction->setChecked(true);
		viewAIMenu->addAction(viewNavMeshAction);
		viewActions[SceneDisplayer::NAV_MESH] = viewNavMeshAction;
		connect(viewNavMeshAction, SIGNAL(triggered()), this, SLOT(executeViewPropertiesChangeAction()));

		menu->addMenu(fileMenu);
		menu->addMenu(viewMenu);
		this->setMenuBar(menu);
	}