Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 26 additions & 23 deletions engine/src/editor/baseassetprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,11 @@ void BaseAssetProvider::onDirectoryChangedForce(const QString &path, bool force)
}

void BaseAssetProvider::removeResource(const TString &source) {
AssetManager *asset = AssetManager::instance();
ProjectSettings *project = ProjectSettings::instance();
if(source.isEmpty()) {
return;
}

ProjectSettings *project = ProjectSettings::instance();
TString src(project->contentPath() + "/" + source);
if(File::isDir(src)) {
m_dirWatcher->removePath(src.data());
Expand All @@ -109,30 +111,31 @@ void BaseAssetProvider::removeResource(const TString &source) {
}
QDir().rmdir(src.data());
return;
} else {
CodeBuilder *builder = nullptr;
BuilderSettings *settings = dynamic_cast<BuilderSettings *>(asset->fetchSettings(src));
if(settings) {
builder = settings->builder();
}
m_fileWatcher->removePath(src.data());
Engine::unloadResource(source);
}

TString uuid = asset->unregisterAsset(source);
if(!uuid.isEmpty()) {
File::remove(project->importPath() + "/" + uuid);
File::remove(project->iconPath() + "/" + uuid + ".png");
}
AssetManager *asset = AssetManager::instance();
CodeBuilder *builder = nullptr;
BuilderSettings *settings = dynamic_cast<BuilderSettings *>(asset->fetchSettings(src));
if(settings) {
builder = settings->builder();
}
m_fileWatcher->removePath(src.data());
Engine::unloadResource(source);

File::remove(src + "." + gMetaExt);
File::remove(src);
TString uuid = asset->unregisterAsset(source);
if(!uuid.isEmpty()) {
File::remove(project->importPath() + "/" + uuid);
File::remove(project->iconPath() + "/" + uuid + ".png");
}

if(builder) {
builder->rescanSources(project->contentPath());
if(!builder->isEmpty()) {
builder->makeOutdated();
builder->buildProject();
}
File::remove(src + "." + gMetaExt);
File::remove(src);

if(builder) {
builder->rescanSources(project->contentPath());
if(!builder->isEmpty()) {
builder->makeOutdated();
builder->buildProject();
}
}

Expand Down
73 changes: 51 additions & 22 deletions worldeditor/src/screens/baseobjectmodel/baseobjectmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,72 +7,101 @@ BaseObjectModel::BaseObjectModel(QObject *parent) :
}

QObject *BaseObjectModel::createRoot() {
return new QObject(this);
QObject *root = new QObject(this);
addItem(root);
return root;
}

int BaseObjectModel::rowCount(const QModelIndex &parent) const {
QObject *parentItem = m_rootItem;
if(parent.isValid()) {
parentItem = static_cast<QObject *>(parent.internalPointer());
parentItem = getObject(parent);
}
return parentItem->children().size();
if(parentItem) {
return parentItem->children().size();
}
return 0;
}

QModelIndex BaseObjectModel::index(int row, int column, const QModelIndex &parent) const {
QObject *parentItem = m_rootItem;
if(parent.isValid()) {
parentItem = static_cast<QObject *>(parent.internalPointer());
parentItem = getObject(parent);
}
if(row >= parentItem->children().size() || row < 0) {
if(!parentItem || row >= parentItem->children().size() || row < 0) {
return QModelIndex();
}
return createIndex(row, column, parentItem->children().at(row));

QObject *item = parentItem->children().at(row);
return createIndex(row, column, reinterpret_cast<quintptr>(item));
}

QModelIndex BaseObjectModel::parent(const QModelIndex &index) const {
if(!index.isValid()) {
return QModelIndex();
}

QObject *childItem = static_cast<QObject *>(index.internalPointer());
QObject *parentItem = childItem->parent();

if(!parentItem || parentItem == m_rootItem) {
return QModelIndex();
}
QObject *childItem = getObject(index);
if(childItem) {
QObject *parentItem = childItem->parent();
if(!parentItem || parentItem == m_rootItem) {
return QModelIndex();
}

QObject *superParent = parentItem->parent();
if(!superParent) {
return QModelIndex();
QObject *superParent = parentItem->parent();
if(!superParent) {
return QModelIndex();
}
int row = superParent->children().indexOf(parentItem);
return createIndex(row, 0, reinterpret_cast<quintptr>(parentItem));
}

return createIndex(superParent->children().indexOf(parentItem), 0, parentItem);
return QModelIndex();
}

Qt::ItemFlags BaseObjectModel::flags(const QModelIndex &index) const {
if(!index.isValid()) {
return Qt::ItemIsEnabled | Qt::ItemIsDropEnabled;
}
QObject *item = static_cast<QObject *>(index.internalPointer());
QObject *item = getObject(index);
// only allow change of value attribute
if(!item || !item->children().isEmpty()) {
return Qt::ItemIsEnabled | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
} else {
return Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
return Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}

QModelIndex BaseObjectModel::getIndex(QObject *object, const QModelIndex &parent) const {
for(int i = 0; i < rowCount(parent); i++) {
QModelIndex index = BaseObjectModel::index(i, 0, parent);
if(index.internalPointer() == object) {
if(getObject(index) == object) {
return index;
}
index = getIndex(object, index);
if(index.isValid()) {
return index;
}
}

return QModelIndex();
}

bool BaseObjectModel::removeResource(const QModelIndex &index) {
return m_items.remove(index.internalId()) > 0;
}

void BaseObjectModel::addItem(QObject *object) {
m_items[reinterpret_cast<quintptr>(object)] = object;
}

QObject *BaseObjectModel::getObject(const QModelIndex &index) const {
quintptr id = index.internalId();
return m_items.value(id, nullptr);
}

void BaseObjectModel::clear() {
foreach(QObject *it, m_rootItem->children()) {
it->setParent(nullptr);
it->deleteLater();
}
m_items.clear();
}

12 changes: 9 additions & 3 deletions worldeditor/src/screens/baseobjectmodel/baseobjectmodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,21 @@ class BaseObjectModel : public QAbstractItemModel {

Qt::ItemFlags flags(const QModelIndex &index) const override;

virtual bool removeResource(const QModelIndex &index) { Q_UNUSED(index); return false; }
QModelIndex getIndex(QObject *object, const QModelIndex &parent = QModelIndex()) const;

virtual QString path(const QModelIndex &index) const { Q_UNUSED(index); return QString(); }
virtual bool removeResource(const QModelIndex &index);

QModelIndex getIndex(QObject *object, const QModelIndex &parent = QModelIndex()) const;
void addItem(QObject *object);

QObject *getObject(const QModelIndex &index) const;

void clear();

protected:
QObject *m_rootItem;

QHash<quintptr, QObject *> m_items;

};

#endif // BASEOBJECTMODEL_H
6 changes: 4 additions & 2 deletions worldeditor/src/screens/componentbrowser/componentbrowser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,10 @@ void ComponentBrowser::on_findComponent_textChanged(const QString &arg1) {

void ComponentBrowser::on_componentsTree_clicked(const QModelIndex &index) {
if(m_proxyModel->rowCount(index) == 0) {
QObject *object = static_cast<QObject *>(m_proxyModel->mapToSource(index).internalPointer());
emit componentSelected(object->objectName());
QObject *object = ComponentModel::instance()->getObject(m_proxyModel->mapToSource(index));
if(object) {
emit componentSelected(object->objectName());
}
}
}

Expand Down
13 changes: 3 additions & 10 deletions worldeditor/src/screens/componentbrowser/componentmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,6 @@ ComponentModel *ComponentModel::instance() {
return m_pInstance;
}

void ComponentModel::destroy() {
delete m_pInstance;
m_pInstance = nullptr;
}

int ComponentModel::columnCount(const QModelIndex &) const {
return 3;
}
Expand All @@ -42,7 +37,7 @@ QVariant ComponentModel::data(const QModelIndex &index, int role) const {
if(!index.isValid()) {
return QVariant();
}
QObject *item = static_cast<QObject* >(index.internalPointer());
QObject *item = getObject(index);

switch(role) {
case Qt::ToolTipRole:
Expand All @@ -60,10 +55,7 @@ QVariant ComponentModel::data(const QModelIndex &index, int role) const {
}

void ComponentModel::update() {
foreach(QObject *it, m_rootItem->children()) {
it->setParent(nullptr);
it->deleteLater();
}
clear();

// Iterate all components
for(const auto &it : ObjectSystem::factories()) {
Expand All @@ -85,6 +77,7 @@ void ComponentModel::update() {
item = new QObject(p);
item->setObjectName(part);
item->setProperty(gURI, it.second.data());
addItem(item);
}
i++;
}
Expand Down
4 changes: 1 addition & 3 deletions worldeditor/src/screens/componentbrowser/componentmodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ class ComponentModel : public BaseObjectModel {
public:
static ComponentModel *instance();

static void destroy();

int columnCount(const QModelIndex &) const;

QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
Expand All @@ -26,7 +24,7 @@ public slots:
ComponentModel();
~ComponentModel() {}

static ComponentModel *m_pInstance;
static ComponentModel *m_pInstance;

};

Expand Down
Loading
Loading