Skip to content

Commit

Permalink
Project: Moved object types file to project
Browse files Browse the repository at this point in the history
Is now changed in Project Properties rather than being stored as a
global preference.

Issue #1665
  • Loading branch information
bjorn committed Apr 22, 2020
1 parent 923ecac commit 532e943
Show file tree
Hide file tree
Showing 16 changed files with 166 additions and 206 deletions.
3 changes: 3 additions & 0 deletions src/libtiled/worldmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,9 @@ void WorldManager::unloadWorld(const QString &fileName)
*/
void WorldManager::unloadAllWorlds()
{
if (mWorlds.isEmpty())
return;

QMap<QString, World*> worlds;
worlds.swap(mWorlds);

Expand Down
2 changes: 1 addition & 1 deletion src/tiled/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ static void messagesToConsole(QtMsgType type, const QMessageLogContext &context,
static void initializePluginsAndExtensions()
{
PluginManager::instance()->loadPlugins();
ScriptManager::instance().initialize();
ScriptManager::instance().ensureInitialized();
}

/**
Expand Down
8 changes: 5 additions & 3 deletions src/tiled/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -929,14 +929,15 @@ void MainWindow::initializeSession()
bool projectLoaded = !session.project.isEmpty() && project.load(session.project);

if (projectLoaded) {
Preferences::instance()->setObjectTypesFile(project.mObjectTypesFile);
mProjectDock->setProject(std::move(project));
updateWindowTitle();
}

// Script manager initialization is delayed until after the project has
// been loaded, to avoid immediately having to reset the engine again after
// adding the project's extension path.
ScriptManager::instance().initialize();
ScriptManager::instance().ensureInitialized();

if (projectLoaded || Preferences::instance()->restoreSessionOnStartup())
restoreSession();
Expand Down Expand Up @@ -1350,6 +1351,7 @@ void MainWindow::switchProject(Project project)
prefs->addRecentProject(project.fileName());
}

prefs->setObjectTypesFile(project.mObjectTypesFile);
mProjectDock->setProject(std::move(project));

ScriptManager::instance().refreshExtensionsPaths();
Expand Down Expand Up @@ -1381,8 +1383,8 @@ void MainWindow::projectProperties()
Project &project = mProjectDock->project();

if (ProjectPropertiesDialog(project, this).exec() == QDialog::Accepted) {
if (!project.fileName().isEmpty())
project.save(project.fileName());
project.save();
Preferences::instance()->setObjectTypesFile(project.mObjectTypesFile);

ScriptManager::instance().refreshExtensionsPaths();
}
Expand Down
59 changes: 13 additions & 46 deletions src/tiled/objecttypeseditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ QSize ColorDelegate::sizeHint(const QStyleOptionViewItem &,


ObjectTypesEditor::ObjectTypesEditor(QWidget *parent)
: QMainWindow(parent, Qt::Window)
: QDialog(parent)
, mUi(new Ui::ObjectTypesEditor)
, mObjectTypesModel(new ObjectTypesModel(this))
, mVariantManager(new VariantPropertyManager(this))
Expand All @@ -107,7 +107,9 @@ ObjectTypesEditor::ObjectTypesEditor(QWidget *parent)
mUi->objectTypesTable->setItemDelegateForColumn(1, new ColorDelegate(this));

QHeaderView *horizontalHeader = mUi->objectTypesTable->horizontalHeader();
horizontalHeader->setSectionResizeMode(QHeaderView::Stretch);
horizontalHeader->setSectionResizeMode(0, QHeaderView::Stretch);
horizontalHeader->setSectionResizeMode(1, QHeaderView::Fixed);
horizontalHeader->resizeSection(1, Utils::dpiScaled(50));

mUi->propertiesView->setFactoryForManager(mVariantManager, new VariantEditorFactory(this));
mUi->propertiesView->setResizeMode(QtTreePropertyBrowser::ResizeToContents);
Expand Down Expand Up @@ -139,10 +141,16 @@ ObjectTypesEditor::ObjectTypesEditor(QWidget *parent)
Utils::setThemeIcon(mAddPropertyAction, "add");
Utils::setThemeIcon(mRemovePropertyAction, "remove");

auto stretch = new QWidget;
stretch->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);

QToolBar *objectTypesToolBar = new QToolBar(this);
objectTypesToolBar->setIconSize(Utils::smallIconSize());
objectTypesToolBar->addAction(mAddObjectTypeAction);
objectTypesToolBar->addAction(mRemoveObjectTypeAction);
objectTypesToolBar->addWidget(stretch);
objectTypesToolBar->addAction(mUi->actionImport);
objectTypesToolBar->addAction(mUi->actionExport);

QToolBar *propertiesToolBar = new QToolBar(this);
propertiesToolBar->setIconSize(Utils::smallIconSize());
Expand Down Expand Up @@ -173,8 +181,6 @@ ObjectTypesEditor::ObjectTypesEditor(QWidget *parent)
connect(mRenamePropertyAction, &QAction::triggered,
this, &ObjectTypesEditor::renameProperty);

connect(mUi->actionChooseFile, &QAction::triggered,
this, &ObjectTypesEditor::chooseObjectTypesFile);
connect(mUi->actionImport, &QAction::triggered,
this, &ObjectTypesEditor::importObjectTypes);
connect(mUi->actionExport, &QAction::triggered,
Expand Down Expand Up @@ -337,52 +343,14 @@ void ObjectTypesEditor::removePropertyFromSelectedTypes(const QString &name)
applyObjectTypes();
}

void ObjectTypesEditor::chooseObjectTypesFile()
{
Preferences *prefs = Preferences::instance();
const QString startPath = prefs->objectTypesFile();

const QString fileName =
QFileDialog::getOpenFileName(this, tr("Choose Object Types File"),
startPath,
tr("Object Types files (*.xml *.json)"),
nullptr,
QFileDialog::DontConfirmOverwrite);

if (fileName.isEmpty())
return;

prefs->setLastPath(Preferences::ObjectTypesFile, fileName);

ObjectTypes objectTypes;

if (QFile::exists(fileName)) {
ObjectTypesSerializer serializer;

if (!serializer.readObjectTypes(fileName, objectTypes)) {
QMessageBox::critical(this, tr("Error Reading Object Types"),
serializer.errorString());
return;
}
}

prefs->setObjectTypesFile(fileName);

mSettingPrefObjectTypes = true;
prefs->setObjectTypes(objectTypes);
mSettingPrefObjectTypes = false;

mObjectTypesModel->setObjectTypes(objectTypes);
}

void ObjectTypesEditor::importObjectTypes()
{
Preferences *prefs = Preferences::instance();
const QString lastPath = prefs->lastPath(Preferences::ObjectTypesFile);
const QString fileName =
QFileDialog::getOpenFileName(this, tr("Import Object Types"),
lastPath,
tr("Object Types files (*.xml *.json)"));
QCoreApplication::translate("File Types", "Object Types files (*.xml *.json)"));
if (fileName.isEmpty())
return;

Expand All @@ -407,12 +375,11 @@ void ObjectTypesEditor::importObjectTypes()
}

mObjectTypesModel->setObjectTypes(currentTypes);
applyObjectTypes();
} else {
QMessageBox::critical(this, tr("Error Reading Object Types"),
serializer.errorString());
}

applyObjectTypes();
}

void ObjectTypesEditor::exportObjectTypes()
Expand All @@ -426,7 +393,7 @@ void ObjectTypesEditor::exportObjectTypes()
const QString fileName =
QFileDialog::getSaveFileName(this, tr("Export Object Types"),
lastPath,
tr("Object Types files (*.xml *.json)"));
QCoreApplication::translate("File Types", "Object Types files (*.xml *.json)"));
if (fileName.isEmpty())
return;

Expand Down
5 changes: 2 additions & 3 deletions src/tiled/objecttypeseditor.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

#include "properties.h"

#include <QMainWindow>
#include <QDialog>

namespace Ui {
class ObjectTypesEditor;
Expand All @@ -38,7 +38,7 @@ namespace Tiled {

class ObjectTypesModel;

class ObjectTypesEditor : public QMainWindow
class ObjectTypesEditor : public QDialog
{
Q_OBJECT

Expand All @@ -63,7 +63,6 @@ class ObjectTypesEditor : public QMainWindow
void applyPropertyToSelectedTypes(const QString &name, const QVariant &value);
void removePropertyFromSelectedTypes(const QString &name);

void chooseObjectTypesFile();
void importObjectTypes();
void exportObjectTypes();

Expand Down
140 changes: 59 additions & 81 deletions src/tiled/objecttypeseditor.ui
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ObjectTypesEditor</class>
<widget class="QMainWindow" name="ObjectTypesEditor">
<widget class="QDialog" name="ObjectTypesEditor">
<property name="geometry">
<rect>
<x>0</x>
Expand All @@ -13,94 +13,72 @@
<property name="windowTitle">
<string>Object Types Editor</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<widget class="QWidget" name="layoutWidget">
<layout class="QVBoxLayout" name="objectTypesLayout">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QTableView" name="objectTypesTable">
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
</attribute>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="layoutWidget1">
<layout class="QVBoxLayout" name="propertiesLayout">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QtTreePropertyBrowser" name="propertiesView" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</widget>
<property name="sizeGripEnabled">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<widget class="QWidget" name="layoutWidget">
<layout class="QVBoxLayout" name="objectTypesLayout">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QTableView" name="objectTypesTable">
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<attribute name="horizontalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
</attribute>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>652</width>
<height>22</height>
</rect>
</property>
<property name="nativeMenuBar">
<bool>false</bool>
</property>
<widget class="QMenu" name="menuFile">
<property name="title">
<string>File</string>
</property>
<addaction name="actionChooseFile"/>
<addaction name="separator"/>
<addaction name="actionImport"/>
<addaction name="actionExport"/>
</widget>
<addaction name="menuFile"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<widget class="QWidget" name="layoutWidget1">
<layout class="QVBoxLayout" name="propertiesLayout">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QtTreePropertyBrowser" name="propertiesView" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>1</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
<action name="actionExport">
<property name="text">
<string>Export Object Types...</string>
<string>Export...</string>
</property>
<property name="toolTip">
<string>Export Object Types</string>
</property>
</action>
<action name="actionImport">
<property name="text">
<string>Import Object Types...</string>
<string>Import...</string>
</property>
</action>
<action name="actionChooseFile">
<property name="text">
<string>Choose Object Types File...</string>
<property name="toolTip">
<string>Import Object Types</string>
</property>
</action>
</widget>
Expand Down
Loading

0 comments on commit 532e943

Please sign in to comment.