Fixed sprite rename and refresh bugs
This commit is contained in:
1 parent
0b4c275dfc
commit
a477581f6f
7 files changed
+329
-152
No files matched your search
@@ -102,7 +102,14 @@ void BackgroundPropertiesDialog::reject()
|
||||
|
||||
void BackgroundPropertiesDialog::loadBackground()
|
||||
{
|
||||
const auto path = QFileDialog::getOpenFileName(this, tr("Open a Background Image..."), {}, tr("BMP Files (*.bmp), PNG Files (*png)"));
|
||||
const auto path = QFileDialog::getOpenFileName(this, tr("Open a Background Image..."), {},
|
||||
QStringLiteral("%0 (*.png);;%1 (*.bmp);;%2 (*.tiff);;%3 (*.jpg *.jpeg);;%4 (*)")
|
||||
.arg(tr("PNG Files"))
|
||||
.arg(tr("BMP Files"))
|
||||
.arg(tr("TIFF Files"))
|
||||
.arg(tr("JPEG Files"))
|
||||
.arg(tr("All Files"))
|
||||
);
|
||||
if (path.isEmpty())
|
||||
return;
|
||||
|
||||
@@ -126,7 +133,14 @@ void BackgroundPropertiesDialog::saveBackground()
|
||||
return;
|
||||
}
|
||||
|
||||
const auto path = QFileDialog::getSaveFileName(this, tr("Save a Background Image..."), m_background.name + ".png", tr("PNG Files (*.png)"));
|
||||
const auto path = QFileDialog::getSaveFileName(this, tr("Save a Background Image..."), m_background.name + ".png",
|
||||
QStringLiteral("%0 (*.png);;%1 (*.bmp);;%2 (*.tiff);;%3 (*.jpg *.jpeg);;%4 (*)")
|
||||
.arg(tr("PNG Files"))
|
||||
.arg(tr("BMP Files"))
|
||||
.arg(tr("TIFF Files"))
|
||||
.arg(tr("JPEG Files"))
|
||||
.arg(tr("All Files"))
|
||||
);
|
||||
if (path.isEmpty())
|
||||
return;
|
||||
|
||||
|
||||
@@ -32,16 +32,7 @@ ObjectPropertiesDialog::ObjectPropertiesDialog(Object &object, ProjectTreeModel
|
||||
|
||||
m_ui->lineEditName->setText(m_object.name);
|
||||
m_ui->lineEditSprite->setText(m_spriteName.isEmpty() ? tr("<no sprite>") : m_spriteName);
|
||||
if (!m_spriteName.isEmpty())
|
||||
{
|
||||
const auto &sprites = m_projectModel.project()->sprites;
|
||||
const auto iter = std::find_if(std::cbegin(sprites), std::cend(sprites),
|
||||
[&](const Sprite &sprite){ return sprite.name == m_spriteName; });
|
||||
if (iter == std::cend(sprites))
|
||||
qWarning() << "sprite" << m_spriteName << "not found";
|
||||
else
|
||||
m_ui->labelSpritePreview->setPixmap(iter->pixmaps.empty() ? QPixmap{} : iter->pixmaps.front().scaled(m_ui->labelSpritePreview->size(), Qt::KeepAspectRatio));
|
||||
}
|
||||
updateSpritePreview();
|
||||
m_ui->toolButtonSprite->setMenu(m_spritesMenu);
|
||||
m_ui->checkBoxVisible->setChecked(m_object.visible);
|
||||
m_ui->checkBoxSolid->setChecked(m_object.solid);
|
||||
@@ -52,6 +43,12 @@ ObjectPropertiesDialog::ObjectPropertiesDialog(Object &object, ProjectTreeModel
|
||||
|
||||
connect(&m_projectModel, &ProjectTreeModel::objectNameChanged,
|
||||
this, &ObjectPropertiesDialog::objectNameChanged);
|
||||
connect(&m_projectModel, &ProjectTreeModel::spriteNameChanged,
|
||||
this, &ObjectPropertiesDialog::spriteNameChanged);
|
||||
connect(&m_projectModel, &ProjectTreeModel::spriteAboutToBeRemoved,
|
||||
this, &ObjectPropertiesDialog::spriteAboutToBeRemoved);
|
||||
connect(&m_projectModel, &ProjectTreeModel::spritePixmapsChanged,
|
||||
this, &ObjectPropertiesDialog::spritePixmapsChanged);
|
||||
|
||||
connect(m_eventsModel.get(), &QAbstractItemModel::modelReset,
|
||||
this, &ObjectPropertiesDialog::changed);
|
||||
@@ -241,6 +238,49 @@ void ObjectPropertiesDialog::objectNameChanged(const Object &object)
|
||||
updateTitle();
|
||||
}
|
||||
|
||||
void ObjectPropertiesDialog::spriteNameChanged(const Sprite &sprite, const QString &oldName)
|
||||
{
|
||||
if (m_spriteName.isEmpty())
|
||||
return;
|
||||
|
||||
if (m_spriteName != oldName)
|
||||
return;
|
||||
|
||||
m_spriteName = sprite.name;
|
||||
{
|
||||
QSignalBlocker blocker{m_ui->lineEditSprite};
|
||||
m_ui->lineEditSprite->setText(sprite.name);
|
||||
}
|
||||
updateSpritePreview();
|
||||
}
|
||||
|
||||
void ObjectPropertiesDialog::spriteAboutToBeRemoved(const Sprite &sprite)
|
||||
{
|
||||
if (m_spriteName.isEmpty())
|
||||
return;
|
||||
|
||||
if (m_spriteName != sprite.name)
|
||||
return;
|
||||
|
||||
m_spriteName.clear();
|
||||
{
|
||||
QSignalBlocker blocker{m_ui->lineEditSprite};
|
||||
m_ui->lineEditSprite->setText(tr("<no sprite>"));
|
||||
}
|
||||
m_ui->labelSpritePreview->setPixmap(QPixmap{});
|
||||
}
|
||||
|
||||
void ObjectPropertiesDialog::spritePixmapsChanged(const Sprite &sprite)
|
||||
{
|
||||
if (m_spriteName.isEmpty())
|
||||
return;
|
||||
|
||||
if (m_spriteName != sprite.name)
|
||||
return;
|
||||
|
||||
updateSpritePreview(sprite.pixmaps);
|
||||
}
|
||||
|
||||
void ObjectPropertiesDialog::spritesMenuAboutToShow()
|
||||
{
|
||||
m_spritesMenu->clear();
|
||||
@@ -283,17 +323,17 @@ void ObjectPropertiesDialog::eventsContextMenuRequested(const QPoint &pos)
|
||||
|
||||
void ObjectPropertiesDialog::clearSprite()
|
||||
{
|
||||
m_spriteName.clear();
|
||||
m_ui->labelSpritePreview->setPixmap(QPixmap{});
|
||||
m_ui->lineEditSprite->setText(tr("<no sprite>"));
|
||||
m_spriteName = QString{};
|
||||
changed();
|
||||
}
|
||||
|
||||
void ObjectPropertiesDialog::setSprite(const Sprite &sprite)
|
||||
{
|
||||
m_ui->labelSpritePreview->setPixmap(sprite.pixmaps.empty() ? QPixmap{} : sprite.pixmaps.front().scaled(m_ui->labelSpritePreview->size(), Qt::KeepAspectRatio));
|
||||
m_ui->lineEditSprite->setText(sprite.name);
|
||||
m_spriteName = sprite.name;
|
||||
updateSpritePreview(sprite.pixmaps);
|
||||
m_ui->lineEditSprite->setText(sprite.name);
|
||||
changed();
|
||||
}
|
||||
|
||||
@@ -304,3 +344,24 @@ void ObjectPropertiesDialog::updateTitle()
|
||||
.arg(m_unsavedChanges ? tr("*") : QString{})
|
||||
);
|
||||
}
|
||||
|
||||
void ObjectPropertiesDialog::updateSpritePreview()
|
||||
{
|
||||
if (m_spriteName.isEmpty())
|
||||
m_ui->labelSpritePreview->setPixmap(QPixmap{});
|
||||
else
|
||||
{
|
||||
const auto &sprites = m_projectModel.project()->sprites;
|
||||
const auto iter = std::find_if(std::cbegin(sprites), std::cend(sprites),
|
||||
[&](const Sprite &sprite){ return sprite.name == m_spriteName; });
|
||||
if (iter == std::cend(sprites))
|
||||
qWarning() << "sprite" << m_spriteName << "not found";
|
||||
else
|
||||
updateSpritePreview(iter->pixmaps);
|
||||
}
|
||||
}
|
||||
|
||||
void ObjectPropertiesDialog::updateSpritePreview(const std::vector<QPixmap> &pixmaps)
|
||||
{
|
||||
m_ui->labelSpritePreview->setPixmap(pixmaps.empty() ? QPixmap{} : pixmaps.front().scaled(32, m_ui->labelSpritePreview->height(), Qt::KeepAspectRatio));
|
||||
}
|
||||
@@ -35,6 +35,9 @@ private slots:
|
||||
void changed();
|
||||
|
||||
void objectNameChanged(const Object &object);
|
||||
void spriteNameChanged(const Sprite &sprite, const QString &oldName);
|
||||
void spriteAboutToBeRemoved(const Sprite &sprite);
|
||||
void spritePixmapsChanged(const Sprite &sprite);
|
||||
|
||||
void spritesMenuAboutToShow();
|
||||
void currentEventChanged(const QModelIndex &index);
|
||||
@@ -45,6 +48,8 @@ private slots:
|
||||
|
||||
private:
|
||||
void updateTitle();
|
||||
void updateSpritePreview();
|
||||
void updateSpritePreview(const std::vector<QPixmap> &pixmaps);
|
||||
|
||||
const std::unique_ptr<Ui::ObjectPropertiesDialog> m_ui;
|
||||
|
||||
|
||||
@@ -79,7 +79,12 @@ void SpritePropertiesDialog::accept()
|
||||
}
|
||||
}
|
||||
|
||||
m_sprite.pixmaps = std::move(m_pixmaps);
|
||||
if (!m_projectModel.setSpritePixmaps(m_sprite, std::move(m_pixmaps)))
|
||||
{
|
||||
QMessageBox::critical(this, tr("Setting Sprite pixmaps failed!"), tr("Setting Sprite pixmaps failed!"));
|
||||
return;
|
||||
}
|
||||
|
||||
m_sprite.origin.x = m_ui->spinBoxOriginX->value();
|
||||
m_sprite.origin.y = m_ui->spinBoxOriginY->value();
|
||||
m_sprite.preciseCollisionChecking = m_ui->checkBoxPreciseCollisionChecking->isChecked();
|
||||
@@ -120,7 +125,14 @@ void SpritePropertiesDialog::reject()
|
||||
|
||||
void SpritePropertiesDialog::loadSprite()
|
||||
{
|
||||
const auto path = QFileDialog::getOpenFileName(this, tr("Open a Sprite Image..."), {}, tr("BMP Files (*.bmp), PNG Files (*png)"));
|
||||
const auto path = QFileDialog::getOpenFileName(this, tr("Open a Sprite Image..."), {},
|
||||
QStringLiteral("%0 (*.png);;%1 (*.bmp);;%2 (*.tiff);;%3 (*.jpg *.jpeg);;%4 (*)")
|
||||
.arg(tr("PNG Files"))
|
||||
.arg(tr("BMP Files"))
|
||||
.arg(tr("TIFF Files"))
|
||||
.arg(tr("JPEG Files"))
|
||||
.arg(tr("All Files"))
|
||||
);
|
||||
if (path.isEmpty())
|
||||
return;
|
||||
|
||||
@@ -144,7 +156,14 @@ void SpritePropertiesDialog::saveSprite()
|
||||
return;
|
||||
}
|
||||
|
||||
const auto path = QFileDialog::getSaveFileName(this, tr("Save a Sprite Image..."), m_sprite.name + ".png", tr("PNG Files (*.png)"));
|
||||
const auto path = QFileDialog::getSaveFileName(this, tr("Save a Sprite Image..."), m_sprite.name + ".png",
|
||||
QStringLiteral("%0 (*.png);;%1 (*.bmp);;%2 (*.tiff);;%3 (*.jpg *.jpeg);;%4 (*)")
|
||||
.arg(tr("PNG Files"))
|
||||
.arg(tr("BMP Files"))
|
||||
.arg(tr("TIFF Files"))
|
||||
.arg(tr("JPEG Files"))
|
||||
.arg(tr("All Files"))
|
||||
);
|
||||
if (path.isEmpty())
|
||||
return;
|
||||
|
||||
|
||||
Reference in new issue
Block a user