Use an editable string picker for job boards when editing quests or dialogue nodes
This commit is contained in:
@@ -2124,9 +2124,13 @@ static void put_quest_in_dlog(cDialog& me, const cQuest& quest, size_t which_que
|
||||
if(quest.bank1 < 0 && quest.bank2 < 0) {
|
||||
me["bank1"].hide();
|
||||
me["bank2"].hide();
|
||||
me["choose-bank1"].hide();
|
||||
me["choose-bank2"].hide();
|
||||
} else {
|
||||
me["bank1"].show();
|
||||
me["bank2"].show();
|
||||
me["choose-bank1"].show();
|
||||
me["choose-bank2"].show();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2182,19 +2186,26 @@ bool edit_quest(size_t which_quest) {
|
||||
cDialog quest_dlg(*ResMgr::dialogs.get("edit-quest"));
|
||||
quest_dlg["cancel"].attachClickHandler(std::bind(&cDialog::toast, _1, false));
|
||||
quest_dlg["okay"].attachClickHandler(std::bind(save_quest_from_dlog, _1, std::ref(quest), std::ref(which_quest), true));
|
||||
quest_dlg["choose-evt"].attachClickHandler([](cDialog& me, std::string, eKeyMod) {
|
||||
int value = me["evt"].getTextAsNum();
|
||||
value = choose_text_editable(scenario.evt_names, value, &me, "Select an event:");
|
||||
me["evt"].setTextToNum(value);
|
||||
quest_dlg.attachClickHandlers([](cDialog& me, std::string item_hit, eKeyMod) {
|
||||
std::string field_id = item_hit.substr(7);
|
||||
std::string title = field_id == "evt" ? "Select an event:" : "Select a job board:";
|
||||
auto strings = field_id == "evt" ? scenario.evt_names : scenario.qb_names;
|
||||
int value = me[field_id].getTextAsNum();
|
||||
value = choose_text_editable(strings, value, &me, title);
|
||||
me[field_id].setTextToNum(value);
|
||||
return true;
|
||||
});
|
||||
}, {"choose-evt", "choose-bank1", "choose-bank2"});
|
||||
quest_dlg["inbank"].attachFocusHandler([](cDialog& me, std::string, bool losing) -> bool {
|
||||
if(losing) {
|
||||
me["bank1"].hide();
|
||||
me["bank2"].hide();
|
||||
me["choose-bank1"].hide();
|
||||
me["choose-bank2"].hide();
|
||||
} else {
|
||||
me["bank1"].show();
|
||||
me["bank2"].show();
|
||||
me["choose-bank1"].show();
|
||||
me["choose-bank2"].show();
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
@@ -413,6 +413,13 @@ void writeScenarioToXml(ticpp::Printer&& data, cScenario& scenario) {
|
||||
data.PushText(scenario.itf_names[i]);
|
||||
data.CloseElement("item-typeflag");
|
||||
}
|
||||
for(int i = 0; i < scenario.qb_names.size(); i++) {
|
||||
if(scenario.qb_names[i].empty()) continue;
|
||||
data.OpenElement("job-board");
|
||||
data.PushAttribute("id", i + 1);
|
||||
data.PushText(scenario.qb_names[i]);
|
||||
data.CloseElement("job-board");
|
||||
}
|
||||
for(int r = 0; r < SDF_ROWS; r++) {
|
||||
for(int c = 0; c < SDF_COLUMNS; c++) {
|
||||
if(scenario.get_sdf_name(r, c).empty()) continue;
|
||||
|
@@ -1137,6 +1137,7 @@ static bool edit_spec_enc_value(cDialog& me, std::string item_hit, node_stack_t&
|
||||
case eSpecPicker::SOUND: store = choose_sound(val, &me); break;
|
||||
case eSpecPicker::EVENT: store = choose_text_editable(scenario.evt_names, val, &me, "Select an event:"); break;
|
||||
case eSpecPicker::ITEM_CLASS: store = choose_text_editable(scenario.ic_names, val, &me, "Select item class:"); break;
|
||||
case eSpecPicker::JOB_BOARD: store = choose_text_editable(scenario.qb_names, val, &me, "Select a job board:"); break;
|
||||
case eSpecPicker::NONE: return false;
|
||||
}
|
||||
me[field].setTextToNum(store);
|
||||
|
@@ -1251,6 +1251,7 @@ static std::map<eTalkNode, std::array<node_function_t, 4>> node_map = {
|
||||
{eTalkNode::DEP_ON_TIME_AND_EVENT, {eSpecPicker::NONE, eSpecPicker::EVENT}},
|
||||
{eTalkNode::DEP_ON_TOWN, {STRT_TOWN}},
|
||||
{eTalkNode::SHOP, {STRT_COST_ADJ, STRT_SHOP}},
|
||||
{eTalkNode::JOB_BANK, {eSpecPicker::JOB_BOARD}},
|
||||
{eTalkNode::ENCHANT, {STRT_ENCHANT}},
|
||||
{eTalkNode::BUY_SDF, {eSpecPicker::NONE, eSpecPicker::SDF}},
|
||||
{eTalkNode::BUY_SHIP, {eSpecPicker::NONE, STRT_BOAT}},
|
||||
@@ -1383,6 +1384,10 @@ static bool select_talk_node_value(cDialog& me, std::string item_hit, const std:
|
||||
int value = me[field_id].getTextAsNum();
|
||||
value = choose_text_editable(scenario.evt_names, value, &me, "Select an event:");
|
||||
me[field_id].setTextToNum(value);
|
||||
} else if(fcn.button == eSpecPicker::JOB_BOARD) {
|
||||
int value = me[field_id].getTextAsNum();
|
||||
value = choose_text_editable(scenario.qb_names, value, &me, "Select a job board:");
|
||||
me[field_id].setTextToNum(value);
|
||||
} else if(fcn.button == eSpecPicker::LOCATION) {
|
||||
location loc(me[field_id].getTextAsNum(), me[second_field_id].getTextAsNum());
|
||||
cLocationPicker picker(loc, *town, "Choose a location:", &me);
|
||||
|
Reference in New Issue
Block a user