From 4046a5c044a405c64b70412391d18c935e4a781c Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Fri, 12 Jan 2024 21:53:29 +0100 Subject: [PATCH] Add more actions and improve error message when dragged into empty actions container --- QtGameMaker.pro | 6 + src/editor/dialogs/actions/movefixeddialog.ui | 3 + src/editor/dialogs/actions/movefreedialog.ui | 6 + .../dialogs/actions/movetowardsdialog.cpp | 7 + .../dialogs/actions/movetowardsdialog.ui | 221 ++++++++++++++++-- .../dialogs/actions/speedhorizontaldialog.cpp | 19 ++ .../dialogs/actions/speedhorizontaldialog.h | 22 ++ .../dialogs/actions/speedhorizontaldialog.ui | 68 ++++++ .../dialogs/actions/speedverticaldialog.cpp | 19 ++ .../dialogs/actions/speedverticaldialog.h | 22 ++ .../dialogs/actions/speedverticaldialog.ui | 68 ++++++ ...ction-code.png => action-execute-code.png} | Bin src/editor/icons/action-speed-horizontal.png | Bin 0 -> 13627 bytes src/editor/icons/action-speed-vertical.png | Bin 0 -> 13498 bytes src/editor/models/actionscontainermodel.cpp | 26 ++- src/editor/models/actionscontainermodel.h | 1 + src/editor/resources_editor.qrc | 4 +- src/editor/widgets/actionscontainerwidget.cpp | 31 +++ src/editor/widgets/actionscontainerwidget.h | 1 + src/editor/widgets/actionscontainerwidget.ui | 10 +- src/projectcontainer.h | 10 + src/projectserialization.cpp | 28 +++ src/projectserialization.h | 4 + 23 files changed, 535 insertions(+), 41 deletions(-) create mode 100644 src/editor/dialogs/actions/speedhorizontaldialog.cpp create mode 100644 src/editor/dialogs/actions/speedhorizontaldialog.h create mode 100644 src/editor/dialogs/actions/speedhorizontaldialog.ui create mode 100644 src/editor/dialogs/actions/speedverticaldialog.cpp create mode 100644 src/editor/dialogs/actions/speedverticaldialog.h create mode 100644 src/editor/dialogs/actions/speedverticaldialog.ui rename src/editor/icons/{action-code.png => action-execute-code.png} (100%) create mode 100644 src/editor/icons/action-speed-horizontal.png create mode 100644 src/editor/icons/action-speed-vertical.png diff --git a/QtGameMaker.pro b/QtGameMaker.pro index 56eae40..018f224 100644 --- a/QtGameMaker.pro +++ b/QtGameMaker.pro @@ -26,9 +26,11 @@ INCLUDEPATH += \ HEADERS += \ src/closeeventfilter.h \ + src/editor/dialogs/actions/speedhorizontaldialog.h \ src/editor/dialogs/actions/movefreedialog.h \ src/editor/dialogs/actions/movetowardsdialog.h \ src/editor/dialogs/actions/executecodedialog.h \ + src/editor/dialogs/actions/speedverticaldialog.h \ src/editor/dialogs/genericcodeeditordialog.h \ src/editor/dialogs/includedfilepropertiesdialog.h \ src/editor/dialogs/transparentbackgroundsettingsdialog.h \ @@ -92,8 +94,10 @@ HEADERS += \ SOURCES += \ src/closeeventfilter.cpp \ src/editor/dialogs/actions/executecodedialog.cpp \ + src/editor/dialogs/actions/speedhorizontaldialog.cpp \ src/editor/dialogs/actions/movefreedialog.cpp \ src/editor/dialogs/actions/movetowardsdialog.cpp \ + src/editor/dialogs/actions/speedverticaldialog.cpp \ src/editor/dialogs/genericcodeeditordialog.cpp \ src/editor/dialogs/includedfilepropertiesdialog.cpp \ src/editor/dialogs/transparentbackgroundsettingsdialog.cpp \ @@ -154,8 +158,10 @@ SOURCES += \ src/projectserialization.cpp FORMS += \ + src/editor/dialogs/actions/speedhorizontaldialog.ui \ src/editor/dialogs/actions/movefreedialog.ui \ src/editor/dialogs/actions/movetowardsdialog.ui \ + src/editor/dialogs/actions/speedverticaldialog.ui \ src/editor/dialogs/includedfilepropertiesdialog.ui \ src/editor/dialogs/transparentbackgroundsettingsdialog.ui \ src/editor/mainwindow.ui \ diff --git a/src/editor/dialogs/actions/movefixeddialog.ui b/src/editor/dialogs/actions/movefixeddialog.ui index 17bee17..d3de655 100644 --- a/src/editor/dialogs/actions/movefixeddialog.ui +++ b/src/editor/dialogs/actions/movefixeddialog.ui @@ -253,6 +253,9 @@ Speed: + + spinBox + diff --git a/src/editor/dialogs/actions/movefreedialog.ui b/src/editor/dialogs/actions/movefreedialog.ui index a796c4c..e8c9148 100644 --- a/src/editor/dialogs/actions/movefreedialog.ui +++ b/src/editor/dialogs/actions/movefreedialog.ui @@ -143,6 +143,9 @@ direction: + + spinBoxDirection + @@ -153,6 +156,9 @@ speed: + + spinBoxSpeed + diff --git a/src/editor/dialogs/actions/movetowardsdialog.cpp b/src/editor/dialogs/actions/movetowardsdialog.cpp index 79ec4bf..af28db8 100644 --- a/src/editor/dialogs/actions/movetowardsdialog.cpp +++ b/src/editor/dialogs/actions/movetowardsdialog.cpp @@ -1,12 +1,19 @@ #include "movetowardsdialog.h" #include "ui_movetowardsdialog.h" +#include + MoveTowardsDialog::MoveTowardsDialog(MoveTowardsAction &action, QWidget *parent) : QDialog{parent}, m_ui{std::make_unique()}, m_action{action} { m_ui->setupUi(this); + + if (auto button = m_ui->buttonBox->button(QDialogButtonBox::Ok)) + button->setIcon(QIcon{":/qtgameengine/icons/ok.png"}); + if (auto button = m_ui->buttonBox->button(QDialogButtonBox::Cancel)) + button->setIcon(QIcon{":/qtgameengine/icons/delete.png"}); } MoveTowardsDialog::~MoveTowardsDialog() = default; diff --git a/src/editor/dialogs/actions/movetowardsdialog.ui b/src/editor/dialogs/actions/movetowardsdialog.ui index 801fb50..8104348 100644 --- a/src/editor/dialogs/actions/movetowardsdialog.ui +++ b/src/editor/dialogs/actions/movetowardsdialog.ui @@ -6,31 +6,204 @@ 0 0 - 400 - 300 + 435 + 429 - Dialog + Move Towards - - - - 30 - 240 - 341 - 32 - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - + + + + + + + + + + :/qtgameengine/icons/action-move-towards.png + + + + + + + Applies to + + + + + + Self + + + true + + + + + + + Other + + + + + + + + + Object: + + + + + + + + + + ... + + + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + x: + + + spinBoxX + + + + + + + + + + y: + + + spinBoxY + + + + + + + + + + Relative + + + + + + + + + + speed: + + + spinBoxSpeed + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + - + + + buttonBox @@ -39,8 +212,8 @@ accept() - 248 - 254 + 257 + 419 157 @@ -55,8 +228,8 @@ reject() - 316 - 260 + 325 + 419 286 diff --git a/src/editor/dialogs/actions/speedhorizontaldialog.cpp b/src/editor/dialogs/actions/speedhorizontaldialog.cpp new file mode 100644 index 0000000..b325b49 --- /dev/null +++ b/src/editor/dialogs/actions/speedhorizontaldialog.cpp @@ -0,0 +1,19 @@ +#include "speedhorizontaldialog.h" +#include "ui_speedhorizontaldialog.h" + +#include + +SpeedHorizontalDialog::SpeedHorizontalDialog(SpeedHorizontalAction &action, QWidget *parent) : + QDialog{parent}, + m_ui{std::make_unique()}, + m_action{action} +{ + m_ui->setupUi(this); + + if (auto button = m_ui->buttonBox->button(QDialogButtonBox::Ok)) + button->setIcon(QIcon{":/qtgameengine/icons/ok.png"}); + if (auto button = m_ui->buttonBox->button(QDialogButtonBox::Cancel)) + button->setIcon(QIcon{":/qtgameengine/icons/delete.png"}); +} + +SpeedHorizontalDialog::~SpeedHorizontalDialog() = default; diff --git a/src/editor/dialogs/actions/speedhorizontaldialog.h b/src/editor/dialogs/actions/speedhorizontaldialog.h new file mode 100644 index 0000000..51c96e9 --- /dev/null +++ b/src/editor/dialogs/actions/speedhorizontaldialog.h @@ -0,0 +1,22 @@ +#pragma once + +#include + +#include + +namespace Ui { class SpeedHorizontalDialog; } +struct SpeedHorizontalAction; + +class SpeedHorizontalDialog : public QDialog +{ + Q_OBJECT + +public: + explicit SpeedHorizontalDialog(SpeedHorizontalAction &action, QWidget *parent = nullptr); + ~SpeedHorizontalDialog() override; + +private: + const std::unique_ptr m_ui; + + SpeedHorizontalAction &m_action; +}; diff --git a/src/editor/dialogs/actions/speedhorizontaldialog.ui b/src/editor/dialogs/actions/speedhorizontaldialog.ui new file mode 100644 index 0000000..3a1e2cb --- /dev/null +++ b/src/editor/dialogs/actions/speedhorizontaldialog.ui @@ -0,0 +1,68 @@ + + + SpeedHorizontalDialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + 30 + 240 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + buttonBox + accepted() + SpeedHorizontalDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + SpeedHorizontalDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/editor/dialogs/actions/speedverticaldialog.cpp b/src/editor/dialogs/actions/speedverticaldialog.cpp new file mode 100644 index 0000000..1af4a83 --- /dev/null +++ b/src/editor/dialogs/actions/speedverticaldialog.cpp @@ -0,0 +1,19 @@ +#include "speedverticaldialog.h" +#include "ui_speedverticaldialog.h" + +#include + +SpeedVerticalDialog::SpeedVerticalDialog(SpeedVerticalAction &action, QWidget *parent) : + QDialog{parent}, + m_ui{std::make_unique()}, + m_action{action} +{ + m_ui->setupUi(this); + + if (auto button = m_ui->buttonBox->button(QDialogButtonBox::Ok)) + button->setIcon(QIcon{":/qtgameengine/icons/ok.png"}); + if (auto button = m_ui->buttonBox->button(QDialogButtonBox::Cancel)) + button->setIcon(QIcon{":/qtgameengine/icons/delete.png"}); +} + +SpeedVerticalDialog::~SpeedVerticalDialog() = default; diff --git a/src/editor/dialogs/actions/speedverticaldialog.h b/src/editor/dialogs/actions/speedverticaldialog.h new file mode 100644 index 0000000..70749f9 --- /dev/null +++ b/src/editor/dialogs/actions/speedverticaldialog.h @@ -0,0 +1,22 @@ +#pragma once + +#include + +#include + +namespace Ui { class SpeedVerticalDialog; } +struct SpeedVerticalAction; + +class SpeedVerticalDialog : public QDialog +{ + Q_OBJECT + +public: + explicit SpeedVerticalDialog(SpeedVerticalAction &action, QWidget *parent = nullptr); + ~SpeedVerticalDialog() override; + +private: + const std::unique_ptr m_ui; + + SpeedVerticalAction &m_action; +}; diff --git a/src/editor/dialogs/actions/speedverticaldialog.ui b/src/editor/dialogs/actions/speedverticaldialog.ui new file mode 100644 index 0000000..3981708 --- /dev/null +++ b/src/editor/dialogs/actions/speedverticaldialog.ui @@ -0,0 +1,68 @@ + + + SpeedVerticalDialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + 30 + 240 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + buttonBox + accepted() + SpeedVerticalDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + SpeedVerticalDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/editor/icons/action-code.png b/src/editor/icons/action-execute-code.png similarity index 100% rename from src/editor/icons/action-code.png rename to src/editor/icons/action-execute-code.png diff --git a/src/editor/icons/action-speed-horizontal.png b/src/editor/icons/action-speed-horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..cee92ca876d25564e0ce8ce8b36240da895fcaeb GIT binary patch literal 13627 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hEy)37&sUh7`PZ1 z7+Dw?L24Kn7#NY*OpMG7%nS?+Z43+yLX6B{H6V3TjI3aG4+8^(G?YDsfq_8-ss^OT zkdcXjmw|y{4g&*&5hD|W2*`E@28PUbh+X>_7#J=vFfed{;W;J-24MyU1{m$`=^LP6 zq-SWLXKcp6U}RuqVr5`xWoV>eWN2k%Vr6W^z{tS30O2AA1_lOBhJOqYvq5fz`3dAu zn4dswn4g>&85o$M?gfPm8xmU-$_Dv^kqKg^2O|Rm6O?Tu4YCjB_Ww8jKVT5>a`SX! zU}R(fIgEkf|7`|m1`akhb~aWHc6N47P7W>}5ndi{ZXQV?VSW)=DS0_rDH$0B6+LwY zB^_lM84Yty9RouX6BBuLOIr&g8$DwaBak7CoSd9I+&mJzyb?x=GKxkdgZ~E@1UVQP z7#Wxul^B==8JPtc{~uwHXJBAtWds9=R~Q%=nV4Bv+1NQaxw!uyVc06bz{JSR%*4XX z%F4pRz`$6`$i&RRBFHMFXz0i$9GJ+iR48K9IB_9|veU+cqCpows2C>|HF0u@iAzXI zsj8`KXlj|5nweWzS~We&gn? zhmRgVdHU@6i$mSee*Oaa3*=9*w-`Zj0rDG~zXTbW7@1gDm|56C{$gY* z2YFnOg;mjzO~^5jJ+V+&$*7S-#A)KfjR!fEje|ajCKX-e5>qjGsQMA)HL%Z!^H>vE zK7)G<;jdc^Jj{#?OoGgU4E78^|8;3!u#>DY`p?kX`*-Dk2I2ZQ{~0z^#(#SI?EU@y zf43eptNyxx-+s~F{|x^mr~g~_{?D@i4Bu|qKb%?rD(^qTsr>&8xeNFiM&$>4_%J`p zKdk>F-2P_$NArIde%H_b&!BfN?Cfm&+d0qcw|jm5#h`uvKSNsl&sp_vFaKxA4sQtG z|L@HH&nEvFZZH3LZ2^Dr{{6rCr~h92`}3cOV}@_vhx}*Q{-5FH?f(o)^GY z(M6-WaE8X}86V4!-2dTPcl2E-p#L)B>gM(T8BXv2!~HAFltJ|Ue}>Kaf6m%}d-*@oju^qs^ z`SpK>Pw)RTF#Vg_9Ub+b;m_{>3`@h@&Gu$d+d~5|bJ2?!=u~!&S(%X85_4R*e)<4Vq&#>M9?^*}B^KifD=4KcA=zh#f0hEL}ByZSVa4FAD?{Qw+f$Ke3SKZ*81Bv_wT&9+5h-l@%;R(YwN9cZ1~M~|6cz6`45j7{%3f-uHWN& z-Sy}7i*s&o|M7Xw^IKbc)>Up@VUe}XN=t*?By`R}Si%_S2oH1HzV<&ua;5x>f911x z|M>P;;+x%;+1u8vIC}Qe@#46yC;K0o|7TcH{?F|{!<&r%3@!KnExi9z`ai?QrRRn7 zS6zMkQ#KbCqN}I+{b%?W`Op5+ii3Ft`(!PC`~PA8b@^FN?xUFxFZXZx&v2lAt-E#Y zJ?%;E7lNXuzkUB_@BQ893jc(%{+s@+vVPw&<3INPRp)izhUKoW>Ak=E?wsUKbXZD}rw9l{K;W2A>Z>{|LwEgzBy3c86{xk3u&;QR58gXgsd-Zew z8Qjhl{;7}8x@Y|2yxKmgdtdxsb@gf1-1)QP_+HPbIf|grr+3H)87DP}bv@nxP~$(t za{E8s{~4~WtyK^Dcj5E?(x-23|A{~+p zEU*7l|DR#4m+AapiT@e;|1*4D&0M}!?|s(OXX*RjB;WY@YI*&C2A%&5@-M@+=Kg2+ zv-wZ`(z5wF+b!bx=F~3#$NV>|`{Zt!(DzVYw#xRcg=c>GSnWN@T^$TToGYv)ju| z;&1;Mey9Iu*c`5^{$Ad7hSQBod;hbtrG;@8IknCIZq>ipdh0sxfq+;aM|saw&O>Nmv{cqO%XE+^i{ExY(u5Rny%&6m_qCDp&v?%|y*E;U}%zwQv z|1;>??Yp`z{Pg=d*Il&a)bv^I?ez~oTRHvc`Jc`I8E)7AT^<|WYP$Yy|JMHui+|dM zoqv3H&bx1NQ&0Ut)YzpL=AIWSEG$d!K{OD0qme4{U=`G+1V+O#9nm)2w)H>5&+`8a zjrCqf7cecJzSYxbLb?dA97Fy_a6bF^>dXH2{{6qbdy-H6XSn(LY~8{C48HXr@BiCd z6@U1}p8ap-isx%@|NZr#)1Mc=?%Z^LwQ2kGXMMN!e17Ee&;MKc={Z05{%5$e-g&*z zj}^v$C;w;2-T%$&)%p*{hfYoXSP-{=vc>!DkN-vfXLx+|^*piM``M3w&;M;&F+ue0 zJdytl)A#>i|93X#M|q{(xl&dst^3zjym;O8W2*ktzcW8Qx67~puDy4?>5t9-84UV= z=l*Bd6z-beI8QHReRtE>KQoX2-7Np<{MQBdp%zSFwcz^vvww3);Fns=>Sb^6=c_vp z{U~|-*8YS1>$rl-_3p5=wdb|y^J_0^r-kgZpZ?0d%Sp>glVc5k~l zjs7#7x%{6YZ~pJ7JxqK5Gki<^&oFcOzq|I|wlY-PAsVY&w;~#N3?kPgk6Lvxd=C5Y z&;IG_{|t)%8NR+=_2F#$jeS>tpZ)!M43Se`3<|JK#xv)j>x)moyD1HbHl zQt5Hg{^jHU3^M;2USD5Rk!G*|Hs-mt{n~{3L)QI2tNt^bsQ+8_YD;$f=F0yJc5iQ2 zCtusN)brq-FUCBFEV^n|{%44)l-m02zL@8T})yPNCkC)+IHsu0~~!vCuhVt&O1`Z11fP z`STIcD!D%I(O&Mu%jGlwGc^2XhYFIIjlw6fb7zW<3RtckcTtZaqx(>nW0Yo5A`!dr)h z+ne9jneJWQ|8;)**EQDXAN&<^4ngZy#`~o|!azB8A>>cRJAc6&p zx(7*q+AseyeAV0!=coVp&)~%p@8UKw-jI!76uJd_*Z~K;d{-1W`zru>Q|BL)v`|4l+ z!oQQx{b%rmrp>)2iiP)fCHhbKurcCfXj!zNR_=L|51J2x9&NQ?YxFy6!Brr_a6$7x zP@}g4oA#M~di7`I|K0x2@Yd?ftkgWJE~saN4b!~06ZB*DqxU~t>o@&pxKMZX+kEqXQEzT< zPyelMU;Smh{eOnmo&OmE?ElRE&+tZr`Etg3(5NYr(5M1P&rbDbx;gDX!#8Qm`)@Dp`Pap86KQO7F=AYEIPdBG@9AGxR(3Noc3K?c zxvX|iVcyLxyyt!&QPMuC_0jTUi>J6s-IHC9K1x4dbeieB$XTDNc@Zkpx@6as7--Lw z`e;(z7?# z$;2|hQG4&(^=1t>{V%=F)h%NAlFuxDJ=gapvtD__LUm`e)Nrm#LR_p5{`TzCWaqiZ zv^V?Sov7y)wG2iktDo=|6may2YF6KUe%E$x@$c=+P4~+;hZn8gv~q?K0|Q@lW=KRy zgs+cPa(=E}VoH8es$NBI0cbXj!N$I#ATc>RwL~E)H9a%WR_Xoj{Yna%DYi=CroINg z16w1-Ypui3%0DIeEoa6}C!XbFK1 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 literal 0 HcmV?d00001 diff --git a/src/editor/icons/action-speed-vertical.png b/src/editor/icons/action-speed-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..6231674e87a316faecf61cfbd674a9cac23aae3f GIT binary patch literal 13498 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 R+6)?R_H^}gS?83{1OTmMibwze literal 0 HcmV?d00001 diff --git a/src/editor/models/actionscontainermodel.cpp b/src/editor/models/actionscontainermodel.cpp index cd17aff..385c2d4 100644 --- a/src/editor/models/actionscontainermodel.cpp +++ b/src/editor/models/actionscontainermodel.cpp @@ -50,6 +50,10 @@ QVariant ActionsContainerModel::data(const QModelIndex &index, int role) const return tr("Set direction and speed of motion"); else if (std::holds_alternative(action)) return tr("Move towards point (99, 99)"); + else if (std::holds_alternative(action)) + return tr("Set the horizontal speed"); + else if (std::holds_alternative(action)) + return tr("Set the vertical speed"); else if (std::holds_alternative(action)) return tr("Execute a piece of code"); else @@ -64,8 +68,12 @@ QVariant ActionsContainerModel::data(const QModelIndex &index, int role) const return QIcon{":/qtgameengine/icons/action-move-free.png"}; else if (std::holds_alternative(action)) return QIcon{":/qtgameengine/icons/action-move-towards.png"}; + else if (std::holds_alternative(action)) + return QIcon{":/qtgameengine/icons/action-speed-horizontal.png"}; + else if (std::holds_alternative(action)) + return QIcon{":/qtgameengine/icons/action-speed-vertical.png"}; else if (std::holds_alternative(action)) - return QIcon{":/qtgameengine/icons/action-code.png"}; + return QIcon{":/qtgameengine/icons/action-execute-code.png"}; else { qWarning() << "unknown action type"; @@ -132,11 +140,6 @@ QMimeData *ActionsContainerModel::mimeData(const QModelIndexList &indexes) const bool ActionsContainerModel::canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const { - if (!m_actionsContainer) - { - qWarning() << "no container"; - return false; - } // if the drop is on an item, reject drop if (parent.isValid() && row == -1 && column == -1) { @@ -149,11 +152,6 @@ bool ActionsContainerModel::canDropMimeData(const QMimeData *data, Qt::DropActio bool ActionsContainerModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) { - if (!m_actionsContainer) - { - qWarning() << "no container"; - return false; - } // check if the action is supported if (!data || !(action == Qt::CopyAction || action == Qt::MoveAction)) { @@ -200,6 +198,12 @@ bool ActionsContainerModel::dropMimeData(const QMimeData *data, Qt::DropAction a qWarning() << "empty actions"; return false; } + if (!m_actionsContainer) + { + qWarning() << "no container"; + emit actionsContainerMissing(); + return false; + } beginInsertRows({}, row, row + actions.size() - 1); auto iter = std::next(std::begin(*m_actionsContainer), row); diff --git a/src/editor/models/actionscontainermodel.h b/src/editor/models/actionscontainermodel.h index c6748d1..19a555b 100644 --- a/src/editor/models/actionscontainermodel.h +++ b/src/editor/models/actionscontainermodel.h @@ -41,6 +41,7 @@ public: signals: void changed(); + void actionsContainerMissing(); private: ActionsContainer *m_actionsContainer{}; diff --git a/src/editor/resources_editor.qrc b/src/editor/resources_editor.qrc index 3b2672c..bbf428e 100644 --- a/src/editor/resources_editor.qrc +++ b/src/editor/resources_editor.qrc @@ -1,10 +1,12 @@ icons/action.png - icons/action-code.png + icons/action-execute-code.png icons/action-move-fixed.png icons/action-move-free.png icons/action-move-towards.png + icons/action-speed-horizontal.png + icons/action-speed-vertical.png icons/add.png icons/arrow-down.png icons/arrow-left.png diff --git a/src/editor/widgets/actionscontainerwidget.cpp b/src/editor/widgets/actionscontainerwidget.cpp index 309fec1..8bc77d4 100644 --- a/src/editor/widgets/actionscontainerwidget.cpp +++ b/src/editor/widgets/actionscontainerwidget.cpp @@ -10,6 +10,8 @@ #include "dialogs/actions/movefixeddialog.h" #include "dialogs/actions/movefreedialog.h" #include "dialogs/actions/movetowardsdialog.h" +#include "dialogs/actions/speedhorizontaldialog.h" +#include "dialogs/actions/speedverticaldialog.h" #include "dialogs/actions/executecodedialog.h" namespace { @@ -17,6 +19,8 @@ template struct ActionDialogForImpl; template<> struct ActionDialogForImpl { using Dialog = MoveFixedDialog; }; template<> struct ActionDialogForImpl { using Dialog = MoveFreeDialog; }; template<> struct ActionDialogForImpl { using Dialog = MoveTowardsDialog; }; +template<> struct ActionDialogForImpl { using Dialog = SpeedHorizontalDialog; }; +template<> struct ActionDialogForImpl { using Dialog = SpeedVerticalDialog; }; template<> struct ActionDialogForImpl { using Dialog = ExecuteCodeDialog; }; template using ActionDialogFor = ActionDialogForImpl::Dialog; } @@ -33,6 +37,9 @@ ActionsContainerWidget::ActionsContainerWidget(QWidget *parent) : connect(m_actionsModel.get(), &ActionsContainerModel::changed, this, &ActionsContainerWidget::changed); + connect(m_actionsModel.get(), &ActionsContainerModel::actionsContainerMissing, + this, &ActionsContainerWidget::actionsContainerMissing); + connect(m_ui->listViewActions, &QListView::customContextMenuRequested, this, &ActionsContainerWidget::actionsContextMenuRequested); @@ -50,12 +57,18 @@ ActionsContainerWidget::ActionsContainerWidget(QWidget *parent) : this, &ActionsContainerWidget::createNewAction); connect(m_ui->toolButtonMoveTowards, &QAbstractButton::clicked, this, &ActionsContainerWidget::createNewAction); + connect(m_ui->toolButtonSpeedHorizontal, &QAbstractButton::clicked, + this, &ActionsContainerWidget::createNewAction); + connect(m_ui->toolButtonSpeedVertical, &QAbstractButton::clicked, + this, &ActionsContainerWidget::createNewAction); connect(m_ui->toolButtonExecuteCode, &QAbstractButton::clicked, this, &ActionsContainerWidget::createNewAction); m_ui->toolButtonMoveFixed->setAction(MoveFixedAction{}); m_ui->toolButtonMoveFree->setAction(MoveFreeAction{}); m_ui->toolButtonMoveTowards->setAction(MoveTowardsAction{}); + m_ui->toolButtonSpeedHorizontal->setAction(SpeedHorizontalAction{}); + m_ui->toolButtonSpeedVertical->setAction(SpeedVerticalAction{}); m_ui->toolButtonExecuteCode->setAction(ExecuteCodeAction{}); } @@ -98,6 +111,18 @@ void ActionsContainerWidget::actionDoubleClicked(const QModelIndex &index) if (dialog.exec() == QDialog::Accepted) emit changed(); } + else if (auto ptr = std::get_if(action)) + { + SpeedHorizontalDialog dialog{*ptr, this}; + if (dialog.exec() == QDialog::Accepted) + emit changed(); + } + else if (auto ptr = std::get_if(action)) + { + SpeedVerticalDialog dialog{*ptr, this}; + if (dialog.exec() == QDialog::Accepted) + emit changed(); + } else if (auto ptr = std::get_if(action)) { ExecuteCodeDialog dialog{*ptr, this}; @@ -167,6 +192,12 @@ void ActionsContainerWidget::actionsContextMenuRequested(const QPoint &pos) menu.exec(m_ui->listViewActions->viewport()->mapToGlobal(pos)); } +void ActionsContainerWidget::actionsContainerMissing() +{ + QMessageBox::warning(this, tr("You need to select or add an event before you can add actions"), + tr("You need to select or add an event before you can add actions")); +} + template void ActionsContainerWidget::createNewAction() { diff --git a/src/editor/widgets/actionscontainerwidget.h b/src/editor/widgets/actionscontainerwidget.h index a22f86b..44cbeb1 100644 --- a/src/editor/widgets/actionscontainerwidget.h +++ b/src/editor/widgets/actionscontainerwidget.h @@ -26,6 +26,7 @@ signals: private slots: void actionDoubleClicked(const QModelIndex &index); void actionsContextMenuRequested(const QPoint &pos); + void actionsContainerMissing(); private: template diff --git a/src/editor/widgets/actionscontainerwidget.ui b/src/editor/widgets/actionscontainerwidget.ui index 2944c8a..6842209 100644 --- a/src/editor/widgets/actionscontainerwidget.ui +++ b/src/editor/widgets/actionscontainerwidget.ui @@ -240,13 +240,13 @@ - + Speed Vertical - :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + :/qtgameengine/icons/action-speed-vertical.png:/qtgameengine/icons/action-speed-vertical.png @@ -336,13 +336,13 @@ - + Speed Horizontal - :/qtgameengine/icons/action.png:/qtgameengine/icons/action.png + :/qtgameengine/icons/action-speed-horizontal.png:/qtgameengine/icons/action-speed-horizontal.png @@ -1450,7 +1450,7 @@ - :/qtgameengine/icons/action-code.png:/qtgameengine/icons/action-code.png + :/qtgameengine/icons/action-execute-code.png:/qtgameengine/icons/action-execute-code.png diff --git a/src/projectcontainer.h b/src/projectcontainer.h index 954ef25..ba98d6a 100644 --- a/src/projectcontainer.h +++ b/src/projectcontainer.h @@ -169,6 +169,14 @@ struct MoveTowardsAction { }; +struct SpeedHorizontalAction { + +}; + +struct SpeedVerticalAction { + +}; + struct ExecuteCodeAction { enum class AppliesTo { Self, @@ -184,6 +192,8 @@ using Action = std::variant< MoveFixedAction, MoveFreeAction, MoveTowardsAction, + SpeedHorizontalAction, + SpeedVerticalAction, ExecuteCodeAction >; diff --git a/src/projectserialization.cpp b/src/projectserialization.cpp index 2243398..d241617 100644 --- a/src/projectserialization.cpp +++ b/src/projectserialization.cpp @@ -304,6 +304,34 @@ QDataStream &operator>>(QDataStream &ds, MoveTowardsAction &action) return ds; } +QDataStream &operator<<(QDataStream &ds, const SpeedHorizontalAction &action) +{ + Q_UNUSED(action); +// ds << action.; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, SpeedHorizontalAction &action) +{ + Q_UNUSED(action); +// ds >> action.; + return ds; +} + +QDataStream &operator<<(QDataStream &ds, const SpeedVerticalAction &action) +{ + Q_UNUSED(action); +// ds << action.; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, SpeedVerticalAction &action) +{ + Q_UNUSED(action); +// ds >> action.; + return ds; +} + QDataStream &operator<<(QDataStream &ds, const ExecuteCodeAction &action) { ds << action.script; diff --git a/src/projectserialization.h b/src/projectserialization.h index 382fdbc..acd1a57 100644 --- a/src/projectserialization.h +++ b/src/projectserialization.h @@ -34,6 +34,10 @@ QDataStream &operator<<(QDataStream &ds, const MoveFreeAction &action); QDataStream &operator>>(QDataStream &ds, MoveFreeAction &action); QDataStream &operator<<(QDataStream &ds, const MoveTowardsAction &action); QDataStream &operator>>(QDataStream &ds, MoveTowardsAction &action); +QDataStream &operator<<(QDataStream &ds, const SpeedHorizontalAction &action); +QDataStream &operator>>(QDataStream &ds, SpeedHorizontalAction &action); +QDataStream &operator<<(QDataStream &ds, const SpeedVerticalAction &action); +QDataStream &operator>>(QDataStream &ds, SpeedVerticalAction &action); QDataStream &operator<<(QDataStream &ds, const ExecuteCodeAction &action); QDataStream &operator>>(QDataStream &ds, ExecuteCodeAction &action); QDataStream &operator<<(QDataStream &ds, const TimeLine &timeLine);