Fixed compiling under GCC and introduced Timer events
This commit is contained in:
@@ -32,28 +32,48 @@ AddEventDialog::AddEventDialog(ProjectTreeModel &projectModel, QWidget *parent)
|
|||||||
connect(m_ui->pushButtonStep, &QAbstractButton::clicked,
|
connect(m_ui->pushButtonStep, &QAbstractButton::clicked,
|
||||||
this, [this](){ m_eventType = Object::EventType::Step; accept(); });
|
this, [this](){ m_eventType = Object::EventType::Step; accept(); });
|
||||||
|
|
||||||
auto menu = new QMenu;
|
{
|
||||||
connect(menu, &QMenu::aboutToShow, menu, [this,menu](){
|
auto menu = new QMenu;
|
||||||
for (const Object &object : m_projectModel.project()->objects)
|
menu->addAction(tr("Alarm 0"), this, [this](){ m_eventType = Object::EventType::Alarm0; accept(); });
|
||||||
{
|
menu->addAction(tr("Alarm 1"), this, [this](){ m_eventType = Object::EventType::Alarm1; accept(); });
|
||||||
QIcon icon;
|
menu->addAction(tr("Alarm 2"), this, [this](){ m_eventType = Object::EventType::Alarm2; accept(); });
|
||||||
if (!object.spriteName.isEmpty())
|
menu->addAction(tr("Alarm 3"), this, [this](){ m_eventType = Object::EventType::Alarm3; accept(); });
|
||||||
|
menu->addAction(tr("Alarm 4"), this, [this](){ m_eventType = Object::EventType::Alarm4; accept(); });
|
||||||
|
menu->addAction(tr("Alarm 5"), this, [this](){ m_eventType = Object::EventType::Alarm5; accept(); });
|
||||||
|
menu->addAction(tr("Alarm 6"), this, [this](){ m_eventType = Object::EventType::Alarm6; accept(); });
|
||||||
|
menu->addAction(tr("Alarm 7"), this, [this](){ m_eventType = Object::EventType::Alarm7; accept(); });
|
||||||
|
menu->addAction(tr("Alarm 8"), this, [this](){ m_eventType = Object::EventType::Alarm8; accept(); });
|
||||||
|
menu->addAction(tr("Alarm 9"), this, [this](){ m_eventType = Object::EventType::Alarm9; accept(); });
|
||||||
|
menu->addAction(tr("Alarm 10"), this, [this](){ m_eventType = Object::EventType::Alarm10; accept(); });
|
||||||
|
menu->addAction(tr("Alarm 11"), this, [this](){ m_eventType = Object::EventType::Alarm11; accept(); });
|
||||||
|
m_ui->pushButtonAlarm->setMenu(menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
auto menu = new QMenu;
|
||||||
|
connect(menu, &QMenu::aboutToShow, menu, [this,menu](){
|
||||||
|
menu->clear();
|
||||||
|
for (const Object &object : m_projectModel.project()->objects)
|
||||||
{
|
{
|
||||||
const auto &sprites = m_projectModel.project()->sprites;
|
QIcon icon;
|
||||||
const auto iter = std::find_if(std::cbegin(sprites), std::cend(sprites),
|
if (!object.spriteName.isEmpty())
|
||||||
[&](const Sprite &sprite){ return sprite.name == object.spriteName; });
|
|
||||||
if (iter != std::cend(sprites))
|
|
||||||
{
|
{
|
||||||
if (!iter->pixmaps.empty())
|
const auto &sprites = m_projectModel.project()->sprites;
|
||||||
icon = iter->pixmaps.front();
|
const auto iter = std::find_if(std::cbegin(sprites), std::cend(sprites),
|
||||||
|
[&](const Sprite &sprite){ return sprite.name == object.spriteName; });
|
||||||
|
if (iter != std::cend(sprites))
|
||||||
|
{
|
||||||
|
if (!iter->pixmaps.empty())
|
||||||
|
icon = iter->pixmaps.front();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
menu->addAction(icon, object.name, this, [this,&object](){
|
||||||
|
m_eventType = object.name; accept();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
menu->addAction(icon, object.name, this, [this,&object](){
|
});
|
||||||
m_eventType = object.name; accept();
|
m_ui->pushButtonCollision->setMenu(menu);
|
||||||
});
|
}
|
||||||
}
|
|
||||||
}, Qt::SingleShotConnection);
|
|
||||||
m_ui->pushButtonCollision->setMenu(menu);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AddEventDialog::~AddEventDialog() = default;
|
AddEventDialog::~AddEventDialog() = default;
|
||||||
|
@@ -46,6 +46,10 @@
|
|||||||
<property name="text">
|
<property name="text">
|
||||||
<string>&Alarm</string>
|
<string>&Alarm</string>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../resources_editor.qrc">
|
||||||
|
<normaloff>:/qtgameengine/icons/event-alarm.png</normaloff>:/qtgameengine/icons/event-alarm.png</iconset>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0">
|
<item row="3" column="0">
|
||||||
|
BIN
src/editor/icons/event-alarm.png
Normal file
BIN
src/editor/icons/event-alarm.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.8 KiB |
@@ -40,23 +40,47 @@ QVariant ObjectEventsModel::data(const QModelIndex &index, int role) const
|
|||||||
{
|
{
|
||||||
case Object::EventType::Create: return tr("Create");
|
case Object::EventType::Create: return tr("Create");
|
||||||
case Object::EventType::Destroy: return tr("Destroy");
|
case Object::EventType::Destroy: return tr("Destroy");
|
||||||
|
case Object::EventType::Alarm0: return tr("Alarm 0");
|
||||||
|
case Object::EventType::Alarm1: return tr("Alarm 1");
|
||||||
|
case Object::EventType::Alarm2: return tr("Alarm 2");
|
||||||
|
case Object::EventType::Alarm3: return tr("Alarm 3");
|
||||||
|
case Object::EventType::Alarm4: return tr("Alarm 4");
|
||||||
|
case Object::EventType::Alarm5: return tr("Alarm 5");
|
||||||
|
case Object::EventType::Alarm6: return tr("Alarm 6");
|
||||||
|
case Object::EventType::Alarm7: return tr("Alarm 7");
|
||||||
|
case Object::EventType::Alarm8: return tr("Alarm 8");
|
||||||
|
case Object::EventType::Alarm9: return tr("Alarm 9");
|
||||||
|
case Object::EventType::Alarm10: return tr("Alarm 10");
|
||||||
|
case Object::EventType::Alarm11: return tr("Alarm 11");
|
||||||
case Object::EventType::Step: return tr("Step");
|
case Object::EventType::Step: return tr("Step");
|
||||||
case Object::EventType::Draw: return tr("Draw");
|
case Object::EventType::Draw: return tr("Draw");
|
||||||
default:
|
|
||||||
qWarning() << "unknown event type" << std::to_underlying(pair.first);
|
|
||||||
return QString::number(std::to_underlying(pair.first));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qWarning() << "unknown event type" << std::to_underlying(pair.first);
|
||||||
|
return QString::number(std::to_underlying(pair.first));
|
||||||
case Qt::DecorationRole:
|
case Qt::DecorationRole:
|
||||||
switch (pair.first)
|
switch (pair.first)
|
||||||
{
|
{
|
||||||
case Object::EventType::Create: return QIcon{":/qtgameengine/icons/event-create.png"};
|
case Object::EventType::Create: return QIcon{":/qtgameengine/icons/event-create.png"};
|
||||||
case Object::EventType::Destroy: return QIcon{":/qtgameengine/icons/event-destroy.png"};
|
case Object::EventType::Destroy: return QIcon{":/qtgameengine/icons/event-destroy.png"};
|
||||||
|
case Object::EventType::Alarm0:
|
||||||
|
case Object::EventType::Alarm1:
|
||||||
|
case Object::EventType::Alarm2:
|
||||||
|
case Object::EventType::Alarm3:
|
||||||
|
case Object::EventType::Alarm4:
|
||||||
|
case Object::EventType::Alarm5:
|
||||||
|
case Object::EventType::Alarm6:
|
||||||
|
case Object::EventType::Alarm7:
|
||||||
|
case Object::EventType::Alarm8:
|
||||||
|
case Object::EventType::Alarm9:
|
||||||
|
case Object::EventType::Alarm10:
|
||||||
|
case Object::EventType::Alarm11: return QIcon{":/qtgameengine/icons/event-alarm.png"};
|
||||||
case Object::EventType::Step: return QIcon{":/qtgameengine/icons/event-step.png"};
|
case Object::EventType::Step: return QIcon{":/qtgameengine/icons/event-step.png"};
|
||||||
case Object::EventType::Draw: return QIcon{":/qtgameengine/icons/event-draw.png"};
|
case Object::EventType::Draw: return QIcon{":/qtgameengine/icons/event-draw.png"};
|
||||||
default:
|
|
||||||
qWarning() << "unknown event type" << std::to_underlying(pair.first);
|
|
||||||
return {};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qWarning() << "unknown event type" << std::to_underlying(pair.first);
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (std::size_t(index.row()) < m_collisionEvents.size() + m_events.size())
|
else if (std::size_t(index.row()) < m_collisionEvents.size() + m_events.size())
|
||||||
|
@@ -76,6 +76,7 @@
|
|||||||
<file>icons/info.png</file>
|
<file>icons/info.png</file>
|
||||||
<file>icons/merge.png</file>
|
<file>icons/merge.png</file>
|
||||||
<file>icons/sort.png</file>
|
<file>icons/sort.png</file>
|
||||||
|
<file>icons/event-alarm.png</file>
|
||||||
<file>icons/event-collision.png</file>
|
<file>icons/event-collision.png</file>
|
||||||
<file>icons/event-create.png</file>
|
<file>icons/event-create.png</file>
|
||||||
<file>icons/event-destroy.png</file>
|
<file>icons/event-destroy.png</file>
|
||||||
|
@@ -136,6 +136,16 @@ QDataStream &operator<<(QDataStream &ds, const std::variant<T...> &variant)
|
|||||||
return ds;
|
return ds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for idiotic GCC we cannot use the usual lambda syntax but instead
|
||||||
|
// have to provide a template method, GCC sucks
|
||||||
|
template<typename T, typename ...Tvariant>
|
||||||
|
std::variant<Tvariant...> variantUnpacker(QDataStream& ds)
|
||||||
|
{
|
||||||
|
T value;
|
||||||
|
ds >> value;
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
template<typename ...T>
|
template<typename ...T>
|
||||||
QDataStream &operator>>(QDataStream &ds, std::variant<T...> &variant)
|
QDataStream &operator>>(QDataStream &ds, std::variant<T...> &variant)
|
||||||
{
|
{
|
||||||
@@ -144,11 +154,7 @@ QDataStream &operator>>(QDataStream &ds, std::variant<T...> &variant)
|
|||||||
|
|
||||||
using func_t = std::variant<T...> (QDataStream&);
|
using func_t = std::variant<T...> (QDataStream&);
|
||||||
static constexpr func_t *funcs[] = {
|
static constexpr func_t *funcs[] = {
|
||||||
[](QDataStream& ds) -> std::variant<T...> {
|
variantUnpacker<T, T...>...
|
||||||
T value;
|
|
||||||
ds >> value;
|
|
||||||
return value;
|
|
||||||
}...
|
|
||||||
};
|
};
|
||||||
variant = funcs[index](ds);
|
variant = funcs[index](ds);
|
||||||
|
|
||||||
|
@@ -113,6 +113,18 @@ struct Object
|
|||||||
enum class EventType {
|
enum class EventType {
|
||||||
Create,
|
Create,
|
||||||
Destroy,
|
Destroy,
|
||||||
|
Alarm0,
|
||||||
|
Alarm1,
|
||||||
|
Alarm2,
|
||||||
|
Alarm3,
|
||||||
|
Alarm4,
|
||||||
|
Alarm5,
|
||||||
|
Alarm6,
|
||||||
|
Alarm7,
|
||||||
|
Alarm8,
|
||||||
|
Alarm9,
|
||||||
|
Alarm10,
|
||||||
|
Alarm11,
|
||||||
Step,
|
Step,
|
||||||
Draw,
|
Draw,
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user