diff --git a/src/dialogxml/dialogs/pictchoice.cpp b/src/dialogxml/dialogs/pictchoice.cpp index 94ae2ccb..41f3655c 100644 --- a/src/dialogxml/dialogs/pictchoice.cpp +++ b/src/dialogxml/dialogs/pictchoice.cpp @@ -160,4 +160,26 @@ size_t cPictChoice::getSelected() const { void cPictChoice::disableCancel() { dlg["cancel"].hide(); +} + +pic_num_t choose_status_effect(short cur, bool party, cDialog* parent) { + static const char*const status[] = { + "Poisoned Weapon", "Bless/Curse", "Poison", "Haste/Slow", "Invulnerable", + "Magic Resist/Amplify", "Webs", "Disease", "Sanctuary", "Dumbfounding/Enlightening", + "Martyr's Shield", "Sleep/Hyperactivity", "Paralysis", "Acid", "Forcecage", + }; + static const char*const pstatus[] = {"Stealth", "Flight", "Detect Life", "Firewalk"}; + static const std::vector status_pics = {4,2,0,6,5,9,10,11,12,13,14,15,16,17,20}; + static const std::vector pstatus_pics = {26,23,24,25}; + short prev = cur; + if(cur < 0 || cur >= (party ? pstatus_pics : status_pics).size()) cur = 0; + cPictChoice pic_dlg(party ? pstatus_pics : status_pics, PIC_STATUS, parent); + pic_dlg->getControl("prompt").setText("Select a status effect:"); + pic_dlg->getControl("help").setText((party ? pstatus : status)[cur]); + pic_dlg.attachSelectHandler([party](cPictChoice& me, int n) { + me->getControl("help").setText((party ? pstatus : status)[n]); + }); + bool made_choice = pic_dlg.show(cur); + size_t item_hit = pic_dlg.getSelected(); + return made_choice ? item_hit : prev; } \ No newline at end of file diff --git a/src/dialogxml/dialogs/pictchoice.hpp b/src/dialogxml/dialogs/pictchoice.hpp index 08a1710e..cd8f88ff 100644 --- a/src/dialogxml/dialogs/pictchoice.hpp +++ b/src/dialogxml/dialogs/pictchoice.hpp @@ -79,4 +79,6 @@ public: void disableCancel(); }; +pic_num_t choose_status_effect(short cur, bool party, cDialog* parent = nullptr); + #endif diff --git a/src/scenedit/scen.core.cpp b/src/scenedit/scen.core.cpp index 98b3ef1b..c2dfba91 100644 --- a/src/scenedit/scen.core.cpp +++ b/src/scenedit/scen.core.cpp @@ -27,6 +27,7 @@ #include "dialogxml/dialogs/strdlog.hpp" #include "dialogxml/dialogs/3choice.hpp" #include "dialogxml/dialogs/strchoice.hpp" +#include "dialogxml/dialogs/pictchoice.hpp" #include "fileio/fileio.hpp" #include "dialogxml/widgets/field.hpp" #include "fileio/resmgr/res_dialog.hpp" diff --git a/src/scenedit/scen.keydlgs.cpp b/src/scenedit/scen.keydlgs.cpp index 2a7e6f30..faec8e58 100644 --- a/src/scenedit/scen.keydlgs.cpp +++ b/src/scenedit/scen.keydlgs.cpp @@ -980,28 +980,6 @@ static pic_num_t choose_boom_type(short cur, cDialog* parent) { return made_choice ? item_hit : prev; } -pic_num_t choose_status_effect(short cur, bool party, cDialog* parent) { - static const char*const status[] = { - "Poisoned Weapon", "Bless/Curse", "Poison", "Haste/Slow", "Invulnerable", - "Magic Resist/Amplify", "Webs", "Disease", "Sanctuary", "Dumbfounding/Enlightening", - "Martyr's Shield", "Sleep/Hyperactivity", "Paralysis", "Acid", "Forcecage", - }; - static const char*const pstatus[] = {"Stealth", "Flight", "Detect Life", "Firewalk"}; - static const std::vector status_pics = {4,2,0,6,5,9,10,11,12,13,14,15,16,17,20}; - static const std::vector pstatus_pics = {26,23,24,25}; - short prev = cur; - if(cur < 0 || cur >= (party ? pstatus_pics : status_pics).size()) cur = 0; - cPictChoice pic_dlg(party ? pstatus_pics : status_pics, PIC_STATUS, parent); - pic_dlg->getControl("prompt").setText("Select a status effect:"); - pic_dlg->getControl("help").setText((party ? pstatus : status)[cur]); - pic_dlg.attachSelectHandler([party](cPictChoice& me, int n) { - me->getControl("help").setText((party ? pstatus : status)[n]); - }); - bool made_choice = pic_dlg.show(cur); - size_t item_hit = pic_dlg.getSelected(); - return made_choice ? item_hit : prev; -} - snd_num_t choose_sound(short cur, cDialog* parent, std::string title) { if(cur < 0) cur = 0; StringList snd_names = *ResMgr::strings.get("sound-names"); diff --git a/src/scenedit/scen.keydlgs.hpp b/src/scenedit/scen.keydlgs.hpp index 94415e23..1b3e6564 100644 --- a/src/scenedit/scen.keydlgs.hpp +++ b/src/scenedit/scen.keydlgs.hpp @@ -26,5 +26,4 @@ size_t num_strs(eStrMode str_mode); pic_num_t choose_damage_type(short cur, cDialog* parent, bool allow_spec); short choose_field_type(short cur, cDialog* parent, bool includeSpec); -pic_num_t choose_status_effect(short cur, bool party, cDialog* parent); snd_num_t choose_sound(short cur, cDialog* parent, std::string title = "Which sound?");