Smaller fixes and added Qt5 support
This commit is contained in:
1 parent
25e522fd8a
commit
9135c2f20c
20 files changed
+498
-58
No files matched your search
@@ -2,6 +2,7 @@
|
||||
#include "ui_editspritedialog.h"
|
||||
|
||||
#include <QMessageBox>
|
||||
#include <QDebug>
|
||||
|
||||
#include "projectcontainer.h"
|
||||
#include "models/spritesmodel.h"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include <QPushButton>
|
||||
#include <QMessageBox>
|
||||
#include <QDebug>
|
||||
|
||||
GlobalGameSettingsDialog::GlobalGameSettingsDialog(QWidget *parent) :
|
||||
QDialog{parent},
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "ui_imageeditordialog.h"
|
||||
|
||||
#include <QMessageBox>
|
||||
#include <QDebug>
|
||||
|
||||
ImageEditorDialog::ImageEditorDialog(const QPixmap &pixmap, const QString &title, QWidget *parent) :
|
||||
QDialog{parent},
|
||||
|
||||
@@ -137,36 +137,38 @@
|
||||
<item>
|
||||
<layout class="QHBoxLayout">
|
||||
<item>
|
||||
<widget class="QWidget">
|
||||
<layout class="QVBoxLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" />
|
||||
</item>
|
||||
</layout>
|
||||
<layout class="QVBoxLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QScrollArea" name="scrollArea">
|
||||
<property name="widgetResizable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
||||
</property>
|
||||
<widget class="DrawingCanvasWidget" name="canvas">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>470</width>
|
||||
<height>375</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QScrollArea" name="scrollArea">
|
||||
<widget class="DrawingCanvasWidget" name="canvas">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget">
|
||||
<layout class="QVBoxLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" />
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<layout class="QVBoxLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
|
||||
@@ -33,13 +33,14 @@ ObjectPropertiesDialog::ObjectPropertiesDialog(Object &object, ProjectTreeModel
|
||||
m_ui->lineEditName->setText(m_object.name);
|
||||
m_ui->lineEditSprite->setText(m_spriteName.isEmpty() ? tr("<no sprite>") : m_spriteName);
|
||||
updateSpritePreview();
|
||||
m_menuSprites->setParent(m_ui->toolButtonSprite);
|
||||
m_ui->toolButtonSprite->setMenu(m_menuSprites);
|
||||
m_ui->checkBoxVisible->setChecked(m_object.visible);
|
||||
m_ui->checkBoxSolid->setChecked(m_object.solid);
|
||||
m_ui->spinBoxDepth->setValue(m_object.depth);
|
||||
m_ui->checkBoxPersistent->setChecked(m_object.persistent);
|
||||
|
||||
m_ui->lineEditSprite->setMenu(m_menuSprites);
|
||||
|
||||
m_ui->listViewEvents->setModel(m_eventsModel.get());
|
||||
|
||||
connect(&m_projectModel, &ProjectTreeModel::objectNameChanged,
|
||||
@@ -53,6 +54,8 @@ ObjectPropertiesDialog::ObjectPropertiesDialog(Object &object, ProjectTreeModel
|
||||
|
||||
connect(m_eventsModel.get(), &QAbstractItemModel::modelReset,
|
||||
this, &ObjectPropertiesDialog::changed);
|
||||
connect(m_eventsModel.get(), &QAbstractItemModel::rowsInserted,
|
||||
this, &ObjectPropertiesDialog::rowsInserted);
|
||||
connect(m_eventsModel.get(), &QAbstractItemModel::rowsInserted,
|
||||
this, &ObjectPropertiesDialog::changed);
|
||||
connect(m_eventsModel.get(), &QAbstractItemModel::dataChanged,
|
||||
@@ -116,7 +119,12 @@ void ObjectPropertiesDialog::accept()
|
||||
}
|
||||
}
|
||||
|
||||
m_object.spriteName = m_spriteName;
|
||||
if (!m_projectModel.setObjectSpriteName(m_object, std::move(m_spriteName)))
|
||||
{
|
||||
QMessageBox::critical(this, tr("Setting Object Sprite failed!"), tr("Setting Object Sprite failed!"));
|
||||
return;
|
||||
}
|
||||
|
||||
m_object.visible = m_ui->checkBoxVisible->isChecked();
|
||||
m_object.solid = m_ui->checkBoxSolid->isChecked();
|
||||
m_object.depth = m_ui->spinBoxDepth->value();
|
||||
@@ -328,6 +336,11 @@ void ObjectPropertiesDialog::eventsContextMenuRequested(const QPoint &pos)
|
||||
menu.exec(m_ui->listViewEvents->viewport()->mapToGlobal(pos));
|
||||
}
|
||||
|
||||
void ObjectPropertiesDialog::rowsInserted(const QModelIndex &parent, int first)
|
||||
{
|
||||
m_ui->listViewEvents->setCurrentIndex(m_eventsModel->index(first, 0, parent));
|
||||
}
|
||||
|
||||
void ObjectPropertiesDialog::clearSprite()
|
||||
{
|
||||
m_spriteName.clear();
|
||||
|
||||
@@ -42,6 +42,7 @@ private slots:
|
||||
void spritesMenuAboutToShow();
|
||||
void currentEventChanged(const QModelIndex &index);
|
||||
void eventsContextMenuRequested(const QPoint &pos);
|
||||
void rowsInserted(const QModelIndex &parent, int first);
|
||||
|
||||
void clearSprite();
|
||||
void setSprite(const Sprite &sprite);
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEditSprite">
|
||||
<widget class="QLineEditWithMenu" name="lineEditSprite">
|
||||
<property name="toolTip">
|
||||
<string>The sprite used to represent the object</string>
|
||||
</property>
|
||||
@@ -414,6 +414,11 @@
|
||||
<header>widgets/actionscontainerwidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QLineEditWithMenu</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>widgets/qlineeditwithmenu.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources>
|
||||
<include location="../../../resources.qrc"/>
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include <QSpinBox>
|
||||
#include <QLabel>
|
||||
#include <QToolButton>
|
||||
#include <QMenu>
|
||||
#include <QMessageBox>
|
||||
#include <QDebug>
|
||||
|
||||
@@ -19,6 +20,7 @@ RoomPropertiesDialog::RoomPropertiesDialog(Room &room, ProjectTreeModel &project
|
||||
m_creationCode{m_room.creationCode},
|
||||
m_spinBoxSnapX{new QSpinBox{this}},
|
||||
m_spinBoxSnapY{new QSpinBox{this}},
|
||||
m_menuObjects{new QMenu{this}},
|
||||
m_labelX{new QLabel{tr("x: %0").arg(0)}},
|
||||
m_labelY{new QLabel{tr("y: %0").arg(0)}}
|
||||
{
|
||||
@@ -71,7 +73,13 @@ RoomPropertiesDialog::RoomPropertiesDialog(Room &room, ProjectTreeModel &project
|
||||
m_ui->toolBar->addWidget(toolButton);
|
||||
}
|
||||
|
||||
m_ui->scrollArea->setBackgroundRole(QPalette::Dark);
|
||||
m_ui->toolButtonObject->setMenu(m_menuObjects);
|
||||
|
||||
m_ui->lineEditObject->setMenu(m_menuObjects);
|
||||
|
||||
m_ui->scrollAreaObject->setMenu(m_menuObjects);
|
||||
|
||||
m_ui->scrollAreaRoom->setBackgroundRole(QPalette::Dark);
|
||||
|
||||
m_labelX->setFrameStyle(QFrame::Sunken);
|
||||
m_ui->statusbar->addWidget(m_labelX, 1);
|
||||
@@ -93,6 +101,14 @@ RoomPropertiesDialog::RoomPropertiesDialog(Room &room, ProjectTreeModel &project
|
||||
|
||||
connect(&m_projectModel, &ProjectTreeModel::roomNameChanged,
|
||||
this, &RoomPropertiesDialog::roomNameChanged);
|
||||
connect(&m_projectModel, &ProjectTreeModel::spritePixmapsChanged,
|
||||
this, &RoomPropertiesDialog::spritePixmapsChanged);
|
||||
connect(&m_projectModel, &ProjectTreeModel::objectNameChanged,
|
||||
this, &RoomPropertiesDialog::objectNameChanged);
|
||||
connect(&m_projectModel, &ProjectTreeModel::objectAboutToBeRemoved,
|
||||
this, &RoomPropertiesDialog::objectAboutToBeRemoved);
|
||||
connect(&m_projectModel, &ProjectTreeModel::objectSpriteNameChanged,
|
||||
this, &RoomPropertiesDialog::objectSpriteNameChanged);
|
||||
|
||||
connect(m_ui->actionUndo, &QAction::triggered,
|
||||
this, &RoomPropertiesDialog::undo);
|
||||
@@ -158,6 +174,12 @@ RoomPropertiesDialog::RoomPropertiesDialog(Room &room, ProjectTreeModel &project
|
||||
m_ui->actionIsometricGrid, &QAction::setChecked);
|
||||
connect(m_ui->roomEditWidget, &RoomEditWidget::cursorMoved,
|
||||
this, &RoomPropertiesDialog::cursorMoved);
|
||||
|
||||
connect(m_menuObjects, &QMenu::aboutToShow,
|
||||
this, &RoomPropertiesDialog::objectsMenuAboutToShow);
|
||||
|
||||
if (!m_projectModel.project()->objects.empty())
|
||||
setObject(m_projectModel.project()->objects.back());
|
||||
}
|
||||
|
||||
RoomPropertiesDialog::~RoomPropertiesDialog() = default;
|
||||
@@ -291,12 +313,111 @@ void RoomPropertiesDialog::roomNameChanged(const Room &room)
|
||||
updateTitle();
|
||||
}
|
||||
|
||||
void RoomPropertiesDialog::spritePixmapsChanged(const Sprite &sprite)
|
||||
{
|
||||
if (!m_selectedObject)
|
||||
return;
|
||||
|
||||
if (m_selectedObject->spriteName.isEmpty())
|
||||
return;
|
||||
|
||||
if (m_selectedObject->spriteName != sprite.name)
|
||||
return;
|
||||
|
||||
QPixmap pixmap;
|
||||
if (!sprite.pixmaps.empty() && !sprite.pixmaps.front().isNull())
|
||||
pixmap = sprite.pixmaps.front();
|
||||
m_ui->labelObjectPreview->setPixmap(std::move(pixmap));
|
||||
}
|
||||
|
||||
void RoomPropertiesDialog::objectNameChanged(const Object &object)
|
||||
{
|
||||
if (!m_selectedObject)
|
||||
return;
|
||||
|
||||
if (&object != m_selectedObject)
|
||||
return;
|
||||
|
||||
m_ui->lineEditObject->setText(object.name);
|
||||
}
|
||||
|
||||
void RoomPropertiesDialog::objectAboutToBeRemoved(const Object &object)
|
||||
{
|
||||
if (!m_selectedObject)
|
||||
return;
|
||||
|
||||
if (&object != m_selectedObject)
|
||||
return;
|
||||
|
||||
m_selectedObject = nullptr;
|
||||
m_ui->lineEditObject->clear();
|
||||
m_ui->labelObjectPreview->setPixmap({});
|
||||
}
|
||||
|
||||
void RoomPropertiesDialog::objectSpriteNameChanged(const Object &object)
|
||||
{
|
||||
if (!m_selectedObject)
|
||||
return;
|
||||
|
||||
if (&object != m_selectedObject)
|
||||
return;
|
||||
|
||||
QPixmap pixmap;
|
||||
if (!object.spriteName.isEmpty())
|
||||
{
|
||||
const auto iter = std::find_if(std::cbegin(m_projectModel.project()->sprites), std::cend(m_projectModel.project()->sprites),
|
||||
[&object](const auto &sprite){ return object.spriteName == sprite.name; });
|
||||
if (iter == std::cend(m_projectModel.project()->sprites))
|
||||
qWarning() << "invalid sprite" << object.spriteName;
|
||||
else if (!iter->pixmaps.empty() && !iter->pixmaps.front().isNull())
|
||||
pixmap = iter->pixmaps.front();
|
||||
}
|
||||
m_ui->labelObjectPreview->setPixmap(std::move(pixmap));
|
||||
}
|
||||
|
||||
void RoomPropertiesDialog::objectsMenuAboutToShow()
|
||||
{
|
||||
m_menuObjects->clear();
|
||||
for (const auto &object : m_projectModel.project()->objects)
|
||||
{
|
||||
QIcon icon;
|
||||
if (!object.spriteName.isEmpty())
|
||||
{
|
||||
const auto iter = std::find_if(std::cbegin(m_projectModel.project()->sprites), std::cend(m_projectModel.project()->sprites),
|
||||
[&object](const auto &sprite){ return object.spriteName == sprite.name; });
|
||||
if (iter == std::cend(m_projectModel.project()->sprites))
|
||||
qWarning() << "invalid sprite" << object.spriteName;
|
||||
else if (!iter->pixmaps.empty() && !iter->pixmaps.front().isNull())
|
||||
icon = iter->pixmaps.front();
|
||||
}
|
||||
m_menuObjects->addAction(icon, object.name, this,
|
||||
[&object,this](){ setObject(object); });
|
||||
}
|
||||
}
|
||||
|
||||
void RoomPropertiesDialog::cursorMoved(const QPoint &point)
|
||||
{
|
||||
m_labelX->setText(tr("X: %0").arg(point.x()));
|
||||
m_labelY->setText(tr("Y: %0").arg(point.y()));
|
||||
}
|
||||
|
||||
void RoomPropertiesDialog::setObject(const Object &object)
|
||||
{
|
||||
m_selectedObject = &object;
|
||||
QPixmap pixmap;
|
||||
if (!object.spriteName.isEmpty())
|
||||
{
|
||||
const auto iter = std::find_if(std::cbegin(m_projectModel.project()->sprites), std::cend(m_projectModel.project()->sprites),
|
||||
[&object](const auto &sprite){ return object.spriteName == sprite.name; });
|
||||
if (iter == std::cend(m_projectModel.project()->sprites))
|
||||
qWarning() << "invalid sprite" << object.spriteName;
|
||||
else if (!iter->pixmaps.empty() && !iter->pixmaps.front().isNull())
|
||||
pixmap = iter->pixmaps.front();
|
||||
}
|
||||
m_ui->labelObjectPreview->setPixmap(std::move(pixmap));
|
||||
m_ui->lineEditObject->setText(object.name);
|
||||
}
|
||||
|
||||
void RoomPropertiesDialog::updateTitle()
|
||||
{
|
||||
setWindowTitle(tr("Room Properties: %0%1")
|
||||
|
||||
@@ -6,8 +6,11 @@
|
||||
|
||||
class QSpinBox;
|
||||
class QLabel;
|
||||
class QMenu;
|
||||
namespace Ui { class RoomPropertiesDialog; }
|
||||
struct Room;
|
||||
struct Sprite;
|
||||
struct Object;
|
||||
class ProjectTreeModel;
|
||||
|
||||
class RoomPropertiesDialog : public QDialog
|
||||
@@ -34,10 +37,17 @@ private slots:
|
||||
void changed();
|
||||
|
||||
void roomNameChanged(const Room &room);
|
||||
void spritePixmapsChanged(const Sprite &sprite);
|
||||
void objectNameChanged(const Object &object);
|
||||
void objectAboutToBeRemoved(const Object &object);
|
||||
void objectSpriteNameChanged(const Object &object);
|
||||
|
||||
void objectsMenuAboutToShow();
|
||||
|
||||
void cursorMoved(const QPoint &point);
|
||||
|
||||
private:
|
||||
void setObject(const Object &object);
|
||||
void updateTitle();
|
||||
|
||||
const std::unique_ptr<Ui::RoomPropertiesDialog> m_ui;
|
||||
@@ -52,6 +62,10 @@ private:
|
||||
QSpinBox * const m_spinBoxSnapX;
|
||||
QSpinBox * const m_spinBoxSnapY;
|
||||
|
||||
QMenu * const m_menuObjects;
|
||||
|
||||
QLabel * const m_labelX;
|
||||
QLabel * const m_labelY;
|
||||
|
||||
const Object *m_selectedObject{};
|
||||
};
|
||||
@@ -105,19 +105,99 @@
|
||||
<attribute name="title">
|
||||
<string>&Objects</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<layout class="QVBoxLayout" name="verticalLayout" stretch="1,0">
|
||||
<property name="leftMargin">
|
||||
<number>10</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>10</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>10</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>10</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QScrollAreaWithMenu" name="scrollAreaObject">
|
||||
<property name="widgetResizable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
||||
</property>
|
||||
<widget class="QLabel" name="labelObjectPreview">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>222</width>
|
||||
<height>331</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QFrame" name="frame_2">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Object to add with left mouse:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QLineEditWithMenu" name="lineEditObject">
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="toolButtonObject">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="popupMode">
|
||||
<enum>QToolButton::InstantPopup</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Left mouse button = add<br/> + &lt;Alt&gt; = no snap<br/> + &lt;Shift&gt; = multiple<br/> + &lt;Ctrl&gt; = move<br/>Right mouse button = delete<br/> + &lt;Shift&gt; = delete all<br/> + &lt;Ctrl&gt; = popup menu</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkBoxDeleteUnderlaying">
|
||||
<property name="text">
|
||||
<string>Delete underlaying</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tabSettings">
|
||||
@@ -302,7 +382,10 @@
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7" stretch="1,0">
|
||||
<item>
|
||||
<widget class="QScrollArea" name="scrollArea">
|
||||
<widget class="QScrollArea" name="scrollAreaRoom">
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
||||
</property>
|
||||
<widget class="RoomEditWidget" name="roomEditWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
@@ -512,6 +595,17 @@
|
||||
<header>widgets/roomeditwidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QLineEditWithMenu</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>widgets/qlineeditwithmenu.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QScrollAreaWithMenu</class>
|
||||
<extends>QScrollArea</extends>
|
||||
<header>widgets/qscrollareawithmenu.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources>
|
||||
<include location="../../../resources.qrc"/>
|
||||
|
||||
Reference in new issue
Block a user